<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Scripting API</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>Recent changes to Scripting API</description><atom:link href="https://sourceforge.net/p/stipple-effect/wiki/Scripting%20API/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 13 Aug 2024 17:33:51 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/stipple-effect/wiki/Scripting%20API/feed" rel="self" type="application/rss+xml"/><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v28
+++ v29
@@ -1,7 +1,4 @@
 [`&amp;lt; back to Scripting overview`](Scripting)
-
-
-**Note: The API is undergoing an extensive redesign and the documentation is currently in flux. Please do not rely on the documentation for scripting until this note is removed.**

 This is the scripting API (application programming interface) for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:51 -0000</pubDate><guid>https://sourceforge.net266d95b2796ed365e8fa2cb8e4b1bd68c95bb2fc</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v27
+++ v28
@@ -7,8 +7,8 @@

 ### Content
 * [Types](API-%E2%80%93-Types)
-* [Global namespace](Global-namespace)
-* [`color` extension](API-%E2%80%93-Color-functions)
+* [Global namespace](API-%E2%80%93-Global-namespace)
+* [`color` extension](API-%E2%80%93-color-extension)
 &lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:51 -0000</pubDate><guid>https://sourceforge.netb3681a9da78e22135d71af95cc2515c7b81995f6</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v26
+++ v27
@@ -1,17 +1,22 @@
-[`&amp;lt; back`](Scripting)
+[`&amp;lt; back to Scripting overview`](Scripting)
+
+
+**Note: The API is undergoing an extensive redesign and the documentation is currently in flux. Please do not rely on the documentation for scripting until this note is removed.**

 This is the scripting API (application programming interface) for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.

 ### Content
 * [Types](API-%E2%80%93-Types)
+* [Global namespace](Global-namespace)
+* [`color` extension](API-%E2%80%93-Color-functions)
+

 ### Changelog
-
 See changes made to the API across releases [here](API-%E2%80%93-Changelog).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:51 -0000</pubDate><guid>https://sourceforge.net01e93134ecd0f48b41673563a54c5331316eb8a9</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v25
+++ v26
@@ -1,3 +1,5 @@
+[`&amp;lt; back`](Scripting)
+
 This is the scripting API (application programming interface) for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.

 ### Content
@@ -13,6 +15,3 @@
 ### Changelog

 See changes made to the API across releases [here](API-%E2%80%93-Changelog).
-
-### More
-* [API examples](https://github.com/jbunke/se-script-examples)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:50 -0000</pubDate><guid>https://sourceforge.neta9dac85272f1d29ee90104f93c0d7623abe240cb</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v24
+++ v25
@@ -1,18 +1,18 @@
-This is the scripting API for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.
+This is the scripting API (application programming interface) for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.

 ### Content
-* [Types](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Types)
+* [Types](API-%E2%80%93-Types)
 * Functions
-  * [Project functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Project-functions)
-  * [Layer functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Layer-functions)
-  * [Frame functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Frame-functions)
-  * [Tool functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Tool-functions)
-  * [Color functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Color-functions)
-  * [Selection functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Selection-functions)
+  * [Project functions](API-%E2%80%93-Project-functions)
+  * [Layer functions](API-%E2%80%93-Layer-functions)
+  * [Frame functions](API-%E2%80%93-Frame-functions)
+  * [Tool functions](API-%E2%80%93-Tool-functions)
+  * [Color functions](API-%E2%80%93-Color-functions)
+  * [Selection functions](API-%E2%80%93-Selection-functions)

 ### Changelog

-See changes made to the API across releases [here](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Changelog).
+See changes made to the API across releases [here](API-%E2%80%93-Changelog).

 ### More
 * [API examples](https://github.com/jbunke/se-script-examples)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.netb7a3dcfb95f0d1a981cb97d0b970eee3c1e3aa87</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v23
+++ v24
@@ -15,4 +15,4 @@
 See changes made to the API across releases [here](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Changelog).

 ### More
-* [API examples](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Examples)
+* [API examples](https://github.com/jbunke/se-script-examples)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.net6bd6611b27875d15b3c08e6735d19cedd6f479f6</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v22
+++ v23
@@ -1,4 +1,4 @@
-This is the scripting API for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language]() for _Stipple Effect_, including types and additional native functions.
+This is the scripting API for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language](https://github.com/jbunke/delta-time/wiki/DeltaScript) for _Stipple Effect_, including types and additional native functions.

 ### Content
 * [Types](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Types)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.netfc7770d8227ec287ccd23f8f68a1e484da4b3900</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v21
+++ v22
@@ -16,425 +16,3 @@

 ### More
 * [API examples](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Examples)
-
-# Types
-### `project`
-This represents a Stipple Effect project, which is internally represented by the [`SEContext`](https://github.com/jbunke/stipple-effect/blob/master/src/com/jordanbunke/stipple_effect/project/SEContext.java) class.
-
-### `layer`
-This represents a layer of a Stipple Effect project. Internally, the `layer` type is represented by objects of the record [`LayerRep`](https://github.com/jbunke/stipple-effect/blob/master/src/com/jordanbunke/stipple_effect/scripting/util/LayerRep.java). `LayerRep` stores an immutable reference to the project that contains the layer, and to its layer index. This means that a `layer` reference in script can be "spoiled" - i.e. cease to refer to the same layer or no longer refer to a valid layer at all - if the number of layers in the project are changed, or if the order of the layers in the project is changed.
-
-# Getter functions i.e. native function call expressions
-References take the form `$func_name(args) -&amp;gt; return_type`.
-
-## Project
-### `$get_project()`
-
-    :::js
-    $get_project() -&amp;gt; project
-Returns the current active project in Stipple Effect.
-### `$get_projects()`
-
-    :::js
-    $get_projects() -&amp;gt; project[]
-Returns an array of all of the projects that are currently loaded into Stipple Effect.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/new_project.png) `$new_project()`
-
-    :::js
-    $new_project(int w, int h) -&amp;gt; project
-Creates a new project with a canvas size specified by `w` x `h` pixels, sets it to be the active project in Stipple Effect, and returns its reference.
-
-**Constraints:** `0 &amp;lt; w &amp;lt;= 800 &amp;amp;&amp;amp; 0 &amp;lt; h &amp;lt;= 800`
-## Layer
-### `$get_layer()`
-1.  ```js
-    $get_layer() -&amp;gt; layer
-    ```
-    Returns the current editing layer of the active project in Stipple Effect.
-2.  ```js
-    $get_layer(project p) -&amp;gt; layer
-    ```
-    Returns the current editing layer of the project `p`.
-3.  ```js
-    $get_layer(project p, int i) -&amp;gt; layer
-    ```
-    Returns the layer at layer index `i` in project `p`.
-### `$get_layers()`
-
-    :::js
-    $get_layers(project p) -&amp;gt; layer[]
-Returns an array of all the layers in project `p`, with the lowest layer at index 0.
-### `$get_layer_index()`
-
-    :::js
-    $get_layer_index(project p) -&amp;gt; int
-Returns the layer index of the current editing layer of project `p`.
-### `$is_linked()`
-
-    :::js
-    $is_linked(layer l) -&amp;gt; bool
-Returns `true` if the frames in layer `l` are linked, `false` otherwise.
-### `$is_enabled()`
-
-    :::js
-    $is_enabled(layer l) -&amp;gt; bool
-Returns `true` if the layer `l` is enabled i.e. visible, `false` otherwise.
-### `$is_opaque()`
-
-    :::js
-    $is_opaque(layer l) -&amp;gt; bool
-Returns `true` if the layer `l` has an opacity of 1.0 (represented as 255 in Stipple Effect), `false` otherwise.
-### `$get_opacity()`
-
-    :::js
-    $get_opacity(layer l) -&amp;gt; float
-Returns the opacity of layer `l` as a float ranging from 0.0 (transparent) to 1.0 (opaque).
-## Frame
-### `$get_frame_content()`
-
-    :::js
-    $get_frame_content(layer l, int i) -&amp;gt; image
-Returns an image of the canvas contents of layer `l` at frame index `i`. If the frames of layer `l` are linked, the function will return the linked content.
-### `$get_frame_index()`
-
-    :::js
-    $get_frame_index(project p) -&amp;gt; int
-Returns the current frame index of the project `p` in the workspace.
-### `$get_frame_count()`
-
-    :::js
-    $get_frame_count(project p) -&amp;gt; int
-Returns the number of frames in the project `p`.
-### `$is_anim()`
-
-    :::js
-    $is_anim(project p) -&amp;gt; bool
-Returns `true` if the project `p` has multiple frames, `false` otherwise (i.e. only has a single frame).
-## Tools
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/wand.png) `$wand()`
-
-    :::js
-    $wand(image img, int x, int y, float tolerance, bool global, bool diag) -&amp;gt; int[]{}
-Returns a set of arrays of two integers that represent the pixel coordinates of the result of a wand tool operation on the image `img`. `x` and `y` represent the initial target pixel of `img` that the operation is initiated from. `tolerance` is a value ranging from 0.0 (exact match) to 1.0 (trivial) that determines how tolerant the threshold of color similarity between the target pixel and any pixel to be included is. If `global` is true, the search algorithm searches the entire canvas irrespective of adjacency and includes all pixels that comply with the tolerance. If `global` is false, inclusions must be adjacent to the initial target pixel or at least one other inclusion. If `diag` is true, adjacency is defined as cardinal adjacency + diagonal adjacency. If `diag` is false, adjacency is simply defined as cardinal adjacency. For every `int[] coord` in the return set `int[]{}`, `coord[0]` is the pixel X coordinate and `coord[1]` is the pixel Y coordinate. The searching algorithm for `$wand()` and `$fill()` can be found [here](https://github.com/jbunke/stipple-effect/blob/master/src/com/jordanbunke/stipple_effect/tools/ToolThatSearches.java).
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/fill.png) `$fill()`
-
-    :::js
-    $fill(image img, color c, int x, int y, float tolerance, bool global, bool diag) -&amp;gt; image
-Returns the resultant image of a fill operation applied to the image `img`. `$fill()` performs the exact same search and computation as `$wand()`. However, instead of returning a selection as a `int[]{}`, `$fill()` takes that selection and sets every pixel in that selection to the color `c` in `img`.
-### `$fill_selection()`
-1.  ```js
-    $fill_selection(image img, color c, int[]{} selection) -&amp;gt; image
-    ```
-    Returns the resultant image of a fill operation applied to the image `img` where all the pixels in `selection` are set to `c` in `img`.
-2.  ```js
-    $fill_selection(image img, color c) -&amp;gt; image
-    ```
-    Returns the resultant image of a fill operation applied to the image `img` where all the pixels in the current selection in the active Stipple Effect project are set to `c` in `img`.
-## Color
-### `$get_primary()`
-
-    :::js
-    $get_primary() -&amp;gt; color
-Returns the current Stipple Effect system primary color.
-### `$get_secondary()`
-
-    :::js
-    $get_secondary() -&amp;gt; color
-Returns the current Stipple Effect system secondary color.
-### `$get_pal()`
-
-    :::js
-    $get_pal() -&amp;gt; color{}
-Returns the currently selected Stipple Effect system palette as a set of its colors if one exists.
-### `$has_pal()`
-
-    :::js
-    $has_pal() -&amp;gt; bool
-Returns `true` if there is at least one palette in Stipple Effect at the time of the call, `false` otherwise.
-### `$hsv()`
-1.  ```js
-    $hsv(float h, float s, float v, int a) -&amp;gt; color
-    ```
-    Returns a color built from its hue, saturation, value and alpha components. Unlike `rgb()`, which takes as arguments integer values ranging from 0 to 255, each of the HSV component arguments (`h`, `s` and `v`) is a float ranging from 0.0 to 1.0. `a`, however, is still an integer from 0 to 255.
-2.  ```js
-    $hsv(float h, float s, float v) -&amp;gt; color
-    ```
-    Returns a color built from its hue, saturation and value components.
-
-    `$hsv(h, s, v) &amp;lt;=&amp;gt; $hsv(h, s, v, 255)`
-### `$hue()`
-
-    :::js
-    $hue(color c) -&amp;gt; float
-Returns the hue of a color `c` as a float ranging from 0.0 to 1.0. Since hue is a circular/angular property, a hue of 0.0 and a hue of 1.0 are identical. A hue of 0.0 is conventionally assigned to red ([`#ff0000`](https://en.wikipedia.org/wiki/Red), for example), while green is assigned to 1/3 (120°) and blue is assigned to 2/3 (240°). You can read more about hue [here](https://en.wikipedia.org/wiki/Hue#Defining_hue_in_terms_of_RGB).
-### `$sat()`
-
-    :::js
-    $sat(color c) -&amp;gt; float
-Returns the [saturation](https://en.wikipedia.org/wiki/Colorfulness#Saturation) of a color `c` as a float ranging from 0.0 to 1.0.
-### `$value()`
-
-    :::js
-    $value(color c) -&amp;gt; float
-Returns the [value](https://en.wikipedia.org/wiki/HSL_and_HSV) of a color `c` as a float ranging from 0.0 to 1.0.
-## Selection
-### `$is_selected()`
-
-    :::js
-    $is_selected(project p, int x, int y) -&amp;gt; bool
-Returns `true` if the pixel at `x`, `y` is part of the current selection in the project `p`, `false` otherwise.
-### `$get_selection()`
-
-    :::js
-    $get_selection(project p) -&amp;gt; int[]{}
-Returns the current selection of the project `p` as a set of two-element integer arrays. For every `int[] coord` in the return set `int[]{}`, `coord[0]` is the pixel X coordinate and `coord[1]` is the pixel Y coordinate.
-### `$has_selection()`
-
-    :::js
-    $has_selection(project p) -&amp;gt; bool
-Returns `true` if the project `p` currently has a selection, `false` otherwise.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/outline.png) `$outline()`
-
-    :::js
-    $outline(int[]{} selection, int[] side_mask) -&amp;gt; int[]{}
-Returns the outline of the initial selection `selection` when outlined with the side mask `side_mask`. The outlining algorithm can be found [here](https://github.com/jbunke/stipple-effect/blob/master/src/com/jordanbunke/stipple_effect/selection/Outliner.java).
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/outline.png) `$single_outline()`
-
-    :::js
-    $single_outline(int[]{} selection, int border_px) -&amp;gt; int[]{}
-Returns the outline of the initial selection `selection` when outlined with the single outline side mask with a border thickness of `border_px` pixels. A single outline outlines along the cardinal directional borders of the selection only.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/outline.png) `$double_outline()`
-
-    :::js
-    $double_outline(int[]{} selection, int border_px) -&amp;gt; int[]{}
-Returns the outline of the initial selection `selection` when outlined with the double outline side mask with a border thickness of `border_px` pixels. A double outline outlines along the cardinal directional borders of the selection as well as the diagonal borders.
-### `$get_side_mask()`
-
-    :::js
-    $get_side_mask() -&amp;gt; int[]
-Returns the current system outline side mask. This is an eight-element integer array. In order, the indices correspond to the following directions: `TOP`, `LEFT`, `RIGHT`, `BOTTOM`, `TL`, `TR`, `BL`, `BR`.
-
-# Setter functions i.e. native function call statements
-## Project
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/save.png) `$save()`
-
-    :::js
-    $save(project p);
-Saves the project `p` if `p` has a valid save association. That is, `p` has been assigned a folder, a file name, a valid project type for its contents (whether STIP, single PNG, GIF, etc.) and any associated metadata.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/resize.png) `$resize()`
-
-    :::js
-    $resize(project p, int w, int h);
-Resizes the project `p` with a new canvas of dimensions `w` x `h` pixels.
-
-**Constraints:** `0 &amp;lt; w &amp;lt;= 800 &amp;amp;&amp;amp; 0 &amp;lt; h &amp;lt;= 800`
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/pad.png) `$pad()`
-
-    :::js
-    $pad(project p, int l, int r, int t, int b);
-Pads the project `p` by `l` pixels to the left, `r` pixels to the right, `t` pixels upwards, and `b` pixels downwards. Arguments for `l`, `r`, `t` and `b` can be negative if one wants to trim the project rather than pad it in any direction.
-
-**Constraints:**
-
-* Let `p.w` represent the current canvas width of project `p` in pixels
-* Let `p.h` represent the current canvas height of project `h` in pixels
-* Let `p.w' = l + p.w + r`
-* Let `p.h' = t + p.h + b`
-
-`0 &amp;lt; p.w' &amp;lt;= 800 &amp;amp;&amp;amp; 0 &amp;lt; p.h' &amp;lt;= 800`
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/stitch_split_frames.png) `$stitch()`
-
-    :::js
-    $stitch(project p, int dim, bool horizontal);
-Stitches the frames of the project `p` together, allotting `dim` frames to every row if `horizontal` is true, or to every column if `horizontal` is false.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/stitch_split_frames.png) `$split_px()`
-
-    :::js
-    $split_px(project p, int frm_w, int frm_h, bool horizontal, bool trunc_x, bool trunc_y);
-Splits the project `p` into frames of `frm_w` x `frm_h` pixels. If `horizontal` is true, frames are sequenced left to right, top to bottom. If `horizontal` is false, frames are sequenced top to bottom, left to right. If `trunc_x` is true, any remaining content on the X-axis will be truncated and discarded. If `trunc_x` is false and `p.w % frm_w != 0`, an additional frame is allotted for every row that is partially populated by the remaining content. `trunc_y` follows by analogy.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/stitch_split_frames.png) `$split()`
-
-    :::js
-    $split(project p, int cols, int rows, bool horizontal, bool trunc_x, bool trunc_y);
-Splits the project `p` into `cols` x `rows` frames where `cols` is the number of columns and `rows` is the number of rows into which `p` is subdivided. If `horizontal` is true, frames are sequenced left to right, top to bottom. If `horizontal` is false, frames are sequenced top to bottom, left to right. If `trunc_x` is true, any remaining content on the X-axis will be truncated and discarded. If `trunc_x` is false and `p.w % cols != 0`, an additional frame is allotted for every row that is partially populated by the remaining content. In this case, the project would end up being divided into (`cols` + 1) columns rather than `cols` columns. `trunc_y` follows by analogy.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/new_project.png) `$new_project()`
-
-    :::js
-    $new_project(int w, int h);
-Creates a new project with a canvas size specified by `w` x `h` pixels, and sets it to be the active project in Stipple Effect.
-
-**Constraints:** `0 &amp;lt; w &amp;lt;= 800 &amp;amp;&amp;amp; 0 &amp;lt; h &amp;lt;= 800`
-
-## Layer
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/frames_linked.png) `$link_frames()`
-
-    :::js
-    $link_frames(layer l);
-Links the frames of the layer `l` together. This means that all of the frames in `l` will display the same image, and that changes made on any frame of layer `l` will extend to all other frames as well. The linked content will be set from the current frame index.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/frames_unlinked.png) `$unlink_frames()`
-
-    :::js
-    $unlink_frames(layer l);
-Unlinks the frames of the layer `l`. If `l` was previously linked, all its frames will still initially appear to be the same, but can now be modified independently.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/layer_disabled.png) `$disable_layer()`
-
-    :::js
-    $disable_layer(layer l);
-Disables the layer `l`, i.e. makes it invisible.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/layer_enabled.png) `$enable_layer()`
-
-    :::js
-    $enable_layer(layer l);
-Enables the layer `l`, i.e. makes it visible.
-### `$set_layer_index()`
-
-    :::js
-    $set_layer_index(project p, int i);
-Sets the editing layer index of project `p` to `i`. Layers are ordered from the bottom up, so an index of 0 will correspond to the lowest layer.
-
-**Constraints:** `0 &amp;lt;= i &amp;lt; #|$get_layers(p)`
-
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/new_layer.png) `$add_layer()`
-
-    :::js
-    $add_layer(project p);
-Adds a new layer to the project `p` directly above the current editing layer. The new layer becomes the new editing layer.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/duplicate_layer.png) `$duplicate_layer()`
-
-    :::js
-    $duplicate_layer(project p);
-Duplicates the current editing layer of project `p` and places the duplicate directly on top of the initial layer. The duplicate layer becomes the new editing layer.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/remove_layer.png) `$remove_layer()`
-
-    :::js
-    $remove_layer(project p);
-Removes the current editing layer of the project `p` if `p` has at least one other layer. If the layer to be removed is the bottommost layer, the editing layer becomes the new bottommost layer after the removal. Otherwise, the new editing layer becomes the layer below the layer that was removed.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/move_layer_down.png) `$move_layer_down()`
-
-    :::js
-    $move_layer_down(project p);
-Swaps the current editing layer of the project `p` with the layer below it if it is not the lowest layer in `p`.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/move_layer_up.png) `$move_layer_up()`
-
-    :::js
-    $move_layer_up(project p);
-Swaps the current editing layer of the project `p` with the layer above it if it is not the top layer in `p`.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/merge_with_layer_below.png) `$merge_with_below()`
-
-    :::js
-    $merge_with_below(project p);
-Merges the current editing layer of the project `p` with the layer below it if the editing layer is not the lowest layer in `p`.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/flatten.png) `$flatten()`
-
-    :::js
-    $flatten(project p);
-Flattens project `p`, compressing all of its contents down to a single layer.
-### `$set_opacity()`
-
-    :::js
-    $set_opacity(layer l, float opacity);
-Sets the opacity of the layer `l` to `opacity`. Opacity ranges from 0.0 (transparent) to 1.0 (opaque).
-
-**Constraints:** `0.0 &amp;lt;= opacity &amp;lt;= 1.0`
-
-## Frame
-### `$set_frame_content()`
-
-    :::js
-    $set_frame_content(layer l, int i, image content);
-Sets the content to the frame at index `i` of the layer `l` to the image `content`. The dimensions of `content` must be the same as the canvas size of the project associated with `l`.
-
-### `$edit_frame()`
-
-    :::js
-    $edit_frame(layer l, int i, image drawn);
-Like `$set_frame_content()`, but instead of overwriting the previous contents of the frame, `$edit_frame()` draws the image `drawn` on top of the frame's existing contents.
-### `$wipe_frame()`
-
-    :::js
-    $wipe_frame(layer l, int i);
-Erases the contents of the frame at index `i` of the layer `l`. Resultingly, frame `i` of `l` will consist of a fully transparent image.
-### `$set_frame_index()`
-
-    :::js
-    $set_frame_index(project p, int i);
-Sets the active frame index of the project `p` to `i`.
-
-**Constraints:** `0 &amp;lt;= i &amp;lt; $get_frame_count(p)`
-
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/new_frame.png) `$add_frame()`
-
-    :::js
-    $add_frame(project p);
-Adds a new frame to the project `p` directly after the current active frame. The new frame becomes the new active frame.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/duplicate_frame.png) `$duplicate_frame()`
-
-    :::js
-    $duplicate_frame(project p);
-Duplicates the current active frame of project `p` and places the duplicate directly after the initial frame. The duplicate frame becomes the new active frame.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/remove_frame.png) `$remove_frame()`
-
-    :::js
-    $remove_frame(project p);
-Removes the current active frame of the project `p` if `p` has at least one other frame. If the frame to be removed is the first frame, the active frame becomes the new first frame after the removal. Otherwise, the new active frame becomes the frame before the frame that was removed.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/move_frame_back.png) `$move_frame_back()`
-
-    :::js
-    $move_frame_back(project p);
-Swaps the current active frame of the project `p` with the frame before it if it is not the first frame in `p`.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/move_frame_forward.png) `$move_frame_forward()`
-
-    :::js
-    $move_frame_forward(project p);
-Swaps the current active frame of the project `p` with the layer after it if it is not the last frame in `p`.
-
-## Color
-### `$set_primary()`
-
-    :::js
-    $set_primary(color c);
-Sets the Stipple Effect primary color to `c`.
-### `$set_secondary()`
-
-    :::js
-    $set_secondary(color c);
-Sets the Stipple Effect secondary color to `c`.
-### ![](https://raw.githubusercontent.com/jbunke/stipple-effect/master/res/icons/new_palette.png) `$new_pal()`
-
-    :::js
-    $new_pal(color{} cs, string name);
-Creates a new palette in Stipple Effect from the set of colors `cs` with the name `name`.
-
-## Selection
-### `$set_selection()`
-
-    :::js
-    $set_selection(project p, int[]{} selection);
-Sets the current pixel selection of the project `p` to `selection`.
-
-**Constraints:**
-
-`for (int[] coord in selection) #|coord == 2`
-
-### `$select_all()`
-
-    :::js
-    $select_all(project p);
-Sets the current pixel selection of the project `p` to be all the pixels of its canvas.
-### `$deselect()`
-
-    :::js
-    $deselect(project p);
-Empties the current pixel selection of the project `p`.
-### `$invert_selection()`
-
-    :::js
-    $invert_selection(project p);
-Inverts the current pixel selection of the project `p`. That is, for every pixel on the project canvas, it will be included in the updated selection if and only if it is not part of the current selection.
-### `$set_side_mask()`
-
-    :::js
-    $set_side_mask(int[] side_mask);
-Sets the Stipple Effect outline side mask to `side_mask`. In order, the indices in `side_mask` correspond to the following directions: `TOP`, `LEFT`, `RIGHT`, `BOTTOM`, `TL`, `TR`, `BL`, `BR`.
-
-**Constraints:** `#|side_mask == 8`
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.net552286352dc4144a9d5c99ba63655983fd51146c</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v20
+++ v21
@@ -1,4 +1,21 @@
-This is the scripting API for _Stipple Effect_. It covers all the extensions made to the _DeltaScript_ base language for _Stipple Effect_, including types and additional native functions.
+This is the scripting API for _Stipple Effect_. It covers all the extensions made to the [_DeltaScript_ base language]() for _Stipple Effect_, including types and additional native functions.
+
+### Content
+* [Types](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Types)
+* Functions
+  * [Project functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Project-functions)
+  * [Layer functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Layer-functions)
+  * [Frame functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Frame-functions)
+  * [Tool functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Tool-functions)
+  * [Color functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Color-functions)
+  * [Selection functions](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Selection-functions)
+
+### Changelog
+
+See changes made to the API across releases [here](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Changelog).
+
+### More
+* [API examples](https://github.com/jbunke/stipple-effect/wiki/API-%E2%80%93-Examples)

 # Types
 ### `project`
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.neta5278bdc54607f3a5c0462a9eff5a4a97821702f</guid></item><item><title>Scripting API modified by Jordan Bunke</title><link>https://sourceforge.net/p/stipple-effect/wiki/Scripting%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v19
+++ v20
@@ -420,6 +420,4 @@
     $set_side_mask(int[] side_mask);
 Sets the Stipple Effect outline side mask to `side_mask`. In order, the indices in `side_mask` correspond to the following directions: `TOP`, `LEFT`, `RIGHT`, `BOTTOM`, `TL`, `TR`, `BL`, `BR`.

-**Constraints:**
-
-`#|side_mask == 8`
+**Constraints:** `#|side_mask == 8`
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jordan Bunke</dc:creator><pubDate>Tue, 13 Aug 2024 17:33:49 -0000</pubDate><guid>https://sourceforge.net81fa4e69f1fe372e6e65881da3bb2e9aad7e34b3</guid></item></channel></rss>