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 37                                                         July 8, 1996
______________________________________________________________________________
Core Warrior is a weekly newsletter promoting the game of corewar.  Emphasis
is placed on the most active hills--currently the '94 draft hill and the
beginner hill.  Coverage will follow where ever the action is.  If you have
no clue what I'm talking about then check out these five-star internet locals
for more information:

FAQs are available by anonymous FTP from rtfm.mit.edu as
pub/usenet/news.answers/games/corewar-faq.Z
FTP site is: ftp.csua.berkeley.edu /pub/corewar
Web pages are at:
http://www.stormking.com/~koth                  ;Stormking
http://www.ecst.csuchico.edu/~pizza/koth        ;Pizza
http://pauillac.inria.fr/~doligez/corewar/      ;Planar

Newbies should check the stormking page for the FAQ, language specification,
guides, and tutorials.  Post questions to rec.games.corewar.  All new players
are infinitely welcome!

If ftp.csua.berkeley.edu is unreachable, you can download pMARS at:
Terry's web page--http://www.infi.net/~wtnewton/corewar/
Planar ftp site--ftp://ftp.inria.fr/INRIA/Projects/para/doligez/cw/pmars
Fechter ftp site--ftp://members.aol.com/ofechner/corewar
______________________________________________________________________________
Greetings.

Some interesting activity on the hill this week including the fall of
Thermite II and Stepping Stone. In this issue we find out why Q^2 Miro is
doing so well and JKW discusses mirrored imps.

This is the first Core Warrior issue I've compiled and there's bound to be a
few mistakes somewhere so not too many flames please :-)

Reminder: the 'limited process hill' is open.  Send your warriors to
<koth@wastedyouth.us.itd.umich.edu> with a ;redcode-94lp header.  To get
more information, send an e-mail with a subject line of 'help' (no quotation)
marks to the above address.

--Anton Marsden
______________________________________________________________________________
Current Status of the Internet Pizza Server ICWS '94 Draft Hill:

Hill Specs:
   coresize: 8000
  max. processes: 8000
   duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
 minimum distance: 100
   rounds fought: 200
  instruction set: ICWS '94 Draft

 #   %W /  %L /  %T                       Name               Author Score  Age
 1  48.1/ 38.3/ 13.6                    Blur 2        Anton Marsden 157.9   33
 2  49.0/ 42.2/  8.8                  Q^2 Miro         Anders Ivner 155.8   31
 3  45.4/ 37.8/ 16.8                 myVamp5.3             Paulsson 152.9  102
 4  42.6/ 35.3/ 22.0                 Yogi Bear              P.Kline 149.9  150
 5  29.6/ 10.2/ 60.2      Return Of The Jedimp             John K W 148.9   22
 6  41.7/ 34.5/ 23.8 Paper, Scissors and Stone        David van Dam 148.9   74
 7  44.4/ 40.3/ 15.3                 Goldfinch              P.Kline 148.4   95
 8  37.0/ 26.7/ 36.2               Simple v0.4          Ian Oversby 147.3   42
 9  35.9/ 24.9/ 39.2                 Armory II             John K W 146.8   85
10  42.0/ 38.7/ 19.2                   Twister          Beppe Bezzi 145.3  400
11  40.5/ 35.9/ 23.6                   Goliath        David van Dam 145.1   94
12  35.4/ 26.5/ 38.1                 Pulp v0.2          Ian Oversby 144.2   41
13  40.2/ 36.6/ 23.2                T.N.T. pro    Maurizio Vittuari 143.8  664
14  34.1/ 25.4/ 40.5        Jack in the box II          Beppe Bezzi 142.8  303
15  34.2/ 27.5/ 38.2            the historian        bjoern guenzel 140.9  419
16  43.5/ 46.8/  9.7                  test me2          Beppe Bezzi 140.2   26
17  42.4/ 44.7/ 12.9                    test A              P.Kline 140.0    2
18  29.0/ 18.5/ 52.5                   Rosebud                Beppe 139.6  619
19  38.1/ 37.2/ 24.7                Scimitar 2              P.Kline 139.0   12
20  31.2/ 24.9/ 43.8               blue candle       bjoern guenzel 137.6  533
21  25.3/ 13.6/ 61.1                    ompega       Steven Morrell 136.9   61
22  35.3/ 37.0/ 27.7           Versatility 1.5   Ross Morgan-Linial 133.6   19
23  33.6/ 33.6/ 32.8               Simple v0.3          Ian Oversby 133.5  105
24  37.0/ 48.2/ 14.8            pavement v0.14       bjoern guenzel 125.9    5
25  11.6/ 43.3/ 45.2                Jam Sponge          Dave Newton  79.8    1

Weekly age: 90 ( 56 last week, 108 the week before )
New warriors:  14  Turnover/age rate 16%
Average age:   158 ( 275 last week, 296 the week before )
Average score: 141 ( 133 last week, 127 the week before )
The top 25 warriors are represented by 13 authors: Bezzi, Kline with 4,
Guenzel, Oversby with 3, and van Dam, JKW with 2.

King Report:  Blur 2 was on top for the majority of the challenges this week.
But towards the end of the week Q^2 Miro by Ivner started to dominate. This
is not surprising - Ivner has developed a very good qscan (see Extra Extra
for the details). JKW's new warrior Return Of The Jedimp also had a few
moments of glory (as John hastened to mention in the newsgroup).

A huge loss of age this week (approximately 2925 points)! Thermite II finally
kicks the bucket (will we see a Thermite III soon?), as does Stepping Stone
making T.N.T pro the oldest warrior on the Hill.
______________________________________________________________________________
94 - What's New

 #   %W /  %L /  %T                       Name               Author Score  Age
13  25.8/ 22.2/ 52.0                 Armory II             John K W 129.3    1
 4  36.5/ 36.0/ 27.5 Paper, Scissors and Stone        David van Dam 136.9    1
18  21.4/ 13.3/ 65.2                    ompega       Steven Morrell 129.6    1
 7  30.0/ 24.1/ 45.9               Simple v0.4          Ian Oversby 135.8    1
 6  31.6/ 25.3/ 43.1                 Pulp v0.2          Ian Oversby 137.9    1
 1  42.9/ 39.5/ 17.6                    Blur 2        Anton Marsden 146.2    1
 1  44.6/ 44.5/ 10.9                  Q^2 Miro         Anders Ivner 144.7    1
20  39.5/ 49.6/ 10.9                  test me2          Beppe Bezzi 129.4    1
 1  25.2/  9.5/ 65.2      Return Of The Jedimp             John K W 141.0    1
24  30.2/ 38.9/ 30.9           Versatility 1.5   Ross Morgan-Linial 121.4    1
15  34.9/ 37.8/ 27.3                Scimitar 2              P.Kline 132.0    1
24  34.1/ 50.9/ 15.0            pavement v0.14       bjoern guenzel 117.3    1
14  42.6/ 45.6/ 11.8                    test A              P.Kline 139.7    1
25   8.8/ 44.2/ 47.0                Jam Sponge          Dave Newton  73.5    1

6 of the 14 new warriors entered the Hill in the top 10.
______________________________________________________________________________
94 - What's No More

 #   %W /  %L /  %T                       Name               Author Score  Age
26   1.0/  1.2/  1.6                 Armory II             John K W   4.7   55
26  18.5/ 12.4/ 69.1                    ompega       Steven Morrell 124.6  225
26   0.0/  0.1/  3.8                      test    Maurizio Vittuari   3.8   33
26  36.1/ 47.5/ 16.4             HopScotch 1.6        Robert Macrae 124.7  363
26  35.7/ 47.0/ 17.2            Stepping Stone          Kurt Franke 124.4 1049
26   1.3/  1.4/  1.1                 Pulp v0.2          Ian Oversby   5.1   19
26  29.7/ 35.6/ 34.7               Jo Clark II          Ian Oversby 123.8  266
26  28.9/ 35.1/ 36.0                      test             Maurizio 122.7  307
26   1.6/  1.6/  0.7                    Blur 2        Anton Marsden   5.4   30
26   3.2/  4.2/  0.3                  Q^2 Miro         Anders Ivner   9.9   24
26  16.2/  8.7/ 75.1             The Avalanche       John Wilkinson 123.8  142
26  32.7/ 41.5/ 25.8               Thermite II        Robert Macrae 123.8 2262
26   0.8/  0.5/  6.5      Return Of The Jedimp             John K W   8.7   15
26   1.2/  1.3/  1.3                 Hint Test        Anton Marsden   4.8   14
26   2.0/  1.2/  0.7                 Torch t18              P.Kline   6.7   30
26   2.6/  0.5/  0.8          blue flame c1/10       bjoern guenzel   8.5   48

Thermite II and Stepping Stone Cease To Exist as do a few warriors over the
age of 200. Lots of ;killing went on this week.
______________________________________________________________________________
94 - What's Old

 #   %W /  %L /  %T                       Name               Author Score  Age
13  40.2/ 36.6/ 23.2                T.N.T. pro    Maurizio Vittuari 143.8  664
18  29.0/ 18.5/ 52.5                   Rosebud                Beppe 139.6  619
20  31.2/ 24.9/ 43.8               blue candle       bjoern guenzel 137.6  533
15  34.2/ 27.5/ 38.2            the historian        bjoern guenzel 140.9  419
10  42.0/ 38.7/ 19.2                   Twister          Beppe Bezzi 145.3  400
14  34.1/ 25.4/ 40.5        Jack in the box II          Beppe Bezzi 142.8  303

Jack in the box II pops into the 300 club.
______________________________________________________________________________
HALL OF FAME
* means the warrior is still active.

Pos    Name                  Author          Age     Strategy
 1  Thermite II            Robert Macrae     2262    Qscan -> bomber
 2  Impfinity v4g1         Planar            1993    Stone/ imp
 3  Jack in the box        Beppe Bezzi       1620    P-warrior
 4  Tornado 3.0            Beppe Bezzi       1567    Bomber
 5  Torch t18              P.Kline           1539    Bomber
 6  Chameleon              Myer R Bremer     1437    P-warrior
 7  Frontwards v2          Steven Morrell    1420    One shot scanner
 8  Evol Cap 6.6           John Wilkinson    1299    Imp / stone
 9  quiz                   Schitzo           1262    Scanner/ bomber
10  T.N.T.                 Maurizio Vittuari 1204    Bomber
11  Grilled Octopus v0.5   David Boeren      1154    P-warrior
12  Hazy Shade II          John Wilkinson    1102    P-warrior
13  Stepping Stone         Kurt Franke       1049    Qscan -> Vampire
14  Iron Gate 1.5          Wayne Sheppard     926    CMP scanner
15  Agony II               Stefan Strack      912    CMP scanner
16  Barrage                Anton Marsden      876    Qscan -> replicator
17  Blue Funk              Steven Morrell     869    Stone/ imp
18  Flurry                 Anton Marsden      835    Qscan -> pwarrior
19  Thermite 1.0           Robert Macrae      802    Qscan -> bomber
20  Blue Funk 3            Steven Morrell     766    Stone/ imp
21  Night Train            Karl Lewin         755    Replicator
22  Mirage 1.5             Anton Marsden      736    Scanner/ bomber
23  Blizzard               Anton Marsden      713    Qscan -> replicator
24  HeremScimitar          A.Ivner,P.Kline    666    Bomber
25  T.N.T. pro             Maurizio Vittuari  664 *  Bomber

LaBomba by Beppe Bezzi was kicked off this week by T.N.T. pro, now the only
active warrior in the HoF (with Rosebud not far behind). Thermite II has a
comfortable hold on 1st place even if it has stopped growing older and
Stepping Stone settles for 13th place.
______________________________________________________________________________
Current Status of the Internet Pizza Server Beginner's Hill:

Hill Specs:
   coresize: 8000
  max. processes: 8000
   duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
 minimum distance: 100
    maximum age: At age 100, warriors are retired.
   rounds fought: 200
  instruction set: ICWS '94 Draft

 #   %W /  %L /  %T                       Name               Author Score  Age
 1  50.3/ 28.8/ 20.9           Versatility 1.2   Ross Morgan-Linial 171.7   85
 2  51.8/ 31.9/ 16.4                Syzygy 1.0       Philip Kendall 171.6   70
 3  51.3/ 32.5/ 16.2                    Yet 3c           Justin Kao 170.2   66
 4  48.3/ 33.0/ 18.7             Phoenix Alpha       Andy Nevermind 163.6   71
 5  48.9/ 35.7/ 15.4            Saboteur v0.4k                 shar 162.2   27
 6  45.3/ 34.0/ 20.7             Sandwich Bags       Andy Nevermind 156.6   59
 7  42.0/ 30.9/ 27.0               Inferno 1.0       Philip Kendall 153.1    9
 8  44.2/ 39.8/ 16.0                    Yet 3a           Justin Kao 148.6   67
 9  42.4/ 39.3/ 18.3               3-clear 0.6       Ilmari Karonen 145.5   93
10  40.2/ 35.8/ 24.0                 Antivenin                 Ross 144.7   58
11  38.1/ 32.0/ 29.9                  (-:  :-)                 Ross 144.3   19
12  31.5/ 21.5/ 47.0    Ties, Ties, Ties! (+2)                 Ross 141.5   21
13  41.2/ 41.8/ 17.0                 hyper 1.0                 Ross 140.6   90
14  37.9/ 36.4/ 25.7                      test           Justin Kao 139.4   82
15  39.8/ 44.9/ 15.3        Switch Hitter 0.3t   Ross Morgan-Linial 134.8   97
16  20.2/  7.8/ 72.0            Nematode v1.3e       Jonathan Stott 132.8   26
17  27.7/ 27.9/ 44.4             Cannon Fodder           I. Karonen 127.5   72
18  18.6/ 10.3/ 71.1            Nematode v1.3c       Jonathan Stott 126.8   52
19  22.7/ 21.2/ 56.1                 Wasps 1.3                 Ross 124.1   20
20  25.4/ 26.8/ 47.8                 Avenger I       Oliver Fechner 124.0   89
21  30.2/ 38.2/ 31.6             Utility Knife     Robert J. Street 122.2   29
22  24.6/ 33.1/ 42.4                 Fork 4/13    Christoph C. Birk 116.0   13
23  19.4/ 25.2/ 55.4                Mama's Boy     Robert J. Street 113.6   12
24  10.5/ 64.2/ 25.4                    D-Scan                 Ross  56.8    1
25   3.8/  0.0/  0.0 Yet Another stupid pun...           Justin Kao  11.5    4

Versatility is still on top. The top three warriors appear to be in a class
of their own.

I noticed there are quite a few pspacers on the Hill at the moment. I believe
that the best way to learn to code well is to concentrate on one type of
warrior and see how much you can improve it... you may not make it to the top
of the Hill but you will certainly come to understand the game a bit better.
You don't have to take my advice :-)
______________________________________________________________________________
The Hint
Quick Scanners
by Anton Marsden

Quick scanners (qscanners) have become a common ingredient in many modern
warriors (mainly bombers and papers) recently. However, the qscans used are
all very similar in structure and performance. In this article I will be
discussing a "new" method of attack for qscans. If you are unfamiliar with
the classic qscans check out Core Warrior #7 for a good tutorial (by Robert
Macrae). It may also be helpful to take a look at Thermite II (CW 24) or
Twister (CW 35).

In a standard qscan about 16 locations are scanned (in 8 cycles) and then a
JMN check is made to see if anything was found:

s3 for 4
  sne.i   qst+4*bigst*(s3+0), qst+4*bigst*(s3+0)+bigst*1
  seq.i   qst+4*bigst*(s3+0)+bigst*2, qst+4*bigst*(s3+0)+bigst*3
  mov.ab  #qst+4*bigst*(s3+0)-found, found
    rof
  jmn.b   which,  found

The code required for this setup is very small and this is probably the
reason it became a very popular qscan method. But it's inefficient because
of the huge delay between finding a location and bombing the location. This
means that booting warriors are likely to escape the bombs as are most
pspacers.

To remedy this, I started experimenting with this type of scan:

  seq.i   qst+4*bigst, qst+4*bigst+bigst*1
  jmp     kill1
  seq.i   qst+4*bigst+bigst*2, qst+4*bigst+bigst*3
  jmp     kill2

kill1:
  ; find correct location
  ; bomb it
  ; jump to boot routine
kill2: ; similar to kill1

It works, but requires a large amount of code for every scanned location.
There are many possible variations on this "engine". The trick is to find a
nice compromise between size and speed. Here is one of the better qscans
I have written:

offset EQU (start+1000)
COUNT EQU 6

start:
N FOR COUNT
scan&N:
    seq.i  offset+400*N,offset+400*N+100
    jmp    kill&N+1
    seq.i  offset+400*N+200,offset+400*N+300
    jmp    kill&N

ROF
    jmp    boot

GAP EQU 15
REP EQU 6

datb:   dat  GAP,-GAP
dat200: dat  200,200
dat100: dat  100,100


N FOR COUNT
kill&N: add.f  dat200,pos&N
      sne.i  datz,*pos&N
      add.f  dat100,pos&N
hit&N:  mov.i  datb,*pos&N
pos&N:  mov.i  offset+400*N,offset+400*N+GAP/2
      add.f  datb,pos&N
      djn.b  hit&N,#REP
      jmp    boot
ROF

Anders Ivner has also contributed to this issue with his qscan (Q^2) which
has a slightly slower response time than mine but uses a _lot_ less
instructions.

Testing QScan Performance
-------------------------

QScans can be hard to test well so here are some tips on how to test your
own qscans:

- Replace all warrior code with NOP instructions and a JMP to the first NOP
instruction. This technique can be adapted to work with fragmented (non-
sequential) code as well (using JMPs). This way all your booted code will be
executed and you'll die if you warrior was hit by a DAT bomb (this is a Good
Thing for testing purposes).

- pmars -r 8000 -c 100 (8000 rounds, 100 cycles maximum)
This will give you a good idea of how your qscan will perform. Note that
booting warriors will be the toughest to kill followed by pspacers then
qscanners.

- Without actually testing your qscan you can describe its performance by
noting the cycle numbers at which it will actually attack a scanned location.
For example, a standard qscan similar to the one in Twister will roughly
attack in the 14th cycle (for any of 12 locations) and then in the 23rd cycle
and so forth. The qscan in this article will attack in these cycles:
4,5,6,6,7,7,...,14,14,15,15,16,17. Most opponents are very vulnerable in the
early cycles of the battle so attacking as early as possible has its
advantages.

I submitted a warrior to the '94 Hill called Hint Test which was Twister
(Tornado) with the qscan replaced by an earlier, slower version of the qscan
above. Here are some of the results:

Hint Test vs. Twister:     111/68/21
Hint Test vs. Thermite II: 103/59/38

 #   %W /  %L /  %T                       Name               Author Score  Age
...
 7  37.1/ 38.1/ 24.8                 Hint Test        Anton Marsden 136.2    1
...
23  34.8/ 42.7/ 22.6                   Twister          Beppe Bezzi 126.8  373

As you can see, qscan response can have a major effect on your score.
______________________________________________________________________________
Extra Extra
Q^2
by Anders Ivner

[Editor note: Anders wrote a good intro and I decided not to edit it even
though it repeats some of what is said in the hint.]

In a standard quickscan there is a delay between when something (presumably
the enemy) is found and when the quickscan actually reacts.  To shorten this
time tests are generally inserted (say) every fifth qscan block.

Q^2 instead uses the inc/decrementing abilities of the JMP instruction to
react immediately when something is found. This allows it to attack the enemy
on average five cycles earlier than a standard qscan, time that may be
important to catch it in its booting phase.

An example to illustrate what I mean:

  sne
  seq
  jmp   attack,  attack
  sne
  seq
  jmp   attack,  {attack
  sne
  seq
  jmp   attack,  }attack
  sne
  seq
  jmp   attack,  >attack
  sne
  seq
  jmp   attack,  <attack
  sne
  seq
  djn.f attack,  attack

With four different inc/decrement modes and djn.f there is a total of six
different ways for the jump to tell the attacking code where something was
found.

Next, let's look at how this information is decoded. Two entries from a table
containing the qscan step (in various multiplicities) are added to calculate
the correct position:

    dat   1*QS, 4*QS+QBASE-found
tab   dat   0*QS, 0*QS+QBASE-found
    dat   2*QS, 3*QS+QBASE-found

attack   add.ab   tab,  tab
found    mov.b    @attack, #0

That's about it. A further half a cycle (on average) can be optimized away,
but this makes the code harder to follow, and is left as an exercise. :-)
[Editor note: I can do better! This is also left as an exercise. :-)]

Finally, here's some code to show you what this might look like.

/Anders
(The pmars preprocessor certainly is awesome!)

;redcode-94
;name Q^2
;author Anders Ivner
;strategy Qscan with shorter reaction time.
;assert (CORESIZE == 8000)

QBASE equ   (tab+100)
QS1   equ   (100)
QS2   equ   (3*QS1)
QS3   equ   (6*QS2)

QP01  equ   (0*QS2)
QP02  equ   (1*QS2)
QP03  equ   (2*QS2)
QP04  equ   (3*QS2)
QP05  equ   (4*QS2)
QP06  equ   (5*QS2)

HOP01 equ   jmp
SIG01 equ   a01
HOP02 equ   jmp
SIG02 equ   {a01
HOP03 equ   jmp
SIG03 equ   }a01
HOP04 equ   jmp
SIG04 equ   >a01
HOP05 equ   jmp
SIG05 equ   <a01
HOP06 equ   djn.f
SIG06 equ   a01

  org   qq

qq
j  for   3
i  for   6
  sne   QBASE+QP&i+0*QS3+(j-1)*QS1,   QBASE+QP&i+1*QS3+(j-1)*QS1
  seq   QBASE+QP&i+2*QS3+(j-1)*QS1,   QBASE+QP&i+3*QS3+(j-1)*QS1
  HOP&i a&j,  SIG&i
  rof
  rof
  jmp   boot     ;nothing found

  dat   1*QS2,   4*QS2+QBASE-found
tab   dat   0*QS2,   0*QS2+QBASE-found
  dat   2*QS2,   3*QS2+QBASE-found

a03   add   #QS1, @a01
a02   add   #QS1, @a01
a01   add.ab   tab,  tab
found mov.b @a01, #0
  add.ba   found,   test1
test1 sne   QS3+found,@found
  add   #QS3*2,  found
  sne   -100, @found
  add   #QS3, found

  end
______________________________________________________________________________
Extra Extra Extra
Mirrored Imps
by John K. Wilkinson

Justin Kao didn't realize just what he was getting in to when he asked me
what a mirrored imp was... ;->

Okay, here's a good place to start, the mirror imp launch from Two Pack. I'll
try to explain the idea a little more.  First, note the initial weakness
inherent to the mirror imp.  The line "mov imp, imp2" is necessary because a
mirrored imp spiral requires TWO imp instructions intact in the core in order
for it to survive.

-------------
imp_sz  equ     4001
imp2    equ     imp+4000

start mov     imp,    imp2
      spl     1
      spl     1
      spl     1
      spl     1
      spl     2
      jmp     @vector,{0
      jmp     *vector,{0

for 15
      jmp     imp2+imp_sz*vector,  imp+imp_sz*vector
rof
vector  jmp     imp2,           imp
imp     mov.i   #11, imp_sz
-------------

This is a two-point mirrored imp.  If you run it, you'll see that there are
two lines of executing processes 4000 spaces apart.

Since 4001 is NOT an imp number, the executing imp process is not always
updated immediately before it's own execution.  This makes mirror imps more
vulnerable to traditional attack.

Ok, lets look at an example.  Say that we're watching a 2-process, 2-point
mirrored imp spiral.  Two Pack simply launches a 32 process, 2point imp, but
we'll deal with a 2-process one for simplicity.

[100]  mov.i   #11, 4001
[4100] mov.i   #11, 4001
[101]  mov.i   #11, 4001
[4101] mov.i   #11, 4001
[102]  mov.i   #11, 4001
[4102] mov.i   #11, 4001

Here are the executing processes, with the locations they execute in
brackets.  You'll note that while all the intructions on the "top" half of
the mirror are executed immediately after being updated, those on the bottom
half (4100, 4101, 4102) are updated three steps before they are executed.
Hence, the weakness to traditional attack.

However, it does have one clear advantage.  When you go up against a warrior
which uses a 'spiral clear' like that used in SETI or Memories, a two-point
imp will not be cleared away with the assurance that a 3 or 7 point imp would
be.  Also, any warrior which attempts to "decode" the impstep, and use that
to wipe imps away will get the number 4001, which will only wipe away half of
the imp.

Next advantage?  Let's imagine a warrior has a 100% ">" gate at 4101...

[100]  mov.i   #11, 4001
[4100] mov.i   #11, 4001
[101]  mov.i   #11, 4001
[4101] mov.i   #11, 4004    ;got inc'd 3 times, totally screwing us up
[102]  dat     0,   0       ;lost half the imp! :_(
[4102] mov.i   #11, 4001    ;But hark!  THIS location already had an imp
                    on it, because the imp was unaffected at the
                    time the process at 101 was executed.
Therefore, if we're lucky enough to have 4103 be an exectuable instruction,
we have busted the gate, and saved our ass from a sure loss.  After that, we
can only pray that whatever part of our opponent's code we're executing
doesn't go suicide on us. :-)

The second problem is an inherent consequence of the first difficulty.  That
is, when you only have two imp points, and two of them need to be intact in
order to survive, a single stun attack AUTOMATICALLY will be at least
somewhat effective.

The solution to these two problems?  Well, Paul Kline came up with the idea
for the 6-point mirrored imp.  In fact, any imp_number+4000 will work as a
mirrored imp step size.  In addition to the most important advantage of not
putting all your eggs(imps:) in two baskets, the 6-point imp gives a second
advantage to the mirroring idea: increased resistance to gates.

Here's a code snipet from the six-point imp warrior I was working on.
It's jmp/add launched, which helps a great deal against certain scanners
and bombers.

-------------
imp_sz  equ     (2667+4000)
imp     equ     (impin+2000)
imp2    equ     (imp+4000)

start   mov     impin,  imp
      mov     imp,    imp2
      spl     1
      spl     1
      spl     1
      spl     adder-1
      spl     2
      jmp     *vector, 0
      jmp     @vector, 0
      jmp     1
adder   add.f   inc,    vector
inc     dat     imp_sz, imp_sz
vector  jmp     imp2,   imp
impin   mov.i   #11, imp_sz
-------------

Now, I'll leave it up to you to see why it is that the greater-than-
two-point variety of mirrored spiral performs a little better against gates.
However, I must confess that mirrored imps' ability to perform in battle
alone doesn't justify my interest in them.  Mirrored imps only have
_significant_ advantages against scanners with a spiral clears and warriors
with those special mirror-vulnerable gates, so use them with care. ;-)
______________________________________________________________________________
Questions?  Concerns?  Comments?  Complaints?  Mail them to people who care.
authors: Beppe Bezzi <bezzi@nemo.it> or Myer Bremer <bremermr@ecn.purdue.edu>
or Anton Marsden <amarsden@comp.vuw.ac.nz>
© 2002-2005 corewar.info. Logo © C. Schmidt