<- [[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