Sections
Home
Hills
Infinite Hills
Tournaments
Software
Evolving
Optimizer
Community
Newsletter
Discussion
History
Sections
 
For Beginners
First Steps
FAQ
Guides
Lexicon
Benchmarks
For Beginners
> Home > The Corewar Newsletters > Core Warrior > Issue #1

Issue 80                                                       31 January, 2002
_______________________________________________________________________________
Core Warrior is a newsletter promoting the game of corewar. Emphasis is placed
on the most active hills - currently the '94 draft hill, the beginner hill and
the '94 no-pspace hill. Coverage will follow where ever the action is. If you
haven't a clue what I'm talking about then check out these five-star Internet
locals for more information:

FAQs are available from:
  http://www.koth.org/corewar-faq.html
  http://homepages.paradise.net.nz/~anton/cw/corewar-faq.html

Web pages are at:
  http://www.koth.org/                       ;KOTH
  http://www.ecst.csuchico.edu/~pizza/koth   ;Pizza
  http://para.inria.fr/~doligez/corewar      ;Planar
  http://www.ociw.edu/~birk/corewar          ;C.Birk

Newbies should check the above pages for the FAQs, language specification,
guides, and tutorials. Post questions to rec.games.corewar. All new players
are infinitely welcome!
_______________________________________________________________________________
Greetings...

Far too much time has passed since the previous issue of Core Warrior, with
the Pizza hills being unavailable for the duration.  However, there is good
news too.  A flurry of work has taken place on Koenigstuhl, which now homes
8 infinite hills. (ICWS, 88, 94, P-Space, Open, Big, Tiny, LP).

As usual a number of top notch warriors have been posted.  Recommended
reading includes the code for Moore's Fire and Ice II, and Janeczek's
Behemot.

-- John Metcalf
_______________________________________________________________________________
Current Status of the Internet Pizza Server ICWS '94 Draft Hill:

 #   %W /  %L /  %T                       Name               Author Score  Age
 1  38.6/ 37.6/ 23.8          Digital Instinct    Christian Schmidt 139.7    3
 2  28.2/ 17.1/ 54.7               Son of Vain      Oversby/Pihlaja 139.3    1
 3  41.7/ 49.6/  8.6                     Razor      Michal Janeczek 133.9   15
 4  26.0/ 18.8/ 55.1                 nPaper II        Paul-V Khuong 133.2   85
 5  27.2/ 23.1/ 49.7                    Olivia             Ben Ford 131.2   17
 6  22.6/ 14.7/ 62.7 Mini Return Of The Jedimp             John K W 130.4   28
 7  34.6/ 39.3/ 26.1                      test             Paulsson 130.0   12
 8  30.6/ 33.0/ 36.4         Enough is enough!         John Metcalf 128.2    8
 9  34.1/ 40.6/ 25.2                  Combatra          David Moore 127.6   40
10  34.6/ 41.8/ 23.5                   Behemot      Michal Janeczek 127.4   14
11  25.9/ 25.2/ 48.9                 Uninvited         John Metcalf 126.7   51
12  22.1/ 18.2/ 59.7                  Cinammon         John Metcalf 126.0   53
13  33.1/ 40.5/ 26.4                 Wizard 13         John Metcalf 125.8   16
14  19.5/ 13.5/ 67.0      The PhantIMP Menance             Ben Ford 125.4   18
15  22.8/ 20.3/ 56.9                  KafuFFLe         John Metcalf 125.2   33
16  22.3/ 19.5/ 58.2               Tie Factory    Christian Schmidt 125.1   54
17  22.3/ 19.9/ 57.8              Revival Fire              P.Kline 124.7    1
18  24.3/ 25.4/ 50.3               Quicksilver      Michal Janeczek 123.3   33
19  26.6/ 30.0/ 43.3                     Vilex         Ken Espiritu 123.2   80
20  19.6/ 16.3/ 64.1    Return of the Fugitive          David Moore 122.9  109
21  29.0/ 35.1/ 35.9               Keyser Soze        Anton Marsden 122.9   13
22  22.0/ 21.2/ 56.8                   LoN GeV     Simon Wainwright 122.8    9
23  21.9/ 22.1/ 56.0               Fifth Third             Ben Ford 121.7   20
24  21.6/ 21.5/ 56.9                      test                  JKW 121.7   26
25  25.6/ 29.6/ 44.9               Velvet Fist     Ayan Chakrabarti 121.6    3

26  23.3/ 26.2/ 50.5                 Brigadeer     M Joonas Pihlaja 120.3   24

Top 25 Averages:
    27.1/ 27.0/ 46.0                                                127.2   29

Age since last issue: 9 ( 26 last issue, 18 the issue before )
Days since last issue: 345 ( 104 last issue, 209 the issue before )
Average age: 29 ( 26 last issue, 34 the issue before )
Average score: ??? ( 136 last issue, 138 the issue before )
Average movement: ??? ( -2.2 last issue, -6.0 the issue before )
Warriors surviving: 18 ( 10 last issue, 14 the issue before )

The top 25 warriors are represented by 14 independent authors, Metcalf with 5,
Ford and Janeczek with 3 each, Moore, Schmidt and Wilkinson each have 2.  The
remaining 8 redcoders have just the one warrior each. ( 13 authors last issue,
9 the issue before )

See below for a message from Pizza regarding the Corewar hills:
_______________________________________________________________________________
  Subject:   A special message from the Pizza Server
  Date:      21.11.01, 21:45

  Hi there! We're writing you because some time in the last couple months
  you wrote us, and we weren't there! The server was broken because the
  sysadmins moved it from an HPUX box to a Sun box and the elves for the
  longest time were not able to log in and rebuild and fix things.

  For you KOTH users, the pizza hill has been moved. Unfortunately for us
  and for you, We don't know where it went. May we suggest checking the
  newsgroup for more info. Naturally we'll be linking to the new page
  once we hear where it's located.

  Thank you for your patience and support!

  Sincerely,
  The Internet Pizza Elves
_______________________________________________________________________________
94 - What's New (Sorted by rank and score)

 #   %W /  %L /  %T                       Name               Author Score  Age
 1  41.4/ 35.7/ 23.0          Digital Instinct    Christian Schmidt 147.1    0
 1  28.1/ 16.9/ 54.9               Son of Vain      Oversby/Pihlaja 139.4    0
 6  32.5/ 32.8/ 34.8         Enough is enough!         John Metcalf 132.2    1
16  24.6/ 21.5/ 53.9                   LoN GeV     Simon Wainwright 127.7    1
17  22.3/ 19.9/ 57.8              Revival Fire              P.Kline 124.7    1
24  21.7/ 20.4/ 57.8 Return of the Stormbringe    Christian Schmidt 123.0    1
24  26.8/ 30.8/ 42.4               Velvet Fist     Ayan Chakrabarti 122.7    1
25  33.4/ 43.2/ 23.4              Light Sprain          Dave Hillis 123.6    1

Players entering hill since last issue: 7 ( 12 last issue, 5 the issue before )
Average rank of new entries: 14 ( 10 last issue, 11 the issue before )

Two strong new entries here from Schmidt and Oversby/Pihlaja.  Welcome to
Ayan, whoose Velvet Fist enters the lower reaches of the hill.
_______________________________________________________________________________
94 - What's No More (Sorted by age)

 #   %W /  %L /  %T                       Name               Author Score  Age
26  29.7/ 41.0/ 29.3                    Ultima    Christian Schmidt 118.4   42
26  36.7/ 51.5/ 11.9              Shapeshifter      Michal Janeczek 121.8   37
26  19.4/ 20.0/ 60.6              The Dark One    Christian Schmidt 118.9   31
26  23.3/ 26.2/ 50.5                 Brigadeer     M Joonas Pihlaja 120.3   24
26  19.9/ 21.0/ 59.1 Return of the Stormbringe    Christian Schmidt 118.8    6
26  28.9/ 38.4/ 32.8                     Carme           Zul Nadzri 119.3    3
26  26.4/ 35.9/ 37.7                   Recount              P.Kline 116.8    3
26  32.8/ 44.0/ 23.2              Light Sprain          Dave Hillis 121.7    2
_______________________________________________________________________________
94 - What's Old

 #   %W /  %L /  %T                       Name               Author Score  Age
20  19.6/ 16.3/ 64.1    Return of the Fugitive          David Moore 122.9  109
 4  26.0/ 18.8/ 55.1                 nPaper II        Paul-V Khuong 133.2   85
19  26.6/ 30.0/ 43.3                     Vilex         Ken Espiritu 123.2   80
16  22.3/ 19.5/ 58.2               Tie Factory    Christian Schmidt 125.1   54
12  22.1/ 18.2/ 59.7                  Cinammon         John Metcalf 126.0   53
11  25.9/ 25.2/ 48.9                 Uninvited         John Metcalf 126.7   51
 9  34.1/ 40.6/ 25.2                  Combatra          David Moore 127.6   40
_______________________________________________________________________________
The Revised Hall of Fame:  * indicates the warrior is still active.

Pos Name                   Author             Age    Strategy
 1  Recycled Bits          David Moore        164    P-warrior
 2  The Stormbringer       Christian Schmidt  142    Q^2 -> Stone/imp
 3  Return of the Fugitive David Moore        109 *  Q^4 -> Paper/imp
 4  Self-Modifying Code    Ben Ford           108    P-warrior
 5  death by redcode       Simon Wainwright    91    Q^2 -> Bomber
 6  nPaper II              Paul-V Khuong       85 *  MiniQ^3 -> Paper
 7  Vilex                  Ken Espiritu        80 *  P-warrior
 8  Stonewashed            Christian Schmidt   78    Q^3 -> Paper/stone
 9  Jade                   Ben Ford            75    Q^4 -> Stone/imp
10  Stranger               John Metcalf        73    Q^3 -> Bomber
11  EvoP 3                 Ken Espiritu        71    Q^3 -> Paper/imp
12  The Fugitive           David Moore         70    MiniQ^2 -> Paper/imp
13  One Step Beyond        John Metcalf        67    MiniQ^3 -> Stone/imp
14  Snowman                John Metcalf        64    P-warrior
15  Draken Fire            Ben Ford            63    Q^3 -> Bomber
16  Trefoil the original   Steve Gunnell       56    P-warrior
17  Tie Factory            Christian Schmidt   54 *  Q^3 -> Paper
 =  Fixed                  Ken Espiritu        54    Qscan -> Paper
19  Cinammon               John Metcalf        53 *  MiniQ^3 -> Paper/imp/wimp
20  Pattel's Virus         Ben Ford            52    P-warrior
 =  Exor                   Ken Espiritu        52    Q^3 -> Paper
21  Uninvited              John Metcalf        51 *  MiniQ^3 -> Stone/imp
 =  The Outsider           Simon Wainwright    51    QScan -> Stone/imp
 =  Galatea                Ben Ford            51    Q^2 -> P-warrior
24  Icen                   Ben Ford            50    Q^3 -> Paper
 =  Silver Talon 1.2       Edgar               50    Scanner
26  No More Innocuous      Leonardo Liporati   49    Q^4 -> Paper
 =  trefoil 23 226         Steve Gunnell       49    P-warrior
 =  Puddleglum             John Metcalf        49    Q^3 -> Paper/stone
29  Circle of Fire         John Metcalf        48    P-warrior
 =  Shadow                 Christian Schmidt   45    Q^2 -> Paper/stone
31  Twin                   Christian Schmidt   44    P-warrior
 =  Origami Harquebus      mjp                 44    P-warrior
33  Stylized Euphoria      Ken Espiritu        43    Q^4 -> Paper/imp
34  Slippery Eels          Ben Ford            42    Q^3 -> Paper
 =  Even Less Innocuous    TeamQ3              42    Q^3 -> Paper
 =  Spooky Wench           John Metcalf        42    Q^3 -> Stone/imp
 =  Ultima                 Christian Schmidt   42    P-warrior
38  myBlur2                Paulsson            41    Scanner
 =  WingShot               Ben Ford            41    Oneshot
40  Combatra               David Moore         40 *  Boot-distance calculator
 =  Digitalis 5            Christian Schmidt   40    Q^3 -> Clear/imp
 =  Alive and K(qu)icking  Leonardo Liporati   40    MiniQ^3 -> Paper
 =  Freight Train v0.2     David Moore         40    '88 Q^2 -> Stone/imp
44  Shapeshifter           Michael Janeczek    37    P-Warrior
45  Vain                   Ian Oversby         36    Q^2 -> Stone/imp
 =  Jaguar                 Christian Schmidt   36    Q^3 -> Stone/imp
47  Wintermute             John Metcalf        35    MiniQ^3 -> Stone/imp
48  Qshot                  Christian Schmidt   34    Q^2 -> Oneshot
49  Quicksilver            Michael Janeczek    33 *  Q^4 -> Stone/imp
 =  KafuFFLe               John Metcalf        33 *  MiniQ^3 -> Paper/stone
 =  SnooPy                 P.Kline             33    P-warrior
 =  chained to the system  Simon Wainwright    33    *Unknown*

Not much change here since last issue.
_______________________________________________________________________________
Current Status of the Internet Pizza Server Beginner Hill:

 #   %W /  %L /  %T                       Name               Author Score  Age
 1  53.6/ 30.2/ 16.2              Light Sprain          Dave Hillis 177.0   40
 2  52.8/ 35.4/ 11.8           Ankle Breaker            Dave Hillis 170.1   41
 3  39.5/ 27.5/ 33.0                      Agni     Ayan Chakrabarti 151.6   20
 4  43.4/ 35.6/ 21.0              Gomjabbar VI         Ingo S Kacza 151.2   43
 5  46.2/ 41.9/ 11.9             Grand Mal 1.1         Ransom Smith 150.5   93
 6  36.4/ 23.6/ 40.0                test RF B1          Gino Oblena 149.1    5
 7  39.6/ 33.0/ 27.4             MorphinMerlin             Jeremy K 146.3   91
 8  35.4/ 25.5/ 39.2                test RF A4          Gino Oblena 145.3    6
 9  39.6/ 40.2/ 20.3              Seek&Destroy     Ayan Chakrabarti 138.9   70
10  26.1/ 16.0/ 58.0            Liquid Crystal         John Morahan 136.1   18
11  29.5/ 23.3/ 47.1           Un___ortant 1.1         Ransom Smith 135.7   13
12  39.5/ 43.4/ 17.1                   8thTest          Gino Oblena 135.7    1
13  38.3/ 44.8/ 16.9                    Zaphod     Ayan Chakrabarti 131.8   31
14  36.9/ 42.2/ 20.9          Advanced Spooner           Josef Jahn 131.6   95
15  38.9/ 47.7/ 13.4    Xord Monominer XOSC:01          Gino Oblena 130.0    2
16  29.1/ 29.1/ 41.8                 Simpleton     Ayan Chakrabarti 129.1   29
17  38.9/ 49.0/ 12.1                     Safai     Ayan Chakrabarti 128.8   19
18  36.7/ 46.2/ 17.1 Even More Advanced (read:           Josef Jahn 127.2   97
19  38.2/ 49.7/ 12.2                  JGFTestQ          Gino Oblena 126.7    4
20  22.0/ 20.4/ 57.6                   Watcher         John Metcalf 123.5   63
21  24.6/ 26.0/ 49.4               Caladan III         Ingo S Kacza 123.1   50
22  33.8/ 46.1/ 20.1                  BhootRaj     Ayan Chakrabarti 121.6   21
23  29.2/ 38.2/ 32.6         Disaster Area 2.0      Stefan Foerster 120.2   44
24  21.9/ 25.6/ 52.5 Hyper Advanced (read: sux           Josef Jahn 118.2   82
25  33.2/ 48.6/ 18.2                 Hot Knife       Wayne Sheppard 117.8   36

26  29.3/ 43.5/ 27.2      Xord Catapult v2.q4f          Gino Oblena 115.1    3

Top 25 Averages:
    36.1/ 35.6/ 28.3                                                136.7   40

For the short length of time Pizza was up, the beginners' hill saw 66
successful challenges.  Six warriors reached retirement age, Mob Boyz,
Pimp King, Heatseeker, Arkenstone, Kenshin d and the boy's a time bomb.
______________________________________________________________________________
Current Status of the KOTH.ORG '94 No Pspace Hill:

 #  %W/ %L/ %T                      Name               Author    Score    Age
 1  38/ 24/ 38               Quicksilver      Michal Janeczek    151.5    589
 2  36/ 22/ 42               Son of Vain      Oversby/Pihlaja    150.4    416
 3  46/ 42/ 12                      G3-b          David Moore    149.3     97
 4  36/ 24/ 40                      Inky          Ian Oversby    148.9    306
 5  45/ 41/ 14             Hazy Lazy ...        Steve Gunnell    148.6    169
 6  43/ 41/ 16                   Behemot      Michal Janeczek    146.1    650
 7  36/ 26/ 38                 Uninvited         John Metcalf    145.3    509
 8  35/ 25/ 40                    Olivia             Ben Ford    144.9    555
 9  33/ 22/ 44                 nPaper II        Paul-V Khuong    144.6    827
10  37/ 31/ 32                   Blacken          Ian Oversby    143.1   1074
11  45/ 47/  8                      test         John Metcalf    143.1      1
12  35/ 27/ 39              Revival Fire              P.Kline    142.6    295
13  40/ 41/ 19            Little Jewel X        Lukasz Grabun    138.4      5
14  41/ 44/ 15             Deep Freeze X        Lukasz Grabun    138.4     16
15  36/ 34/ 30               Keyser Soze        Anton Marsden    138.1    528
16  43/ 50/  7          He Scans Alone x              P.Kline    137.1    155
17  30/ 23/ 47          paper/stone test                simon    136.3    102
18  41/ 46/ 13                 Kenshin D        Steve Gunnell    136.3     31
19  32/ 27/ 41                     Qtest    Christian Schmidt    136.0    349
20  27/ 19/ 54                Mr Sheen B        Steve Gunnell    134.5      8

The hill has aged by 471 and only 7 warriors remain from last issue's hill
status.  Among those which perished are Eraser II (age 781), Jinx (662), Jade
(600), Phantom Menace (465), G2-b (413), Stalker (393), Vain (141),
Brigadeer (127) and Phantasm 50 (119).
_______________________________________________________________________________
The '94 No Pspace Hall of Fame:  * indicates the warrior is still active.

Pos Name                   Author             Age    Strategy
 1  Blacken                Ian Oversby       1074 *  Q^2 -> Stone/imp
 2  nPaper II              Paul-V Khuong      827 *  MiniQ^3 -> Paper
 3  Eraser II              Ken Espiritu       781    Scanner
 4  Jinx                   Christian Schmidt  662    Scanner
 5  Behemot                Michal Janeczek    650 *  MiniQ^3 -> Bomber
 6  Jade                   Ben Ford           600    Q^4 -> Stone/imp
 7  Quicksilver            Michal Janeczek    589 *  Q^4 -> Stone/imp
 8  Olivia                 Ben Ford           555 *  Q^4 -> Stone/imp
 9  Keyser Soze            Anton Marsden      528 *
10  Uninvited              John Metcalf       509 *  MiniQ^3 -> Stone/imp
11  The Phantom Menace     Anton Marsden      465
12  Boys are Back in Town  Philip Kendall     441    Scanner
 =  Zooom...               John Metcalf       441    Scanner
14  Son of Vain            Oversby/Pihlaja    416 *  Qscan -> Stone/imp
15  G2-b                   David Moore        413    Twoshot (?)
16  Stalker                P.Kline            393    Scanner
17  Qtest                  Christian Schmidt  349 *
18  Vain                   Ian Oversby        330    Q^2 -> Stone/imp
19  Omnibus                John Metcalf       327
20  Win!                   David Moore        322    Scanner
21  Inky                   Ian Oversby        306 *
22  Revival Fire           P.Kline            295 *
23  Recovery               Ian Oversby        280    MiniQ^2 -> Paper/stone
24  The Fugitive           David Moore        274    MiniQ^2 -> Paper/imp
25  Jaguar                 Christian Schmidt  269    Q^3 -> Stone/imp

Blacken moves into four figures and is still going strong.  More than half of
the current hill has a place in the Hall of Fame, artificial aging at work?
Can anyone help fill out the missing strategies?
_______________________________________________________________________________
Extra -
Son of Vain by Ian Oversby and Joonas Pihlaja

The original Vain was designed and implemented for the '94 draft hill.
At that time, the hill was very diverse with a good selection of
p-spacers, imp/stones, papers and scanners.  Gigolo had recently left
the hill and p-spacers were in the acendancy - there were around 5 or
6 on the hill most of the time.  My initial write-up of Vain can be found on
google groups at

http://groups.google.com/groups?selm=20010426161203.09498.00001092%40ng-mk1.aol.com

For a stone to do well on the hill it was clear that it should take
some points from other stones and papers in addition to thrashing
p-spacers and scanners.  To trash a p-spacer it was enough to be
resilient enough against any anti-stone component in a paper that
the stone was frequently fighting pure stones / scanners or bombers.

My initial research led me to believe that most of the papers on the
hill were based on either RetinA by Paul Kline or CC-Paper by Franz.
RetinA is a defensive self-fixing paper using some mov instructions
to fix neighbours in case they have been hit by a spl carpet.

Timescaper paper:

s1  spl  @0,  #step1
    mov  }s1, >s1
s2  spl  @0,  #step2
    mov  }s2, >s2
    ; -- bombing
    mov  {s2, <s3
s3  jmp  @0,  #step3

A timescape style paper looks like the following with three copying
modules marked s1, s2 and s3.  CC-Paper replaces the final copying
module with a simple coreclear.

Both RetinA and CC-Paper are quite good against complex bombers and
scanners but weak against imp/stones.  Worse for them, a very
aggressive stone can cripple enough paper modules early in the round
that it is possible for the stone to score a win.  In particular
the original Vain scored very well against Fixed and Vigor, both
RetinA style papers which survived until the hill wipe.

>From the early development stages, Vain performed well against the
imp/stones on the hill.  Paul Kline observed that numbers work
very well against stones in Core Warrior 32:

  "A single stand-still program is at a disadvantage against an
  opponent running at multiple locations.  Kill one part and
  the others run faster."

Additionally, the stones of that time did not generally throw real dat
bombs and d-clear was very resilient vs increments, decrements or dat
0,0.

Vain performed somewhat less well against scanners than most stones
because of his size.  Indeed, I imagined his presence should attract
all manners of scanners, one-shots and vampires.  However the score
was not as poor as I imagined.  I can think of a number of reasons
why this might be the case.  Perhaps most importantly, stunning the
clear does not make much difference for several cycles - the stone
might still land the fatal bomb.  Another significant factor seemed
to be the step-size.  As most scanners are at least 8 instructions,
a coarse step was fine against them.  One-shots have not done well
on the '94 hill in the past few years as everybody submitted
several versions of their warrior with slightly different boot
distances until they slaughtered any poor one-shot tenuously clinging
to its position.

Vain entered the hill in a similar position to Newt and they scored
similarly until Core Warrior 67 when Newt dropped several places
and Vain rose a little.  It seems that Newt is a stronger warrior
according to the relative positions on the Koenigstuhl so the
reason for this performance on the '94 hill is unclear to me.  If
anyone has any ideas I would be very interested to hear them.

** -- Joonas' Bit -- **

The overall strategy of Son of Vain (SoV) is the same as in Vain -- a
stone to keep the scanners away, a d-clear to give an edge over other
stone/imps, and imps to protect against paper.  The intention was to
beef up Vain so that it could stand against modern warriors, perhaps
tacking on a newer quickscan and sliming the boot a bit.  Somehow,
SoV's evolution turned into the search for the holy grail of Core War:
The ultimate warrior with no weaknesses.  Obviously we never found it,
but sure had an interesting time looking.

* Vain, ancestors
-----------------

Redundancy is a factor in almost every warrior from papers and
imp/stones to intricate multiple component warriors.  This is seen
especially in the warriors that influenced Vain's development:

Nimbus 1.2 by Alex MacAuley

- Huge imp spiral + parallel delayed dat wipe.  The idea was to use
   the imp as an offence to disrupt the opponent and leave the clear
   to mop up the cripples.

Smooth Noodle Map by Matt Hastings

- A small, fast and disruptive bomber followed by paper and/or dat
   clear + bombing. (_The Core War Newsletter_, Fall 1992 and Winter
   1993 issues.)

Vagabond by Paul Kline

- Stone -> Anti-imp paper.  Paul's debriefing gives valuable insight
   into creating a successful warrior -- be resilient and be prepared.
   (_Push Off_, October 25, 1993)

Impfinity by Planar

- A stone/stone/imp/imp.  Philosophically the most influential
   warrior in Vain's development.  Carefully calibrated twin stones
   and imp launchers for redundancy, with the stones mutating into
   clears during end game.  (Also, the stones split fast enough to
   shrug off a scanner's stun attack for a while.)

And finally, not directly attributed, but sharing similar features:

PacMan v3 and v6 by David Moore

- A parallel stone and delayed clear.  The stone is particularly
   disruptive, with the clear killing it after a suitable number of
   cycles.

The common features in all these warriors are asymmetry and redundancy
-- they handle multiple types of opponents by having a primary attack
coupled with a secondary component that takes over if the first is
wounded or killed.

* From Vain to Son
------------------

Now for some spade work.  The first thing to do was to probe Vain for
its weaknesses.  Here are some results (quickscans were turned off in
Vain and the opponents):

                enemy   Vain    ties                    enemy   Vain    ties
* Clears/One shots                      * Scanners
One Shot        52      24      24      Boys Are Back in 51      25      24
Frontwards      42      30      28      myBlur 2         49      31      20
ostest2         41      25      34      Blur 2           46      40      14
goonie          25      29      26      Ice (from Fire&) 42      45      13
                                        HSA              40      55      5

* Paper/Stone                           * Paper
Recovery        23      11      66      nPaper II        48      4       48
Shadow          1       8       91      Recovery Pulp    21      9       70
Puddleglum      0       10      90      Sad              16      13      71
                                        unrequited love  10      3       87
                                        No More Innoc    0       4       96
                                        Fixed            1       34      65
* Stone/Imps
Nine Seven Six  21      15      64      Baseline Deluxe  2       11      87
Newt            16      2       82      Jade             2       14      84
IcePick         4       21      75      Jaguar           1       9       90
The Stormbring  3       8       89      Wintermute       0       10      90


Vain has trouble with one-shots and clears, which we found out was due
to the component boot distances.  The active components were booted
after the warrior body, quite close to each other, and a one-shot
would quite often miss the decoys and stun the whole warrior.  Also,
many of the newer scanners give Vain grief again due to its component
boot distances and largish components.

Most papers (omitted) scored like No More Innocuous, virtually all
ties.  However, as the results show, anti-imp paper are a real threat
against Vain.  This is also true for the son.

Results against stone/imps are encouraging -- Vain has the lead.
Newer stone/imps like Jaguar or The Stormbringer aren't all that
vulnerable.  (Note that SoV development started in December 1999, so
the warriors we tested against are from that time.)

The goal then, was to beef up Vain against one-shots and clears while
at least retaining performance again stone/imps.  Note that P-spacers
weren't targetted specifically as SoV was to go on -94nop.  [Vain
however was written for the -94 hill.]


* The stone
-----------

The Rosebud stone in Vain is five lines long, throws bombs at .33c,
and uses a djn-stream.  It doesn't include its own bomb, so it moves
bits of core (usually dat 0,0) around hoping to hit the opponent.
Newer scanners (The Machine or myBlur 2, for instance) are optimised
against this type of bomb so that they fall into their second phase,
usually a clear, when the scanning loop is hit by a dat 0,0.  Some
spl/dat wipes such as the wipe from Recycled Bits or The Core Clear
are also optimised against dat 0,0 throwing stones.

After a few iterations of redesigning Rosebud, we decided that keeping
that design wasn't good for us.  What we really wanted was to thwart
anti-dat clears and scanners with real dat bombs, just like Carbonite
and most other stone/imps.  The stone should bomb for a long time
preferably hitting every core location, so that if an opponent stone
cripples the clear, the stone would at least have a chance of killing
the opponent.  It should end in a dat wipe for good measure to cover
any spots the bombing missed, and it should have a minimal footprint.

An original design goal was also to make the stone's long bombing run
be able to sometimes defeat paper, like Rosebud.  This never worked
out as our other constraints restrict the maximum length of the
bombing run to about 8000 bombs and 8000 decrements.  We just couldn't
get a long enough bombing time and still have a good bomb spread.
Another conflicting constraint is that we wanted to make the stone
component brittle.

At this point our design looks pretty normal, like Carbonite:

stone:  spl   #0,       0
        mov   bmb,      1-TIME*step
        add   #step,    -1
        djn.f -2,       <1234

        ... dat 0,0 ...

bmb:    dat   >-1,>1

They say that necessity is the mother of invention, but in this case
it turned out to be Paul Kline and John Metcalf.  In issue #65 Kline
published a method for creating a small 3-line stone that bombs almost
all of core by modifying its step size during the battle.  Why hadn't
this technique been used in a stone/imp before?  Well, those stones
look more or less like this:

        mov     }1-N*2, 1-step
tgt:    sub.x   #step,  -1
        jmp     -2,     }-2

The way this one works is best seen through the debugger.  In short,
it starts an a-field increment stream at tgt-N*2 that will hit every
second cell and finally the 'tgt' line, mutating the '#step' field
after N bombs. This happens in subsequent passes, every 4000 bombs.
The initial step needs to be chosen so that no bombs hit the stone
while it is running.  The increment stream and step have to be
carefully calibrated, and the easiest way to do this is to use only
one process in the loop.

We need to have a multi-process stone as the clear and imp launcher
are started in parallel with it.  The obvious modification to Kline's
stone is to add an spl at the front, but this doesn't work as
expected.  The timing is all wrong, and the jmp line can't be
converted into something useful such as djn.  The number of processes
fed to the stone would need to be very carefully calibrated, but we
never went with this further.  We need a different mechanism to mutate
bits of the stone.

Scouring various stones we found the crucial idea in John Metcalf's
Puddleglum.  Its stone (Spooky Wench?) looks like this:

     sStep equ 3039
     sTime equ 3357

sGo:    spl   #0,       0
        spl   #0,       0         ; aggressive stone (Spooky Wench?!)
sLp:    mov   sBmb,     @sP
sSel:   add   #sStep,   sP
sP:     djn.f sLp,      {sSel-sStep*sTime
sBmb:   dat   2,        >1

Look at it in cdb.  Note that the bomb pointer is actually the djn.f
line's b-field!  When the djn executes, the mov line has just put an
sBmb right where the djn's b-field points, so the bomb pattern ends up
being:

        dat      1,     >1      ; a-field of sBmb is decr. by djn's {
        dat      -1,    -1      ; decremented.

        ...

        dat     1,      >1
        dat     -1,     1

        ...

Instead of having a '2' in the bomb's a-field, we could have any
offset, making this similar to the Torch bombing engine (with
decrements as the second bomb at .33c and .33c bombing totalling to
.66c), rather than a .33c bomber with a two-line payload like
Puddleglum.  Puddleglum's stone is probably the first to use this
technique.

By carefully programming the step size and decrement offset we can
make the decrement land anywhere we want, and we want it to land on
the '#sStep' field.  But only the a-field should be mutated, so we
changed the djn to an a-field decrement.  In any case, while not as
disruptive as .f decrements, we feel that a-decrements are the next
best thing.  [While it is certainly possible to a-decrement protect
scanner or stone loops, most aren't.  Also, against typical paper
modules a-decrements are doing more damage than other forms.  See the
article on Newt v0.2 in issue 69.

This is what the stone looks like:

; step: first step size before mutation.
; hop:  offset of decrement from bomb.
; time: number of bombs before first mutation of step size.
; label tgt: target of first mutation (see below).

stone:  spl     #0,     0
        mov     bmb,    @2
tgt:    add     #step,  1
        djn.a   -2,     {(tgt-hop)-(step*time)

        ... dat 0,0 ...

bmb:    dat     1+hop,  >1

The resilience to process timing changes in Puddleglum's form is
paramount -- the decrements are always in sync with the bombs.  It
doesn't really matter how many processes are fed into the stone, or
whether any fall off the djn.a line, as those events don't change the
bomb pointer.

The >1 b-field in the bomb was chosen because eventually we want the
bomb to hit the add line of the stone, mutating it into a forward
clear like in Carbonite.

Note that in addition to mutating the stone's step, we can also mutate
the decrement line's 'hop' to change the stone's pattern.  This won't
affect where the bombs land though, so can only be used to realign the
decrements so as to finally hit the add line.  We can also mutate the
mov line's a-field to change the bomb pointer, but in this case we
must make sure that the line 'bmb-1' has been bombed before.  This has
the potential to mutate the 'hop' again to a previous value (or
another value), as the bomb at 'bmb' may have been mutated earlier.
Another technique for realigning the bombs is to bomb the djn line,
changing the bomb pointer to 1.  This technique is used in the bomber
from Recycled Bits to prolong the bombing time.  It slows our bomber
to .25c though, so should be done only late in the battle.

OK, it all works out in theory.  How do we find good constants to make
the stone work in practice?  Our approach was to program a custom
simulator that runs the stone and records where the bombs and
decrements land.  Then weed out those constants that either hit the
stone body too soon, or have bad bomb spread.  A big speedup came from
the fact that bombs and decrements are thrown linearly, which lets us
skip over the majority of cycles where we can prove that nothing
interesting happens, and lets us concentrate on the the cycles where a
bomb or decrement lands on prespecified cells.  A further time savings
is that in some versions of the program we actually run the simulation
backwards in time -- this lets us efficiently force the constraint
that we want the last bomb to land on the add line (mutating the stone
into a forward clear).

In our tests it was beneficial to make the stone weaker than the form
given above.  It should be made a brittle as possible so that if
anything touches it, such as an opponent stone bomb, it should
preferably self-destruct and let the processes in the clear take over.
The final form is:

        spl     0,      0
stone   spl     0,      0
        mov     bmb,    @2
        add     #step,  @-1
        djn.a   @-1,    *st+(tgt-hop)-(step*time)

        ... dat 0,0 ..

bmb     dat     >hop,   >1

The { in the djn.a line was changed to * so that the stone wouldn't
start an a-decrement wipe when damaged, possibly hurting our clear
component.  We couldn't come up with something that would reliably
self-destruct in case the stone itself was wiped by an opponent's
djn.f stream -- this version usually only stops producing more
processes.  Our best hope is for our clear to put the crippled stone
out of its misery before long.

One idea to make the stone even more brittle is to use spl }0, {0
instructions instead of spl 0,0 instructions, as in some versions of
Carbonite.  Unfortunately this doesn't work as expected -- a bomb
eventually hits the spl at stone-1, which has live processes.  When
they execute the bomb instruction they increment the b-field of stone,
and the stone ends up looking like this:

        dat     >hop,   >1
stone   spl     }1,     {1              ; when executed, decrement mov line
        mov     TRASH,  @2
        add     #step,  @-1
        djn.a   @-1,    *st+(tgt-hop)-(step*time)

        ... dat 0,0 ..

bmb     dat     >hop,   >1

Granted, when stone-1 line is hit the number of processes live at the
stone line is known, so the mutation caused by the spl }1,{1 line at
stone could be compensated for at least for a while.  [Compensated by
having bmb-1, bmb-2,... bombed before a process mutates the mov line.]
It's just too much trouble for the effort.


* Clear
-------

The d-clear form is from Digitalis 2:

dgate   dat     0,      1234
dmop    dat     0,      dclr+5-dgate

        ... dat 0,0 ...

dclr    spl     #0,     0
        mov     dmop,   >dgate
        djn.f   -1,     >dgate

This has the advantage of having a small footprint as the bomb line
(dmop) is moved away from the clear body.  In our tests we found that
this form has problems when fighting other stone/imps.  Namely if the
clear is decremented it would start hogging processes and not clear
with a good bomb any more.  Hogging processes when the clear is
decremented is good, because in that case we are probably fighting
another stone/imp and want the clear to take over.  But the processes
end up being scheduled so that the clear moves in spasms, which isn't
so good after all.

Another problem with the clear above is that while the stone is alive
it doesn't gather many processes.  This hurts us when the stone is
crippled but not dead since the clear doesn't have enough steam to
wipe over it.  We decided to add another spl to the clear and
decrement protect it.  This form of clear should survive a single a-
b- or f- decrement stream, and also any random a-decrements from
stones (like Newt or Impfinity v4g1, for example).

dgate   dat     0,      1234
        dat.a   <2667,  dclr+7-dgate
        dat.a   <2667,  dclr+7-dgate

        ... dat 0,0 ...

dclr    spl     #0,     0
        spl     #0,     {dgate
        mov     dgate+2,>dgate
        djn.f   -1,     >dgate

As now both the stone and the clear have two spls at the top, the role
of process scheduling during booting is highlighted.


* Imps, launchers, and the quickscan
------------------------------------

Yer basic 3-point imps.  Fairly early on we decided on the
Vortex/EvolImp launcher for its small size/efficiency ratio.  B-field
imps seem more resilient, but on the hill nPaper II beats us up
anyway.  Which is strange.  But then most anti-imp papers can and do
serious damage to SoV.

The imp instruction is 'mov.i #10,2667', with the idea that if the imp
hits a clear that uses the a-field as its clear pointer, then the
clear would overwrite itself if it is placed 10 cells of further from
the gate.  The #10 was probably better than #1 in tests for some
particular clear...

As for the quickscan, David Moore had published his faster version in
Return of the Fugitive so we chose that.  It is a nuisance to work
with as it is sensitive to the locations of the decode tables, but we
never got around to reprogramming it to be more flexible.  Instead we
created a database of suitable parameters and chose among them during
optimisation.

The maximum separation between scanned locations is limited by a pair
of scanning instructions in that code, which dictates that the one of
the decoding tables and the attack routine must be spaced as far apart
as possible in the code.  We implemented approximate decoding to help
bring the separation limit higher, but there wasn't any noticeable
effect.  Unfortunately we didn't figure the real problem out until
later.


* The Boot
----------

The most trouble we had was putting the components together so that we
wouldn't be clobbered by an opposing qscan attack.  The problem is
that without the quickscan we have a minimum of 14 non-empty cells,
not counting the quickscan, its attack, or any of the boot.  Compare
this with your typical paper which has maybe 11-14 cells sans
quickscan+attack, including boot.

                                non-empty cells
  launcher              1 + 3 | 4
  stone body + bomb     4 + 1 | 5
  clear body + bomb     4 + 1 | 5       = 14 non-empty cells

The form of the quickscan requires that one of the decoding tables and
the quickscan attack be at opposite ends of the warrior.  The
quickscan attack is 7 lines, and the decoding table is 3 cells, so
it's not possible to put the imp-launcher at the top of the warrior,
like some other stone/imps (Vain, Newt v0.2).  This means we need to
boot the imp launcher, since we can't afford to leave it unbooted with
live processes *behind* either the decode table or qscan attack, which
a one-shot is sure to find (and then to stun anything behind it).  For
the same reason we didn't start the imp-trail inside the warrior, but
wanted to boot the imp instruction as well.

Even Blur-like scanners are a threat to processes that are directly
behind some big decoy at the start of the battle -- the scanner finds
the decoy and may not find anything else in the time it takes to stun
the processes that are behind it.

We also need to boot some auxiliary data that the stone and clear
need.
                                non-empty cells
  boot clear bomb+data  2 + 1 | 3
  boot stone bomb+misc  1 + 1 | 2       = 19 non-empty cells


Considering the amount of stuff we need to boot, an unrolled 1c boot
is out of the question (it would take an additional 11 cells + some).
In any case, the boot needs to send four parallel processes to the imp
launcher, and we might as well use those four processes to boot most
of the continuous data.  A part of the boot looks like this:

        spl     1
        spl     1
        mov     <clr_src, <clr_dst      ; boot clear body.
        mov     <sto_src, <sto_dst      ; boot most of stone body.
        mov     <imp_src, <imp_dst      ; boot imp launcher.
        spl     @sto_dst                ; start stone.
        jmp     @imp_dst                ; start launcher.

By now it's obvious that SoV is positively obese!  During booting the
main threat is an opponent quickscan attack. It is usually a fast loop
that bombs every 6-12 cells, so adding the rest of the necessary boot
code to the above would make it near certain that SoV's boot would be
wounded.  Instead we opted for a secondary piece of boot code that
runs in parallel with the primary boot above.  It boots all the
miscellaneous bits and pieces, and starts the clear.  This technique
is used in Freight Train v0.2.

An additional optimisation is that the secondary boot starts an
unbooted d-clear if the primary boot failed.  This costs us an extra
line in the secondary boot.  There's almost no penalty against
non-quickscanning warriors, and the extra redundancy helps against
other stone/imps.  Against papers and stone/papers there is a slight
loss, but on the balance it does help.

Considering the boot distances of the components, the clear and imp
launcher are booted quite close in front of the main warrior body,
with the stone further on in core.  There's not much in decoy being
placed above the clear and imp launcher so one-shots tend to trip up
on the dead quickscan code.  The imps are launched late enough in the
battle that they don't create significant visible matter for one-shots
or once-through scans until the stone has had time to rev up some
processes.


* Optimising
------------

Having a clearly outlined strategy and killer components is wonderful,
but they won't be worth much unless properly optimised.  One problem
we had was that the constants for individual components, boot
distances, and process scheduling interact with each other in often
strange and mysterious ways.

We ended up with a system of virtual KotH, where we generate candidate
warriors more or less at random, and scoring them against a set of
benchmark warriors.  The warriors that stay on the hill the longest
with a high score should be the most resilient against the benchmark.
There are a myriad of details that are more relevant to warrior
optimisation in general than Son of Vain per se, so we won't delve on
them.  Many kudos to Ken Espiritu and Robert Macrae for sharing their
thoughts on benchmarking, optimisation, and general helpfulness.
Especially with the myriad of details.


* Weaknesses
------------

At the time SoV entered -94nop it had an 8 point lead on the rest of
the hill, which we quite fancied.  Even though that couldn't last
forever, it is still holding up reasonably on the hill.  As with Vain,
anti-imp replicators can hurt SoV quite badly.  The best at this are
the Pulp derived papers and Planar's paper from Bipolar.  Combined
with a stone, anti-imp paper really hurts.  eg. Recovery and Inky.

Newer anti-dat scanners with airbags give SoV a hard time too.
myBlur2 by Paulsson and Moore was specifically optimised against, but
that was the only such scanner available at the time.


;redcode-94nop
;name Son of Vain
;author Oversby/Pihlaja
;assert 1
load0 z for 0
        rof

ofs equ (-2)                            ; offset boot distances by this much.

; stone constants
step    equ     6457                    ; primary step
hop     equ     3643                    ; decr. ofs from bomb
dbofs   equ     9                       ; bomb distance from stone
tgt     equ     2                       ; first mutation target
time    equ     2293                    ; bombs before first mutation
sdist   equ     (2599+ofs)              ; boot distance

; clear constants
dgate   equ     (dclr-9)
dwipeofs equ    (-947)                  ; offset of clear trail from stone
ddist   equ     (7328+ofs)              ; boot distance
dmopa   equ     <2667                   ; mop a-field

; spin constants
ldist   equ     (7426+ofs)              ; boot distance
ldecoy  equ     (5956+ofs)              ; decoy distance
idist   equ     (7471+ofs)              ; imp trail dist.

; qscan constants

a1      equ     3922                    ; factors and scan offsets
a2      equ     1999
b1      equ     609
b2      equ     6686
b3      equ     4763
c2      equ     2149
d       equ     5014

; qbomb constants

qrep    equ     13                      ; repeats of bomb loop
qinc1   equ     7                       ; attack step
qhop    equ     60                      ; offset of bomb


;;-- primary boot
;;

boot    spl     misc    ,       >b1     ; start secondary boot
t2      spl     1       ,       >b2     ; t2 = qscan decode table
        spl     1       ,       >b3
        mov     <dsrc   ,       <ddst
        mov     <ssrc   ,       {sdst
        mov     <lsrc   ,       {ldst
sdst ddst spl   load0+sdist+4,  load0+ddist+4
ldst    jmp     load0+ldist+4,  <chk_flag

        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
;;-- imp launcher
;;
lsrc
spin    spl     #1      ,       4       ; the a-field is checked by misc boot.
        add.a   #2667   ,       1
        djn.f   spin+idist-ldist-1-2667,<spin-ldist+ldecoy
        dat     0       ,       0

        dat     0,0
        dat     0,0
t3      dat.a   qhop    ,       c2      ; t3 = qscan decode table
        dat     0,0                     ;      & attack bomb.
        dat     0,0
        dat     0,0
        dat     0,0

;;-- clear
;;

imp     mov.i   #10     ,       2667
db      dat.a   >hop    ,       >1      ; dat bomb for stone
dmop    dat.a   dmopa   ,       dclr+8-dgate ; dat bomb for clear
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
dsrc
dclr    spl     #0      ,       4
        spl     #0      ,       {dgate
        mov     dgate+2 ,       >dgate
        djn.f   -1      ,       >dgate

        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
;;-- qscan body
;;
qscan   seq     qb + d  ,       qb + d + b2
        jmp     q1

        sne     qb + d * a1,    qb + d * a1 + b2
        seq     <t1-1   ,       qb + d * (a1-1) + b2    ; t1-1 + a1-1
        djn.a   q0      ,       {q0                     ; == qb+d*(a1-1)

        sne     qb + d * a2,    qb + d * a2 + b2
        seq     <t1     ,       qb + d * (a2-1) + b2    ; t1 + a2-1
        jmp     q0      ,       {q0                     ; == qb+d*(a2-1)

        sne     qb + d * b1,    qb + d * b1 + b1
        seq     <t2-1   ,       qb + d * (b1-1) + (b1-1); t2-1 + b1-1
        jmp     q0      ,       {q2                     ; == qb+d*(b1-1)

        sne     qb + d * b3,    qb + d * b3 + b3
        seq     <t2+1   ,       qb + d * (b3-1) + (b3-1); t2+1 + b3-1
        jmp     q0      ,       }q2                     ; == qb+d*(b3-1)

        seq     qb + d * (b1-2),qb + d * (b1-2) + (b1-2); must follow the
        djn     q0      ,       {q2                     ; <t2-1 scan

        sne     qb + d * c2,    qb + d * c2 + b2
        seq     <t3     ,       qb + d * (c2-1) + b2    ; t3 + c2-1
        jmp     q0      ,       }q0                     ; == qb+d*(c2-1)

        sne     qb + d * b2,    qb + d * b2 + b2
        seq     <t2     ,       qb + d * (b2-1) + (b2-1); t2 + b2-1
                                                        ; == qb+d*(b2-1)
        jmp     q0      ,       >a1                     ; q0-1 and boot-1
t1      jmp     boot    ,       >a2                     ; must be dat 0,0's.

;;-- stone
;;
spl0
ssrc    ;spl    0       ,       0
st      spl     0       ,       4
        mov     -1+dbofs,       @2
        add     #step   ,       @-1
        djn.a   @-1     ,       *st+(tgt-hop)-(step*time)

        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0
        dat     0,0

;;-- misc. boot
;;
        ; bmbdist: address of stone bomb.
        ; gatedist: address of clear gate.
        ; wipedist: address of clear wipe start.
bmbdist equ     (sdist+dbofs)
gatedist equ    (ddist+dgate-dclr)
wipedist equ    (sdist+dwipeofs-ddist+dclr-dgate)

misc    mov     imp     ,       load0+idist
        mov     db      ,       load0+bmbdist
pmop    mov     dmop    ,       load0+gatedist+2
        mov     spl0    ,       {sdst
        mov     dmop    ,       <pmop
        mov.x   #wipedist,      <pmop
        spl     @ddst                   ; start clear.
chk_flag djn.a  dclr+1  ,       *ldst+4
        dat     0,0

;;-- qbomb
;;
;       dat     0,0                     ; dat be here.
q0      mul.b   *2      ,       qb
q1      sne     {t1     ,       @qb
q2      add.b   t2      ,       qb
        mov     t3      ,       @qb
qb      mov     t3      ,       *d
        sub     #qinc1  ,       qb
        djn     -3      ,       #qrep
        jmp     boot

        end     qscan

* Scores
--------

Here are the results against our test suite.  Wins and score are counted for
SoV.

Opponent                %W    %L    %T       Score

SnooPap               15.0  27.6  57.4       102.4   ; SnooPy Paper
nPaperII               9.0  14.1  76.9       103.9
RotF                   8.7  11.3  80.0       106.1
KafuFFLe              16.7  11.6  71.7       121.8
RotJ                  16.2   8.9  74.9       123.5
SafetyInNumbers       18.7  10.7  70.6       126.7
Recovery              25.5  22.4  52.1       128.6
Jaguar                22.0   9.9  68.1       134.1
Quicksilver           24.2  13.8  62.0       134.6
Wintermute            25.4  11.7  62.9       139.1
myBlur2               35.7  32.3  32.0       139.1
ostest2               35.6  29.6  34.8       141.6
Shadow                26.2  10.8  63.0       141.6
TheMachine            33.7  25.3  41.0       142.1
DigitalDragon         32.5  22.2  45.3       142.8
Puddleglum            29.0  14.6  56.4       143.4
CoreClear             33.5  22.5  44.0       144.5
Jade                  26.6   7.7  65.7       145.5
OneShot               41.7  31.1  27.2       152.3
BoysAreBackInTow      41.0  29.6  29.4       152.4
Newtv0.2              33.8  13.8  52.4       153.8
Vain                  34.1  14.3  51.6       153.9
TheStormbringer       32.8  10.6  56.6       155.0
SnooScan              43.8  29.8  26.4       157.8   ; SnooPy scanner
BaselinePlus          36.2  13.2  50.6       159.2
Goonie                47.1  28.7  24.2       165.5
frontrds              40.9  15.9  43.2       165.9
Fixed                 41.3  16.3  42.4       166.3
Stalker               47.4  27.0  25.6       167.8
rbwipe                51.9  29.6  18.5       174.2   ; Recycled Bits wipe
SilverTalon1.2        50.8  20.6  28.6       181.0
Zooom                 55.0  18.5  26.5       191.5
Phantasm50            59.3  21.2  19.5       197.4
HSA                   65.1  26.7   8.2       203.5
_______________________________________________________________________________
Extra Extra - Mischief by John Metcalf

Mischief is a scanner created to illustrate the neglected .75c scan loop.
3 locations are scanned in a 4 instruction loop.  One interesting point to
note is how the scan handles a find at *sPtr.

Anything uncovered by the scan is attacked with a spl carpet, similarly to
scanners such as He Scans Alone.

For the endgame, Mischief plays a dat clear.  Newbies and beginners might
find their scanners / bombers gaining a few precious points by replacing
their d-clear with a similar dat clear.  Can you explain why?

Here's the code:

;redcode-94nop
;name Mischief
;author John Metcalf
;strategy .75c scan -> clear
;assert CORESIZE==8000

        st equ 13
        fi equ 1961
        sWipe equ (sPtr-1)
        gate  equ (attack-2)

sPtr    dat    fi+st,  fi

        for 5
        dat 0,0
        rof

attack  mov    sPtr,   sWipe
wipe    mov    sBmb,   <sWipe
        mov    >sWipe, >sWipe   ; carpet
        jmn.f  wipe,   >sWipe

reset   mov.ba @a,     @a       ; reset

loop    sub    a,      @a
        sne.x  *sPtr,  @sPtr    ; scan
a       sub.x  #-2*st, sPtr
        jmz.f  loop,   @sPtr

        slt    sPtr,   #dBmb+3-sPtr
        jmp    attack
        djn    reset,  #16

sBmb    spl    #0,     {0
clear   mov    dBmb,   >gate
        djn.f  clear,  {gate

dBmb    dat    >1,     2-gate

        end    loop+1
_______________________________________________________________________________
Extra Extra Extra - Oneshot '88 by John Metcalf

As indicated by the unimaginative name, Oneshot '88 is a typical example
of a oneshot, this time implemented for the ICWS '88 standard hill.  Which
other strategies are still waiting for an effective implementation in '88?

;redcode
;name Oneshot '88
;author John Metcalf
;strategy .66c scan -> .66c clear
;assert CORESIZE==8000

st equ  -11 ;  -13 ;  -12 ;  -10 ;  -14
fi equ -110 ; -106 ; -100 ; -108 ; -114

;     141.6  144.0  145.7  141.3  145.9 : David Moore's '88 Benchmark

;     143.7  141.1  137.7  139.2  135.4 : Warriors from KOTH (published)

kill    dat <2667,    <kill-sptr

clear   spl 0,        <kill-sptr-8
cloop   mov @sloop,   <sptr
        mov @sloop,   <sptr
bomb    djn cloop,    <kill-5

steps   dat <st*2,    <st*2

sloop   add steps,    @cloop
sptr    cmp fi+st,    fi
        jmp <sloop
        jmp sloop

        end sptr
_______________________________________________________________________________
Questions?  Concerns?  Comments?  Complaints?  Mail them to people who care.
Beppe Bezzi <giuseppe.bezzi@galactica.it>, Philip Kendall <pak21@cam.ac.uk>,
Anton Marsden <anton@paradise.net.nz>, John Metcalf <grumpy3039@hotmail.com>
and Christian Schmidt <schmidt@mail.uni-mainz.de>
2002-2005 corewar.info. Logo C. Schmidt