User Tools

Site Tools


crpl:docs:setdigitalis

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
crpl:docs:setdigitalis [2014/10/01 15:02] – external edit 127.0.0.1crpl:docs:setdigitalis [2018/07/09 07:56] (current) – Clarified zero quirk and correct method. GoodMorning
Line 1: Line 1:
-~~DISCUSSION~~ 
 <- [[crpl:crplreference| CRPL reference]] <- [[crpl:crplreference#digitalis_Commands|Digitalis Commands]] <- [[crpl:crplreference| CRPL reference]] <- [[crpl:crplreference#digitalis_Commands|Digitalis Commands]]
 =====  SetDigitalis  ===== =====  SetDigitalis  =====
Line 9: Line 8:
 === Description === === Description ===
 Sets Amt of Digitalis at coordinates.  Sets Amt of Digitalis at coordinates. 
-An Amt of 1 means full health Digitalis, and 0 means no Digitalis.+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 === === 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>   * **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 CurrentY 2 add CurrentY 1 sub do
-   CurrentX 2 add CurrentX 1 sub do +  CurrentX 2 add CurrentX 1 sub do 
-      I J true SetDigitalisGrowth +    I J true SetDigitalisGrowth 
-      I J 1 SetDigitalis +    I J 1 SetDigitalis 
-   Loop+  Loop
 Loop Loop
  
-</code> \\  +</code>
- +
-  * Next example+
crpl/docs/setdigitalis.1412190170.txt.gz · Last modified: 2015/03/27 02:34 (external edit)