From: M Joonas Pihlaja Newsgroups: rec.games.corewar Subject: Core Warrior 80 Date: Wed, 6 Feb 2002 21:31:53 +0200 Organization: University of Helsinki Lines: 1236 Message-ID: NNTP-Posting-Host: vesuri.helsinki.fi Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Trace: oravannahka.helsinki.fi 1013023915 9641 128.214.205.10 (6 Feb 2002 19:31:55 GMT) X-Complaints-To: usenet@news.helsinki.fi NNTP-Posting-Date: 6 Feb 2002 19:31:55 GMT .xX$$x. .x$$$$$$$x. d$$$$$$$$$$$ ,$$$$$$$P' `P' , . $$$$$$P' ' .d b $$$$$P b ,$$x ,$$x ,$$x ,$$b $$. Y$$$$' `$. $$$$$$. $$$$$$ $$P~d$. d$$$b d d$$$ `$$$$ ,$$ $$$$$$$b $$$P `$ $$$b.$$b `Y$$$d$d$$$' . . a . a a .aa . a `$$$ ,$$$,$$' `$$$ $$$' ' $$P$XX$' `$$$$$$$$$ .dP' `$'$ `$'$ , $''$ `$'$ `Y$b ,d$$$P `$b,d$P' `$$. `$$. , `$$P $$$' Y $. $ $ $ Y..P $ `$$$$$$$' $$$P' `$$b `$$$P `P `$' `Y'k. $. $. $. $$' $. 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, 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 b1 ; start secondary boot t2 spl 1 , >b2 ; t2 = qscan decode table spl 1 , >b3 mov 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 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 , 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, >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, , Philip Kendall , Anton Marsden , John Metcalf and Christian Schmidt