Movement Challenge 2K7/Pre-Chat

From Robowiki
Jump to navigation Jump to search
MC2K7 Sub-pages:
Movement Challenge 2K7Reference Bots - How-To - Results - Fast Learning Results - Pre-Chat

I would like to see a new movement challenge. And I think it should be more like WaveSurfing/DevilFISHChallenge and WaveSurfing/BarracudaChallenge: the reference bots should move. A good movement needs to get field position, and getting good field position is WAY different with a moving bot than a stationary one. Also, I'm not so sure about the reference bot always firing power 3 bullets. Any thoughts? We should have a mix of bots that fight close & far, as well as a mix of targeting techniques. Reflecting the climate of the rumble should be the main goal in the selection of reference bots. Are you guys in? -- Simonton

I'm down =) I agree that the MovementChallenge is a lot further from reflecting RoboRumble rating than the TargetingChallenge is and that a format change might help. It can certainly only get so close to truly reflecting RoboRumble rating, but I think it could be a lot closer. Do we have a common / fixed gun for this one, then? -- Voidious

No, I was still thinking that the challenger gets no gun. Otherwise we would be tweaking our movement to compliment that gun, not necessarily evade bullets. -- Simonton

Consider this, though: staying far away is always good if you have no gun, but it has pros and cons if you also have a gun, since you'll hit and be hit more often if you stay close. -- Voidious

I agree, both have thier bonuses, enemy robots generally react to gun-fire. Though the Enemy Robot, they fire whatever they fire (and move however they move). --Chase-san

Wow, that's a neat "Edit Conflict" feature in the wiki. Except that it failed my consciousness check (4 * 10 = 40, right?). Anyway ...

  • @Voidious: This is true, but those consequences depend on the gun you use, so tweaking your movement to someone else's gun doesn't seem to make much sense to me. UNLESS ... we could have a range of guns to try on. Then you could tweak your movement system based on your/his hitrate at different ranges and aim for the optimal distance. That seems VERY useful (though maybe beyond the relm of codsize-restricted leagues, and therefore of less interest to me :) ). The trouble there is 4 guns x 6 competitors = 24 combinations in the challenge.
  • @Chase: (after seeing your post in the "conflict" window) that's an excellent point. -- Simonton

Well, I agree you would be tuning your movement to complement a certain gun to whatever degree, but I'm not sure how much that actually matters. I don't believe I've ever seen evidence of movement A + gun A being better than movement B + gun A but movement A + gun B being worse than movement B + gun B. In 1v1, we all use about the same bullet power with some type of learning gun - I think we'd be better off tuning to complement a basic GF gun with power 1.9 bullets than tuning to complement a wide variety of guns that most of us don't use. Just throwing my thoughts out there, though, I'm cool with whatever is agreed upon. We could also just use RandomTargeting or something. -- Voidious

Note: I don't think Dookious would perform better against a RandomTargeting gun than SittingDuck would do ;-) . I am interested though. My ideas for this challenge are kinda the same as Simontons, with some additions. First of all the referencebots should fire a mix of 3.0/1.9 power bullets without energy management. To reflect the rumble, the simpler targeters would fire 3.0, the more sophisticated 1.9. The movement of the referencebots could 'simulate' enemyfire if necessary (on tick 30, 43, 56, 69 etc), to provide a more real movement. I would also like a 'dumb' rammer in, kinda like bbo.RamboT. The idea of 4 guns with 6 movements I dont like, just choose some interesting combinations and thats it. The idea still is that the challenger does not fire, is it? -- GrubbmGait

I think the challenger should run a rather simple GF gun(Raiko's, la normale?), I never knew 1.9 was the defacto(used from 1.6 to 2 myself). At any rate, that gives the enemy something to dodge, and makes them move, however, should we force the reference bot to use a certain power bullet, such as 3? -- Chase-san

  • A firing challenger would only result in a random factor which influences the score. --Krabb
    • That comment was blindfold :) I would prefer a RandomTargeting gun to a learning gun. I think a random gun will minimise the randomness of the crore. Sounds odd, but a random gun is not influenced by previous events in comparison a learning gun, which might acquire the movement pattern faster or slower in different cases. --Krabb
    • It's tough to say which would be "less random", but I think you're right a RandomTargeting gun would be slightly more consistent. However, if the learning gun is so much closer to what most of us actually use, it still might be a better choice, right? -- Voidious

Note: I think Dookious would perform worse against a RandomTargeting gun than SittingDuck would do, because Dookious is moving and therefore it covers a greater area where it could be hit :P . I like the idea of having different targeting methods compared with different movement modes. I would propose some random moving bot (or a Surfer, which simulates enemy fire, like GrubbmGait said) as a basic movement for all reference bots. This movement must be fast (from the calculation prospect) and with at least two modes (close/great distance to enemy). I could think of the following combinations:

Part I (to measure the correctness of the challenger at all distances/situations):

  • rammer + simple targeting (e.g. bbo.RamboT)
  • agressive movement (close distance) + LinearTargeting (or circular)
  • agressive movement + HeadOnTargeting
  • passive movement (great distance) + LinearTargeting (and/or circular)
  • passive movement + HeadOnTargeting

Part II (to measure the learning skills):

  • competitive targeting (like the reference bots of the MovementChallenge2K6, maybe mith individual fire power) in combination with agressive and passive versions of the basic movement.


  • Some responses to Krabb here:
    • Agressive movement + LinearTargeting = DevilFISH. I like that choice as a reference bot
    • Passive movement + HeadOnTargeting = HawkOnFire or Barracuda? Definitely like that too.
    • I think having another 2 reference bots with these basic targeting methods might be a little much. Maybe something with VirtualGuns of simple targeters, like GrubbmGrb? Other than that, your breakdown sounds good to me as a general outline of the reference bots.

Maybe you guys misunderstood me - I meant RandomTargeting could be used as the common gun that all challengers used, since the most important aspect to me is that you hit more often when you're closer to the enemy. I didn't mean we should try to dodge RandomTargeting. =) Good thoughts from everyone, though, I'll try and brainstorm a bit more myself too. -- Voidious

Yeah, I think we're coming up with a decent challenge here. I think I like the idea of RandomTargeting (just because you all use GF guns doesn't mean I should have to tune to them :) ). I'm still not sure about firepower. Maybe the reference bots could alternate between 3 and 1.9 on a per-turn basis? Or some of them could use some standard energy managment - that's probably a better idea. Something like getEnergy() / 16, and/or 900 / getDistance() (just because those are my two favorites - we should actually pick something that reflects the rumble well). But we definitely want to make sure our movements work well at a range of firepowers.

Also, I really like the idea of including a RamBot. -- Simonton

  • On second thought, maybe I'm not so sure about the RandomTargeting thing. Distancing should be about "at what distance/field position do I get the biggest share of the score, and how can I stay at that distance most often". Random targeting will let you tweak to be at the best place if your gun is worse than your opponent's, but the best movement should also detect when his gun is stronger than the opponent's & move accordingly. -- Simonton
  • Yeah, I'm not sure I like the RandomTargeting idea, either. I think any simple learning gun would be a good choice - simple so as to be consistent, but still something halfway decent so it's at least in the ballpark of what most of us use. I still am not convinced that it matters all that much to tune a movement around the gun - and to the degree it does matter, there are still huge variations between guns of the same type. But I don't have data to say how much it does or doesn't matter, either. We could make a hybrid gun that runs a FoldedPatternMatcher (like Che) and a basic GF gun (like GFTargetingBot) and randomly switches between them, so that you're tuning around a decent gun that's neither GF or PM. Hmm... -- Voidious
  • Or we could just fire Head on at like 1.9 to make them move. --Chase-san
  • Or fire light bullets (0.1 - 0.5) in the opposite direction. That way you don't affect scoring by actually hitting the referencebots, but still would trigger their movement algorithm. -- GrubbmGait
    • As Voidious pointed out the hit-rate of your gun affects the optimal distance in which your bot should be. But i suspect (like you) it'll affect the scoring badly. We should make some tests to prove/disprove that. --Krabb

Additionally we could turn on challenger-fire only vs. one or two reference bots, in order to test the distancing code. I like the idea of having different reference bot categories to test different parts of the movement. --Krabb

Yeah, I guess I've pretty much settled on a simple learning gun as the best alternative, myself. I buy the idea that GF vs. PM isn't going to make all that much difference, and I think we need something stronger than random targeting to be realistic. If some of the reference bots' movements are stronger than the common gun, and some are weaker, that should give us the opportunity to tweak distancing appropriately. As for whether we fire in every pairing of the challenge, I vote yes. That should make it easiest to automate running the challenge, and again I think the stronger/weaker choices take care of distancing appropriately. I'm all for running some tests to see if firing affects scoring in a bad way - what kind of tests would that be? -- Simonton

  • I don't think it's a problem to automate the challenge with firing and none firing pairings. The gun which must be plugged on the reference bot could detect the reference bots name and decide about firing. The only problem is the score, we might have to do different calculations for the firing pairings. But how do we define the score at all? --Krabb
  • The scoring would still be ((100 * rounds - bulletdamage) / rounds), bulletdamage offcourse from the referencebot. The challenge has to be divided in subchallenges, just like the MovementChallenge2K6, but then for firing vs non-firing. -- GrubbmGait
  • Why not just use score percentage now that we're basically running normal battles? I think that's a more accurate measurement since that's really what you want to maximize. -- Voidious
  • Well, if everyone is using the same (basic GF) gun, it should not matter, as the gun would produce the same hitpercentage for every challenger against a particular referencebot. But because it is a movementchallenge, it seems more appropriate to measure your movement (e.g. bulletdamage referencebot) instead of overall performance. -- GrubbmGait
  • Hmm... Well, I guess I just think that since the only variable is the challenger's movement, measuring overall performance is measuring the movement. And since score percentage is what we want to maximize in a real battle (as opposed to minimizing bullet damage), we might as well use that score instead of raw bullet damage. I think just measuring bullet damage might make it best to just stay as far away as possible instead of finding optimal distancing; against a bot that is kicking your butt, I think you'll get more score percentage to stay close and increase both your bullet damages. I'm not sure, though... I guess let's see what others think. -- Voidious
  • You're right, it depends on your movement (read active distancing) what percentage your 'standard' gun scores. -- GrubbmGait
  • Good point about the automation. And yes, I also agree; we should definitely use % of total score. -- Simonton

I was thinking of some nice kinds of bots to use for this challenge and here is what i've come up with (all bots should use some kind of energy management

Wave Surfing Part

  • A good rambot with head on targeting
    • which disqualifies bbo.RamboT, as it scores only 48 damage against a non-firing GresSuffurd in 35 rounds.
  • A bot with aggresive movement and linear targeting
  • A bot with passive movement and circular targeting
  • A bot with agressive movement and a lightly segmented GF gun

Anti Pattern matching part

  • 3 pattern matchers with agressive/passive and stationary movements

Curve Flattening

  • Some of the top guns and movements on the rumble

-- Gorded

This list looks good to me. Except I'm not sure why we need a stationary PM? Perhaps if people want to test their randomness with a stationary competitor they can continue with the existing PM challenge? Also, the original movement challenge had agressive/linear, right? I guess it's no problem to duplicate that, though, since it's just for one reference bot. And again, I agree, having them use energy management sounds right. Wouldn't the lightly segmented GF gun be part of the Curve Flattening part of the challenge, though? -- Simonton

Well, the conversation obviously died, so I guess it must be time for voting. Let me piece together what seems to be the ideas & bots so far. Anyone can add more suggestions for 1 week, then we'll add columns for voting? Sound decent? That would mean we start voting Friday, July 6th. -- Simonton

Reference Targeting / Movement Bot Simonton Voidious Skilgannon Chase-san GrubbmGait Krabb Starrynte Total Votes
Aggressive / Head On X X 2
Aggressive / Linear DevilFISH 0
Splinter X X X X X 5
Aggressive / Simple GF X X X X X X 6
Aggressive / PM 0
Aggressive / Simple Gun VG X X 2
Passive / Head On HawkOnFire X X X X X X X 7
Barracuda 0
Passive / Linear X X 2
Passive / Circular X 1
Passive / PM Waylander X X X X X X 6
Passive / Simple Gun VG X X X X X 5
Stationary / PM 0
Top Rumble Bots Shadow, DT X X X X X X 6
Ramming RamboT X X X X X X X 7

Reference Firepower Simonton Voidious Skilgannon Chase-san GrubbmGait Krabb Starrynte
Simple ones fire 3.0, advanced fire 1.9 X X X
getEnergy() / 16
900 / e.getDistance()
Simple ones fire 3.0, advanced use their advanced system X X X X

Challenger Targeting Bot Simonton Voidious Skilgannon Chase-san GrubbmGait Krabb Starrynte
Simple GF Raiko X X X X X
Simple PM (a la Waylander) X
Head On WSCA :) X
Reverse Head On

Challenger Targeting Part II Simonton Voidious Skilgannon Chase-san GrubbmGait Krabb Starrynte
Challenger always fires X X X X X X
Challenger only fires against some bots X

Challenger Firepower Simonton Voidious Skilgannon Chase-san GrubbmGait Krabb Starrynte
Raiko's X X X X X X X
getEnergy() / 16
900 / e.getDistance()

Hmm - ok then. Let's commence voting. Vote for as many as you'd like in each category, for now. -- Simonton

Ok, we've finally got a second vote in here. I don't know why we always end up having these votes when there's a lull in RoboWiki activity! =) Let's leave this up for a bit, I'm sure we'll get some more votes. I added 1.9 and 3.0 to challenger firepower, by the way, just because they seemed like reasonable options. -- Voidious

I've added a simple pattern matcher to the challenger's targeting method -- Waylander uses symbolic without any folding or anything, and I can tweak it to make it both fast and pluggable. -- Skilgannon

Raiko is the old standby, its been used in many challenges already for its gun. Its tried and true. Not to mention fast. --Chase-san

There is a loooong discussion about what gun the challenger should use on this page, too, if you're interested =) ... Raiko would seem a good choice to fulfill the "Simple GF", but I don't think that was ever really said. It is used in the RRGunChallenge and is definitely a very good choice. (Though it's interesting that Raiko always gets the spotlight when the gun was based off of PEZ's Tityus! ;)) -- Voidious

Finally entered my choices, a new assignment and a two-week vacation does not help to be active here . . . -- GrubbmGait

How about we set a voting deadline of August 24th (next Friday) for this? I think we have a good outline going so far; it'd be fun to start testing against an MC2K7. Then we could just decide how many bots to include and go ahead with finalizing this. Anyone disagree with that plan? -- Voidious

  • Ok, it took me like 5 minutes to get into context here...anyways, I'm always usually precise when i think, so here are a few strange questions: Do you mean August 24th 0:00 EDT is the deadline? or August 25th 0:00 EDT? And is it EDT? (can you tell I kinda like to do things last minute?) Otherwise I'll assume it's August 24th 0:00 EDT... --Starrynte
    • Hmm, in that case, I think what he meant for YOU is August 20th 0:00 EDT. ;) Come on - all you have to do is put some X's in the tables up there. --Simonton
      • Lol, nvm about that, I've decided now --Starrynte
  • You asked just maybe a few days too soon. Once I wanted to actually start testing movement I was just going to just make the challenge & call it the deadline (since the one I tentatively set before is like 2-3 months past, I figured anyone who wanted to chime in already has). -- Simonton

Is it Friday yet? -- Simonton

OK! I say we use 3 top rumble bots & those with votes 5 & higher above. That totals 8 bots in the challenge:

  • 3 top rumblers as is
  • Splinter firing 3.0
  • agressive+simple GF (bot suggestion?) firing 3.0
  • HawkOnFire firing 3.0
  • passive+PM firing using it's own firepower (one suggestion was Waylander, though it was suggested after some of the votes were cast - I like it now that it's proving effective in the micro rumble!)
  • passive+VG firing using it's own (or 3.0?)
  • RamboT

The challenger will fit itself with Raiko's gun. I'll start working on putting some of this together. Does anyone have any good suggestions for the bots without names yet? -- Simonton

Waylander should be modified to prevent the StopAndGo, otherwise it will throw away its first round against Raiko's gun. Just set flat=true at the top. Simple GF+aggressive is rare, maybe a modified version of FloodMini? -- Skilgannon

DevilFISH is the only really aggressive movement I know of, so fitting it with the gun from GFTargetingBot or some such might be the solution to bullet #3; altering a basic RandomMovement (pick your favorite top MicroBot here =)) to have a really close preferred distance would also do the trick. I believe it was passive+VG that was voted in, not passive+GF, right? I hope you don't mind me changing it in the list there; GrubbmGrb (possibly w/modified firepower) fits that bill well, I think. I'm just throwing this out as a question: do we want to use a simple rammer like RamboT, or something more substantial like MaxRisk? (When MaxRisk first came out, it exposed a serious flaw in my handling of rammers and cleaned Dooki's clock, for what it's worth...) Pros & cons each way, I think. -- Voidious

  • Those sound good enough for me. Or how about fitting DevilFISH with Raiko's gun? That would be _really_ easy since I already modified that gun to plug in to challengers' bots! Or maybe that's not "simple" GF? GrubbmGrb sounds great, I'll get that ready. As for which rammer - which kind is going to be more common to face in the rumble? -- Simonton
    • Sure, DevilFISH + Raiko seems good. Raiko's gun is pretty good, but it's definitely "simple" compared to the top 3 rumble bots, anyway. I really don't know about the "average rammer". I'd think you could obliterate a simpler rammer like RamboT and still not have perfect anti-ramming protection, but after examining some RoboRumble details of various rammers, I don't really see any examples to back that up. Thanks for taking care of this! -- Voidious

Not quite "pre"-chat:

What do y'all think of this breakdown for scoring? Are the categories good, to have their averages averaged for the overall score? --Simonton

  • My only concern is that a Waylander-designed APM movement could unbalance your score, like your anti-Che. =) Other than that, average of the categories is OK with me. Thoughts? -- Voidious
  • How about we call that cheating and remove LifelongObsession's score from MovementChallenge2K6/Results? -- Simonton
  • By the way, I could fairly easily plug in any gun and achieve the same results with LifelongObsession ... just so you know pattern matching itself really has nothing to do with it :) -- Simonton
  • I suppose you're right about that. =) But another reason I mentioned Waylander is because it is the only bot in its category. In MC2K6, if you plugged in CC's gun, it would balance by killing your scores against Shadow and FloodHT, but in this case, Waylander would be weighted extra high, as 25% of the score over 8 bots (like Che as 33% over 7 bots). Anyway, I'm hesitant to call anything "cheating" - it's not like there are any prizes or anything, and anti-whatever movement is a valid form of movement, theoretically! Anyway, I think that breakdown is good. -- Voidious

I found a serious bug in Waylander 0.1.10. When it tries to remove the oldest data from its StringBuilder, it removes the most recent instead. This should affect AM bots more than others, because after 15000 ticks it doesn't learn anything new for the next round. I strongly suggest it gets changed for 0.1.14. Sorry about that. -- Skilgannon

  • Ah, that is something we'll want to change. Feel free to repackage the .zip above. If not I should get to it sometime tonight. -- Simonton
  • Done. -- Simonton

Quick question (without actually testing myself)... I was thinking, for some reason, that this challenge would only be 35-rounds. The 500 and 35-round variants make sense just fine, but does Waylander slow down drastically (as many PMs do) as you get up in rounds? This is a key reason we used Che for MC2K6. -- Voidious

  • It shouldn't (without actually testing myself)... It trims it pattern size just like Che. -- Simonton
    • As he said, it only stores the last 15000 ticks of pattern data (trimmed at the beginning of each round). -- Skilgannon
  • Sweet. Thanks again for taking the lead with all this, Simonton! Let's rock! -- Voidious
  • I'll rock just as soon as I get RoboResearch to spit out results in wiki format! (It's getting late, I was hoping that would be tonight. I'm getting a lot closer). -- Simonton

Oops - I forgot one of the reference bots in the zip. Fixed. -- Simonton

Hey wait - isn't it GrubbmGrb we want? The one with VirtualGuns of simple targeters? -- Voidious

Oh, ok. Sure. Dang those so-close-to-the-same-names-that-I-can't-pronounce. -- Simonton

  • Um, I think I have the code figured out - now I just need to know ... which virtual guns are we using? Here's the comments: --Simonton
    • private static final int CIRC = 0; // Circular Targeting
    • private static final int HOT = 1; // Head On Targeting
    • private static final int ORBIT = 2; // Sort of Linear/Orbital targeting of Iiley's Smog 2.5
    • private static final int CTRA = 3; // Rolling Average Circular Targeting
    • private static final int RANDOM = 4; // Random gun
  • I'm cool with leaving all of them, but I think the first 3 are the most important. -- Voidious
  • I think we can leave out the random gun. It interferes with the other guns we are trying to dodge. -- Skilgannon
  • I agree with Skilgannon, no random gun. --Chase-san
  • Some random nois might have some advantages too. It would make it harder to dodge the other guns (as you said) and therefor more challenging. I don't know how the rnd gun would affect the stability of the rankings, but i would keep it. --Krabb

Is the zip ready yet? --Starrynte

  • No, I don't know how to fix it yet. It's ready except GrubbmOne should be replaced with GrubbmGrb ... once we figure out how to modify GrubbmGrb. I'm looking at the code, and I don't understand it to make any kind of educated vote. I mean, I don't understand the "orbital targeting". What is that, and can someone explain the math going on there? -- Simonton
	double tmpb = getHeadingRadians() + enemy.getBearing() - enemy.getHeading() + 0.5*PI;
	if (enemy.getSpeed( CIRC) < 0) tmpb -= PI;
	return( getHeadingRadians() + enemy.getBearing() + Math.atan2(Math.cos(tmpb) *
            Math.abs(enemy.getSpeed( CIRC)), 14 + Math.sin(tmpb)));
  • As far as I understand it myself (Iiley made it, and he is smarter than me), it takes the lateral velocity of the opponent and assumes the opponent to circle around you with that same speed. It assumes the bullet to be fired has power 2.0 (bulletspeed 14) with a small compensation for advancing velocity. And concerning the naming: if I can not stand out by the performance of my bots, then I will by their (easy to pronounce) names :-D -- GrubbmGait
  • Got it! Ok, sweet. This one looks good to use. Now ... about that rolling-average gun. I don't think that's a good test of wave surfing ... is there any good way to predict that gun without keeping your own rolling average with the same depth as one of your segments? (question posed to all, not just GrubbmGait) -- Simonton
    • I say leave it, but I do agree the other 3 are closer to what we have in the WaveSurfingChallenge2K6, so I won't argue if you guys wanna ditch it. I disagree that you couldn't surf it, though. Look how well we can do against a GuessFactor gun with FloodHT in MovementChallenge2K6; this isn't nearly as sophisticated. I reckon Dookious could get 95+ against a RollingAverage CT gun (if it works how I'd imagine). -- Voidious
    • Dookious may well get a 95+, but I think this bot should be our chance to shoot for 99+. Splinter has a random component to its linear gun (it may shoot anywhere from head-on to linear, but more often pure-linear), so GrubbmGrb is our only chance to surf linear/circular guns perfectly. -- Simonton
      • Well, I'm saying Dookious could get a 95+ against just that RollingAverage CT gun. I think even 80 will be an insanely high score against GrubbmGrb in this challenge. (Check out the TargetingChallenge2K7/VotingResults page, where GrubbmGrb's gun was one of the reference bots for testing. The best score anyone got was WaveSerpent, who got a 52.64.) Anyway, I think it's a fairly arbitrary decision whether to keep RollingAverage CT or not, I just don't think "it's unsurfable" or "it will stop us from getting 99+" are good reasons for it. I hope I don't seem confrontational or anything, I'm not trying to be =); if you just don't want it in there, please feel free to just kill it! -- Voidious
      • Consider it dead! :) I'm assuming taking the random gun out will greatly increase surfing scores against GrubbmGrb, but I guess we'll see! I just want to make sure there's a good test in there for getting the bugs out of our surfing. Even though the MovementChallenge2K6 has the simple targeters covered, there could be bugs lurking then they start moving. The circular/linear/orbital unique gun from Smog still doesn't quite fit that bill perfectly - but even segmentation from a MiniBot should still be very effective against it (maybe even 95+?). --Simonton

I checked GrubbmGrb and I have two remarks about its behaviour. First it starts with its StopAndGo movement, while that movement is disabled on the other bots. Secondly, it does not always fire 3.0. The CT-gun adjusts the bulletpoer to prevent shooting into the wall. If you change the lines mentioned below GrubbmGrb will behave as expected.

comment out lines 790 and 794-799

That should do the trick. -- GrubbmGait

  • Excellent! Thank you much for the assistance. A new zip is coming up shortly. -- Simonton

AHHHHHHHHHHHHHHHHHHHHHHHHHHHH! I will NEVER get this right! Ok, there's a new zip now. Again. We'll see if it takes any more to get it right. -- Simonton

  • I was right. I didn't get it right. I never thought about the fact that the top rumble bots would use data saving out-of-the-box. Voidious fixed up CassiusClay so it wouldn't do that anymore. The .zip has been updated. Try not to curse me, & grab it again. -- Simonton