User Tools

Site Tools


crpl:docs:setdigitalis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
crpl:docs:setdigitalis [2013/01/14 14:03] – created chanicrpl:docs:setdigitalis [2018/07/09 07:56] (current) – Clarified zero quirk and correct method. GoodMorning
Line 1: Line 1:
-TODO+<- [[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. //\\ %% %%\\ <code> 
 +#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 
 +</code> 
 + 
 +  * **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. //\\ %% %%\\ <code> 
 +CurrentY 2 add CurrentY 1 sub do 
 +  CurrentX 2 add CurrentX 1 sub do 
 +    I J true SetDigitalisGrowth 
 +    I J 1 SetDigitalis 
 +  Loop 
 +Loop 
 + 
 +</code>
crpl/docs/setdigitalis.1358190180.txt.gz · Last modified: 2014/10/01 15:02 (external edit)