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
Last revisionBoth sides next revision
crpl:docs:setdigitalis [2014/10/01 15:02] – external edit 127.0.0.1crpl:docs:setdigitalis [2016/07/25 09:28] – fixed first example to reflect zero quirk, reorganized examples planetfall
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 10: Line 9:
 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, and 0 means no Digitalis.
 +
 +=== 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.txt · Last modified: 2018/07/09 07:56 by GoodMorning