Imp

De FdIwiki ELP
Saltar a: navegación, buscar
Imp
caption
Información general
Imp Guerrero más simple

Los Imp se entregan en cuerpo y alma al objetivo de supervivencia. Su comportamiento consiste en copiarse a la instrucción siguiente continuamente garantizando así su supervivencia hasta encontrar una sentencia DAT. Si no se evita, un Imp puede llegar a llenar todo el Core transformando a los otros guerreros en Imp a su vez. Sin embargo, presenta el problema de que le es imposible ganar una batalla consiguiendo únicamente un empate como su resultado óptimo.


Código de ejemplo: Imp

MOV 0, 1

Debilidades

Al ser tan simple, hay counters muy específicos para el mismo. La más eficaz contra los mismos es la Imp Gate, pero las básicas son inútiles contra otros tipos de guerreros.

jmp 0, <-2 (Imp Gate)


Algunos guerreros optan por mantener alarmas que les avisen de modificaciones realizadas por otros guerreros. Esto les permite prepararse contra imps y al mismo tiempo poder responder a guerreros de otra naturaleza con pautas similares. Este es el caso del dwarfscout.

redcode
name DwarfScout
version 2
author Marcus
date 2004-Feb-05
strategy waits for dwarfy attack and dodges while dwarfing


ORG EntryPoint


FSIZE EQU 9 ; field size FDIST EQU 473 ; field distance

DSTEP EQU 5 ; dwarf step size


fUptr DAT #0, #0 ;watch Pointer to Up-field dUptr DAT #0, #0 ;watch dwarf Up pointer rlSptr DAT #0, #0 ;watch pointers for relocation rlTptr DAT #0, #0 ;watch

EntryPoint MOV.I dwarfLoop, dwarfKillSave

FIRST ; relocate begins with the following instruction initFgenerate MOV.AB #-1*FDIST, fUptr MOV.AB #FDIST, fDptr

generateFloop MOV.I FCODEu, <fUptr MOV.I FCODEd, >fDptr CMP.AB #FDIST+FSIZE, fDptr JMP generateFloop

SPL dwarfInit

restartVerify MOV.AB #-1*FDIST, fUptr MOV.AB #FDIST, fDptr verifyFloop CMP.I FCODEu, <fUptr JMP alertUfield CMP.I FCODEd, >fDptr JMP alertDfield CMP.AB #FDIST+FSIZE, fDptr JMP verifyFloop JMP restartVerify

dwarfKillSave DAT.I #0 dwarfInit MOV.I dwarfKillSave, dwarfLoop MOV.AB #-MINDISTANCE, dUptr MOV.AB #MINDISTANCE, dDptr dwarfLoop MOV.I BOMBu, @dUptr MOV.I BOMBd, @dDptr SUB.AB #DSTEP, dUptr ADD.AB #DSTEP, dDptr JMP dwarfLoop

alertUfield MOV.A #-FDIST-MINDISTANCE, rlDelta JMP relocate

alertDfield MOV.A #FDIST+MINDISTANCE, rlDelta

relocate MOV BOMBd, dwarfLoop  ; save CPU time MOV.AB #1+LAST-rlSptr, rlSptr ; initialize pointers MOV.AB #2+LAST-FIRST, rlTptr ADD.AB rlDelta, rlTptr ; add distance param relocLoop MOV.I <rlSptr, <rlTptr CMP.B rlSptr, #FIRST-rlSptr JMP relocLoop JMP @rlTptr

BOMBu FCODEu DAT.X <667, $766 ;watch recognition code Up-field LAST ; relocate area ends with next instruction BOMBd FCODEd DAT.X <776, $677 ;watch recognition code Down-field

rlDelta DAT #0 ;watch relocation distance dDptr DAT #0, #0 ;watch dwarf Down pointer fDptr DAT #0, #0 ;watch pointer to Down-field

END