- [[crpl:crplreference| CRPL reference]] <- [[crpl:crplreference#digitalis_Commands|Digitalis Commands]]
===== SetDigitalis =====
^Arguments^Result^Notation^
|X, Y, Amt| |''x1 y1 f1 -- ''|
=== Description ===
Sets Amt of Digitalis at coordinates.
An Amt of 1 means full health Digitalis, -1 means killed or not-yet-grown, and 0 means no Digitalis will grow until further modification.
=== Zero quirk ===
FIXME This is based on experiment and observation, not source knowledge.
Using this command to set the Digitalis level to zero results in never-regrowing Digitalis, even if there is Digitalis "growth" (pathway) present. Setting to -1 causes (seemingly) normal behaviour. Pressing "Delete Digitalis" in the editor returns cells to normal.
=== Examples ===
^Weapon^Radius^Amount^
|Blaster|1|.52|
|Mortar|3|.52|
|Strafer|2|.35|
|Bertha|10|.7|
* ** Emulating the in game weapons **\\ %% %% \\ //
Note: blasters will not injure digitalis that is uphill ever. //\\ %% %%\\
#This function takes four arguments, a centre, then a range, then an amount.
:damageDigitalis
#Load up the arguments.
->amount ->r ->y0 ->x0
#Optimization: precalculate r^2.
<-r dup mul ->r2
#Consider a radius shaped box about the origin.
<-r 1 add 0 <-r sub do
<-r 1 add 0 <-r sub do
#Cull squares in the box not in the circle.
I dup mul j dup mul add <-r2 lte if
#Translate to our site of action.
I <-x0 add J <-y0 add dup2
#Make sure to not inadvertently set digitalis to 0, making it never regrow
GetDigitalis ->DigiPresent
<-DigiPresent <-amount gt if
<-DigiPresent <-amount sub SetDigitalis
else
<-DigiPresent -1 SetDigitalis
endif
endif
Loop
Loop
* **Lay down Digitalis on 3x3 grid under a unit**\\ %% %% \\ //The reason for the 2 is that the limit is one more than the loop iterates through. So, "3 0 do loop" goes through the values 0,1,2... but not three. Using these limits will make your walker lay down a 3x3 grid of Digitalis. //\\ %% %%\\
CurrentY 2 add CurrentY 1 sub do
CurrentX 2 add CurrentX 1 sub do
I J true SetDigitalisGrowth
I J 1 SetDigitalis
Loop
Loop