diff --git a/docs/API.md b/docs/API.md
index f662fa2..34e75af 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -35,7 +35,7 @@
 <dd><p>Check if one specific window flag is enabled</p>
 </dd>
 <dt><a href="#SetWindowState">SetWindowState(flags)</a> ⇒ <code>undefined</code></dt>
-<dd><p>Set window configuration state using flags (only PLATFORM_DESKTOP)</p>
+<dd><p>Set window configuration state using flags</p>
 </dd>
 <dt><a href="#ClearWindowState">ClearWindowState(flags)</a> ⇒ <code>undefined</code></dt>
 <dd><p>Clear window configuration state flags</p>
@@ -821,7 +821,7 @@
 <dd><p>Load font from file into GPU memory (VRAM)</p>
 </dd>
 <dt><a href="#LoadFontEx">LoadFontEx(fileName, fontSize, fontChars, glyphCount)</a> ⇒ <code>Font</code></dt>
-<dd><p>Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set</p>
+<dd><p>Load font from file with extended parameters</p>
 </dd>
 <dt><a href="#LoadFontFromImage">LoadFontFromImage(image, key, firstChar)</a> ⇒ <code>Font</code></dt>
 <dd><p>Load font from Image (XNA style)</p>
@@ -839,7 +839,7 @@
 <dd><p>Unload font chars info data (RAM)</p>
 </dd>
 <dt><a href="#UnloadFont">UnloadFont(font)</a> ⇒ <code>undefined</code></dt>
-<dd><p>Unload font from GPU memory (VRAM)</p>
+<dd><p>Unload Font from GPU memory (VRAM)</p>
 </dd>
 <dt><a href="#DrawFPS">DrawFPS(posX, posY)</a> ⇒ <code>undefined</code></dt>
 <dd><p>Draw current FPS</p>
@@ -1276,89 +1276,164 @@
 <dt><a href="#SetAudioStreamBufferSizeDefault">SetAudioStreamBufferSizeDefault(size)</a> ⇒ <code>undefined</code></dt>
 <dd><p>Default size for new audio streams</p>
 </dd>
-<dt><a href="#EaseLinearNone">EaseLinearNone(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseLinearNone.</p>
+<dt><a href="#GuiEnable">GuiEnable()</a> ⇒ <code>undefined</code></dt>
+<dd><p>Enable gui controls (global state)</p>
 </dd>
-<dt><a href="#EaseLinearIn">EaseLinearIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseLinearIn.</p>
+<dt><a href="#GuiDisable">GuiDisable()</a> ⇒ <code>undefined</code></dt>
+<dd><p>Disable gui controls (global state)</p>
 </dd>
-<dt><a href="#EaseLinearOut">EaseLinearOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseLinearOut.</p>
+<dt><a href="#GuiLock">GuiLock()</a> ⇒ <code>undefined</code></dt>
+<dd><p>Lock gui controls (global state)</p>
 </dd>
-<dt><a href="#EaseLinearInOut">EaseLinearInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseLinearInOut.</p>
+<dt><a href="#GuiUnlock">GuiUnlock()</a> ⇒ <code>undefined</code></dt>
+<dd><p>Unlock gui controls (global state)</p>
 </dd>
-<dt><a href="#EaseSineIn">EaseSineIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseSineIn.</p>
+<dt><a href="#GuiIsLocked">GuiIsLocked()</a> ⇒ <code>boolean</code></dt>
+<dd><p>Check if gui is locked (global state)</p>
 </dd>
-<dt><a href="#EaseSineOut">EaseSineOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseSineOut.</p>
+<dt><a href="#GuiFade">GuiFade(alpha)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f</p>
 </dd>
-<dt><a href="#EaseSineInOut">EaseSineInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseSineInOut.</p>
+<dt><a href="#GuiSetState">GuiSetState(state)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set gui state (global state)</p>
 </dd>
-<dt><a href="#EaseCircIn">EaseCircIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCircIn.</p>
+<dt><a href="#GuiGetState">GuiGetState()</a> ⇒ <code>number</code></dt>
+<dd><p>Get gui state (global state)</p>
 </dd>
-<dt><a href="#EaseCircOut">EaseCircOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCircOut.</p>
+<dt><a href="#GuiSetFont">GuiSetFont(font)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set gui custom font (global state)</p>
 </dd>
-<dt><a href="#EaseCircInOut">EaseCircInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCircInOut.</p>
+<dt><a href="#GuiGetFont">GuiGetFont()</a> ⇒ <code>Font</code></dt>
+<dd><p>Get gui custom font (global state)</p>
 </dd>
-<dt><a href="#EaseCubicIn">EaseCubicIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCubicIn.</p>
+<dt><a href="#GuiSetStyle">GuiSetStyle(control, property, value)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set one style property</p>
 </dd>
-<dt><a href="#EaseCubicOut">EaseCubicOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCubicOut.</p>
+<dt><a href="#GuiGetStyle">GuiGetStyle(control, property)</a> ⇒ <code>number</code></dt>
+<dd><p>Get one style property</p>
 </dd>
-<dt><a href="#EaseCubicInOut">EaseCubicInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseCubicInOut.</p>
+<dt><a href="#GuiWindowBox">GuiWindowBox(bounds, title)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Window Box control, shows a window that can be closed</p>
 </dd>
-<dt><a href="#EaseQuadIn">EaseQuadIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseQuadIn.</p>
+<dt><a href="#GuiGroupBox">GuiGroupBox(bounds, text)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Group Box control with text name</p>
 </dd>
-<dt><a href="#EaseQuadOut">EaseQuadOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseQuadOut.</p>
+<dt><a href="#GuiLine">GuiLine(bounds, text)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Line separator control, could contain text</p>
 </dd>
-<dt><a href="#EaseQuadInOut">EaseQuadInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseQuadInOut.</p>
+<dt><a href="#GuiPanel">GuiPanel(bounds)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Panel control, useful to group controls</p>
 </dd>
-<dt><a href="#EaseExpoIn">EaseExpoIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseExpoIn.</p>
+<dt><a href="#GuiScrollPanel">GuiScrollPanel(bounds, content, scroll)</a> ⇒ <code><a href="#Rectangle">Rectangle</a></code></dt>
+<dd><p>Scroll Panel control</p>
 </dd>
-<dt><a href="#EaseExpoOut">EaseExpoOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseExpoOut.</p>
+<dt><a href="#GuiLabel">GuiLabel(bounds, text)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Label control, shows text</p>
 </dd>
-<dt><a href="#EaseExpoInOut">EaseExpoInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseExpoInOut.</p>
+<dt><a href="#GuiButton">GuiButton(bounds, text)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Button control, returns true when clicked</p>
 </dd>
-<dt><a href="#EaseBackIn">EaseBackIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBackIn.</p>
+<dt><a href="#GuiLabelButton">GuiLabelButton(bounds, text)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Label button control, show true when clicked</p>
 </dd>
-<dt><a href="#EaseBackOut">EaseBackOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBackOut.</p>
+<dt><a href="#GuiToggle">GuiToggle(bounds, text, active)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Toggle Button control, returns true when active</p>
 </dd>
-<dt><a href="#EaseBackInOut">EaseBackInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBackInOut.</p>
+<dt><a href="#GuiToggleGroup">GuiToggleGroup(bounds, text, active)</a> ⇒ <code>number</code></dt>
+<dd><p>Toggle Group control, returns active toggle index</p>
 </dd>
-<dt><a href="#EaseBounceOut">EaseBounceOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBounceOut.</p>
+<dt><a href="#GuiCheckBox">GuiCheckBox(bounds, text, checked)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Check Box control, returns true when active</p>
 </dd>
-<dt><a href="#EaseBounceIn">EaseBounceIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBounceIn.</p>
+<dt><a href="#GuiComboBox">GuiComboBox(bounds, text, active)</a> ⇒ <code>number</code></dt>
+<dd><p>Combo Box control, returns selected item index</p>
 </dd>
-<dt><a href="#EaseBounceInOut">EaseBounceInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseBounceInOut.</p>
+<dt><a href="#GuiDropdownBox">GuiDropdownBox(bounds, text, active, editMode)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Dropdown Box control, returns selected item</p>
 </dd>
-<dt><a href="#EaseElasticIn">EaseElasticIn(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseElasticIn.</p>
+<dt><a href="#GuiSpinner">GuiSpinner(bounds, text, value, minValue, maxValue, editMode)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Spinner control, returns selected value</p>
 </dd>
-<dt><a href="#EaseElasticOut">EaseElasticOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseElasticOut.</p>
+<dt><a href="#GuiValueBox">GuiValueBox(bounds, text, value, minValue, maxValue, editMode)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Value Box control, updates input text with numbers</p>
 </dd>
-<dt><a href="#EaseElasticInOut">EaseElasticInOut(t, b, c, d)</a> ⇒ <code>number</code></dt>
-<dd><p>Easing: EaseElasticInOut.</p>
+<dt><a href="#GuiTextBox">GuiTextBox(bounds, text, textSize, editMode)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Text Box control, updates input text</p>
+</dd>
+<dt><a href="#GuiTextBoxMulti">GuiTextBoxMulti(bounds, text, textSize, editMode)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Text Box control with multiple lines</p>
+</dd>
+<dt><a href="#GuiSlider">GuiSlider(bounds, textLeft, textRight, value, minValue, maxValue)</a> ⇒ <code>number</code></dt>
+<dd><p>Slider control, returns selected value</p>
+</dd>
+<dt><a href="#GuiSliderBar">GuiSliderBar(bounds, textLeft, textRight, value, minValue, maxValue)</a> ⇒ <code>number</code></dt>
+<dd><p>Slider Bar control, returns selected value</p>
+</dd>
+<dt><a href="#GuiProgressBar">GuiProgressBar(bounds, textLeft, textRight, value, minValue, maxValue)</a> ⇒ <code>number</code></dt>
+<dd><p>Progress Bar control, shows current progress value</p>
+</dd>
+<dt><a href="#GuiStatusBar">GuiStatusBar(bounds, text)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Status Bar control, shows info text</p>
+</dd>
+<dt><a href="#GuiDummyRec">GuiDummyRec(bounds, text)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Dummy control for placeholders</p>
+</dd>
+<dt><a href="#GuiScrollBar">GuiScrollBar(bounds, value, minValue, maxValue)</a> ⇒ <code>number</code></dt>
+<dd><p>Scroll Bar control</p>
+</dd>
+<dt><a href="#GuiGrid">GuiGrid(bounds, spacing, subdivs)</a> ⇒ <code><a href="#Vector2">Vector2</a></code></dt>
+<dd><p>Grid control</p>
+</dd>
+<dt><a href="#GuiListView">GuiListView(bounds, text, scrollIndex, active)</a> ⇒ <code>number</code></dt>
+<dd><p>List View control, returns selected list item index</p>
+</dd>
+<dt><a href="#GuiListViewEx">GuiListViewEx(bounds, text, count, focus, scrollIndex, active)</a> ⇒ <code>number</code></dt>
+<dd><p>List View with extended parameters</p>
+</dd>
+<dt><a href="#GuiMessageBox">GuiMessageBox(bounds, title, message, buttons)</a> ⇒ <code>number</code></dt>
+<dd><p>Message Box control, displays a message</p>
+</dd>
+<dt><a href="#GuiTextInputBox">GuiTextInputBox(bounds, title, message, buttons, text)</a> ⇒ <code>number</code></dt>
+<dd><p>Text Input Box control, ask for text</p>
+</dd>
+<dt><a href="#GuiColorPicker">GuiColorPicker(bounds, color)</a> ⇒ <code><a href="#Color">Color</a></code></dt>
+<dd><p>Color Picker control (multiple color controls)</p>
+</dd>
+<dt><a href="#GuiColorPanel">GuiColorPanel(bounds, color)</a> ⇒ <code><a href="#Color">Color</a></code></dt>
+<dd><p>Color Panel control</p>
+</dd>
+<dt><a href="#GuiColorBarAlpha">GuiColorBarAlpha(bounds, alpha)</a> ⇒ <code>number</code></dt>
+<dd><p>Color Bar Alpha control</p>
+</dd>
+<dt><a href="#GuiColorBarHue">GuiColorBarHue(bounds, value)</a> ⇒ <code>number</code></dt>
+<dd><p>Color Bar Hue control</p>
+</dd>
+<dt><a href="#GuiLoadStyle">GuiLoadStyle(fileName)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Load style file over global style variable (.rgs)</p>
+</dd>
+<dt><a href="#GuiLoadStyleDefault">GuiLoadStyleDefault()</a> ⇒ <code>undefined</code></dt>
+<dd><p>Load style default over global style</p>
+</dd>
+<dt><a href="#GuiIconText">GuiIconText(iconId, text)</a> ⇒ <code>string</code></dt>
+<dd><p>Get text with icon id prepended (if supported)</p>
+</dd>
+<dt><a href="#GuiGetIcons">GuiGetIcons()</a> ⇒ <code>number</code></dt>
+<dd><p>Get full icons data pointer</p>
+</dd>
+<dt><a href="#GuiGetIconData">GuiGetIconData(iconId)</a> ⇒ <code>number</code></dt>
+<dd><p>Get icon bit data</p>
+</dd>
+<dt><a href="#GuiSetIconData">GuiSetIconData(iconId, data)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set icon bit data</p>
+</dd>
+<dt><a href="#GuiSetIconPixel">GuiSetIconPixel(iconId, x, y)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Set icon pixel value</p>
+</dd>
+<dt><a href="#GuiClearIconPixel">GuiClearIconPixel(iconId, x, y)</a> ⇒ <code>undefined</code></dt>
+<dd><p>Clear icon pixel value</p>
+</dd>
+<dt><a href="#GuiCheckIconPixel">GuiCheckIconPixel(iconId, x, y)</a> ⇒ <code>boolean</code></dt>
+<dd><p>Check icon pixel value</p>
 </dd>
 <dt><a href="#UpdateCamera">UpdateCamera(camera)</a> ⇒ <code>undefined</code></dt>
 <dd><p>Update camera position for selected mode</p>
@@ -1620,7 +1695,7 @@ Check if one specific window flag is enabled
 <a name="SetWindowState"></a>
 
 ## SetWindowState(flags) ⇒ <code>undefined</code>
-Set window configuration state using flags (only PLATFORM_DESKTOP)
+Set window configuration state using flags
 
 **Kind**: global function  
 
@@ -4668,7 +4743,7 @@ Load font from file into GPU memory (VRAM)
 <a name="LoadFontEx"></a>
 
 ## LoadFontEx(fileName, fontSize, fontChars, glyphCount) ⇒ <code>Font</code>
-Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set
+Load font from file with extended parameters
 
 **Kind**: global function  
 **Returns**: <code>Font</code> - The resulting Font.  
@@ -4760,7 +4835,7 @@ Unload font chars info data (RAM)
 <a name="UnloadFont"></a>
 
 ## UnloadFont(font) ⇒ <code>undefined</code>
-Unload font from GPU memory (VRAM)
+Unload Font from GPU memory (VRAM)
 
 **Kind**: global function  
 
@@ -6627,425 +6702,664 @@ Default size for new audio streams
 | --- | --- |
 | size | <code>number</code> | 
 
-<a name="EaseLinearNone"></a>
+<a name="GuiEnable"></a>
 
-## EaseLinearNone(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseLinearNone.
+## GuiEnable() ⇒ <code>undefined</code>
+Enable gui controls (global state)
+
+**Kind**: global function  
+<a name="GuiDisable"></a>
+
+## GuiDisable() ⇒ <code>undefined</code>
+Disable gui controls (global state)
+
+**Kind**: global function  
+<a name="GuiLock"></a>
+
+## GuiLock() ⇒ <code>undefined</code>
+Lock gui controls (global state)
+
+**Kind**: global function  
+<a name="GuiUnlock"></a>
+
+## GuiUnlock() ⇒ <code>undefined</code>
+Unlock gui controls (global state)
+
+**Kind**: global function  
+<a name="GuiIsLocked"></a>
+
+## GuiIsLocked() ⇒ <code>boolean</code>
+Check if gui is locked (global state)
+
+**Kind**: global function  
+**Returns**: <code>boolean</code> - The resulting bool.  
+<a name="GuiFade"></a>
+
+## GuiFade(alpha) ⇒ <code>undefined</code>
+Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| alpha | <code>number</code> | 
 
-<a name="EaseLinearIn"></a>
+<a name="GuiSetState"></a>
 
-## EaseLinearIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseLinearIn.
+## GuiSetState(state) ⇒ <code>undefined</code>
+Set gui state (global state)
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| state | <code>number</code> | 
 
-<a name="EaseLinearOut"></a>
+<a name="GuiGetState"></a>
 
-## EaseLinearOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseLinearOut.
+## GuiGetState() ⇒ <code>number</code>
+Get gui state (global state)
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting int.  
+<a name="GuiSetFont"></a>
+
+## GuiSetFont(font) ⇒ <code>undefined</code>
+Set gui custom font (global state)
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| font | <code>Font</code> | 
 
-<a name="EaseLinearInOut"></a>
+<a name="GuiGetFont"></a>
 
-## EaseLinearInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseLinearInOut.
+## GuiGetFont() ⇒ <code>Font</code>
+Get gui custom font (global state)
+
+**Kind**: global function  
+**Returns**: <code>Font</code> - The resulting Font.  
+<a name="GuiSetStyle"></a>
+
+## GuiSetStyle(control, property, value) ⇒ <code>undefined</code>
+Set one style property
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| control | <code>number</code> | 
+| property | <code>number</code> | 
+| value | <code>number</code> | 
 
-<a name="EaseSineIn"></a>
+<a name="GuiGetStyle"></a>
 
-## EaseSineIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseSineIn.
+## GuiGetStyle(control, property) ⇒ <code>number</code>
+Get one style property
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>number</code> - The resulting int.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| control | <code>number</code> | 
+| property | <code>number</code> | 
 
-<a name="EaseSineOut"></a>
+<a name="GuiWindowBox"></a>
 
-## EaseSineOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseSineOut.
+## GuiWindowBox(bounds, title) ⇒ <code>boolean</code>
+Window Box control, shows a window that can be closed
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| title | <code>string</code> | 
 
-<a name="EaseSineInOut"></a>
+<a name="GuiGroupBox"></a>
 
-## EaseSineInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseSineInOut.
+## GuiGroupBox(bounds, text) ⇒ <code>undefined</code>
+Group Box control with text name
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseCircIn"></a>
+<a name="GuiLine"></a>
 
-## EaseCircIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCircIn.
+## GuiLine(bounds, text) ⇒ <code>undefined</code>
+Line separator control, could contain text
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+
+<a name="GuiPanel"></a>
+
+## GuiPanel(bounds) ⇒ <code>undefined</code>
+Panel control, useful to group controls
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
 
-<a name="EaseCircOut"></a>
+<a name="GuiScrollPanel"></a>
 
-## EaseCircOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCircOut.
+## GuiScrollPanel(bounds, content, scroll) ⇒ [<code>Rectangle</code>](#Rectangle)
+Scroll Panel control
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: [<code>Rectangle</code>](#Rectangle) - The resulting Rectangle.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| content | [<code>Rectangle</code>](#Rectangle) | 
+| scroll | <code>number</code> | 
 
-<a name="EaseCircInOut"></a>
+<a name="GuiLabel"></a>
 
-## EaseCircInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCircInOut.
+## GuiLabel(bounds, text) ⇒ <code>undefined</code>
+Label control, shows text
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseCubicIn"></a>
+<a name="GuiButton"></a>
 
-## EaseCubicIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCubicIn.
+## GuiButton(bounds, text) ⇒ <code>boolean</code>
+Button control, returns true when clicked
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseCubicOut"></a>
+<a name="GuiLabelButton"></a>
 
-## EaseCubicOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCubicOut.
+## GuiLabelButton(bounds, text) ⇒ <code>boolean</code>
+Label button control, show true when clicked
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseCubicInOut"></a>
+<a name="GuiToggle"></a>
 
-## EaseCubicInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseCubicInOut.
+## GuiToggle(bounds, text, active) ⇒ <code>boolean</code>
+Toggle Button control, returns true when active
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| active | <code>boolean</code> | 
 
-<a name="EaseQuadIn"></a>
+<a name="GuiToggleGroup"></a>
 
-## EaseQuadIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseQuadIn.
+## GuiToggleGroup(bounds, text, active) ⇒ <code>number</code>
+Toggle Group control, returns active toggle index
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>number</code> - The resulting int.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| active | <code>number</code> | 
 
-<a name="EaseQuadOut"></a>
+<a name="GuiCheckBox"></a>
 
-## EaseQuadOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseQuadOut.
+## GuiCheckBox(bounds, text, checked) ⇒ <code>boolean</code>
+Check Box control, returns true when active
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| checked | <code>boolean</code> | 
 
-<a name="EaseQuadInOut"></a>
+<a name="GuiComboBox"></a>
 
-## EaseQuadInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseQuadInOut.
+## GuiComboBox(bounds, text, active) ⇒ <code>number</code>
+Combo Box control, returns selected item index
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>number</code> - The resulting int.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| active | <code>number</code> | 
 
-<a name="EaseExpoIn"></a>
+<a name="GuiDropdownBox"></a>
 
-## EaseExpoIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseExpoIn.
+## GuiDropdownBox(bounds, text, active, editMode) ⇒ <code>boolean</code>
+Dropdown Box control, returns selected item
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| active | <code>number</code> | 
+| editMode | <code>boolean</code> | 
 
-<a name="EaseExpoOut"></a>
+<a name="GuiSpinner"></a>
 
-## EaseExpoOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseExpoOut.
+## GuiSpinner(bounds, text, value, minValue, maxValue, editMode) ⇒ <code>boolean</code>
+Spinner control, returns selected value
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
+| editMode | <code>boolean</code> | 
 
-<a name="EaseExpoInOut"></a>
+<a name="GuiValueBox"></a>
 
-## EaseExpoInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseExpoInOut.
+## GuiValueBox(bounds, text, value, minValue, maxValue, editMode) ⇒ <code>boolean</code>
+Value Box control, updates input text with numbers
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
+| editMode | <code>boolean</code> | 
 
-<a name="EaseBackIn"></a>
+<a name="GuiTextBox"></a>
 
-## EaseBackIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBackIn.
+## GuiTextBox(bounds, text, textSize, editMode) ⇒ <code>boolean</code>
+Text Box control, updates input text
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| textSize | <code>number</code> | 
+| editMode | <code>boolean</code> | 
 
-<a name="EaseBackOut"></a>
+<a name="GuiTextBoxMulti"></a>
 
-## EaseBackOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBackOut.
+## GuiTextBoxMulti(bounds, text, textSize, editMode) ⇒ <code>boolean</code>
+Text Box control with multiple lines
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>boolean</code> - The resulting bool.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| textSize | <code>number</code> | 
+| editMode | <code>boolean</code> | 
 
-<a name="EaseBackInOut"></a>
+<a name="GuiSlider"></a>
 
-## EaseBackInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBackInOut.
+## GuiSlider(bounds, textLeft, textRight, value, minValue, maxValue) ⇒ <code>number</code>
+Slider control, returns selected value
 
 **Kind**: global function  
 **Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| textLeft | <code>string</code> | 
+| textRight | <code>string</code> | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
 
-<a name="EaseBounceOut"></a>
+<a name="GuiSliderBar"></a>
 
-## EaseBounceOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBounceOut.
+## GuiSliderBar(bounds, textLeft, textRight, value, minValue, maxValue) ⇒ <code>number</code>
+Slider Bar control, returns selected value
 
 **Kind**: global function  
 **Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| textLeft | <code>string</code> | 
+| textRight | <code>string</code> | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
 
-<a name="EaseBounceIn"></a>
+<a name="GuiProgressBar"></a>
 
-## EaseBounceIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBounceIn.
+## GuiProgressBar(bounds, textLeft, textRight, value, minValue, maxValue) ⇒ <code>number</code>
+Progress Bar control, shows current progress value
 
 **Kind**: global function  
 **Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| textLeft | <code>string</code> | 
+| textRight | <code>string</code> | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
+
+<a name="GuiStatusBar"></a>
+
+## GuiStatusBar(bounds, text) ⇒ <code>undefined</code>
+Status Bar control, shows info text
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseBounceInOut"></a>
+<a name="GuiDummyRec"></a>
 
-## EaseBounceInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseBounceInOut.
+## GuiDummyRec(bounds, text) ⇒ <code>undefined</code>
+Dummy control for placeholders
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
 
-<a name="EaseElasticIn"></a>
+<a name="GuiScrollBar"></a>
 
-## EaseElasticIn(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseElasticIn.
+## GuiScrollBar(bounds, value, minValue, maxValue) ⇒ <code>number</code>
+Scroll Bar control
 
 **Kind**: global function  
-**Returns**: <code>number</code> - The resulting float.  
+**Returns**: <code>number</code> - The resulting int.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| value | <code>number</code> | 
+| minValue | <code>number</code> | 
+| maxValue | <code>number</code> | 
 
-<a name="EaseElasticOut"></a>
+<a name="GuiGrid"></a>
 
-## EaseElasticOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseElasticOut.
+## GuiGrid(bounds, spacing, subdivs) ⇒ [<code>Vector2</code>](#Vector2)
+Grid control
+
+**Kind**: global function  
+**Returns**: [<code>Vector2</code>](#Vector2) - The resulting Vector2.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| spacing | <code>number</code> | 
+| subdivs | <code>number</code> | 
+
+<a name="GuiListView"></a>
+
+## GuiListView(bounds, text, scrollIndex, active) ⇒ <code>number</code>
+List View control, returns selected list item index
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting int.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>string</code> | 
+| scrollIndex | <code>number</code> | 
+| active | <code>number</code> | 
+
+<a name="GuiListViewEx"></a>
+
+## GuiListViewEx(bounds, text, count, focus, scrollIndex, active) ⇒ <code>number</code>
+List View with extended parameters
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting int.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| text | <code>number</code> | 
+| count | <code>number</code> | 
+| focus | <code>number</code> | 
+| scrollIndex | <code>number</code> | 
+| active | <code>number</code> | 
+
+<a name="GuiMessageBox"></a>
+
+## GuiMessageBox(bounds, title, message, buttons) ⇒ <code>number</code>
+Message Box control, displays a message
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting int.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| title | <code>string</code> | 
+| message | <code>string</code> | 
+| buttons | <code>string</code> | 
+
+<a name="GuiTextInputBox"></a>
+
+## GuiTextInputBox(bounds, title, message, buttons, text) ⇒ <code>number</code>
+Text Input Box control, ask for text
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting int.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| title | <code>string</code> | 
+| message | <code>string</code> | 
+| buttons | <code>string</code> | 
+| text | <code>string</code> | 
+
+<a name="GuiColorPicker"></a>
+
+## GuiColorPicker(bounds, color) ⇒ [<code>Color</code>](#Color)
+Color Picker control (multiple color controls)
+
+**Kind**: global function  
+**Returns**: [<code>Color</code>](#Color) - The resulting Color.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| color | [<code>Color</code>](#Color) | 
+
+<a name="GuiColorPanel"></a>
+
+## GuiColorPanel(bounds, color) ⇒ [<code>Color</code>](#Color)
+Color Panel control
+
+**Kind**: global function  
+**Returns**: [<code>Color</code>](#Color) - The resulting Color.  
+
+| Param | Type |
+| --- | --- |
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| color | [<code>Color</code>](#Color) | 
+
+<a name="GuiColorBarAlpha"></a>
+
+## GuiColorBarAlpha(bounds, alpha) ⇒ <code>number</code>
+Color Bar Alpha control
 
 **Kind**: global function  
 **Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| alpha | <code>number</code> | 
 
-<a name="EaseElasticInOut"></a>
+<a name="GuiColorBarHue"></a>
 
-## EaseElasticInOut(t, b, c, d) ⇒ <code>number</code>
-Easing: EaseElasticInOut.
+## GuiColorBarHue(bounds, value) ⇒ <code>number</code>
+Color Bar Hue control
 
 **Kind**: global function  
 **Returns**: <code>number</code> - The resulting float.  
 
 | Param | Type |
 | --- | --- |
-| t | <code>number</code> | 
-| b | <code>number</code> | 
-| c | <code>number</code> | 
-| d | <code>number</code> | 
+| bounds | [<code>Rectangle</code>](#Rectangle) | 
+| value | <code>number</code> | 
+
+<a name="GuiLoadStyle"></a>
+
+## GuiLoadStyle(fileName) ⇒ <code>undefined</code>
+Load style file over global style variable (.rgs)
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| fileName | <code>string</code> | 
+
+<a name="GuiLoadStyleDefault"></a>
+
+## GuiLoadStyleDefault() ⇒ <code>undefined</code>
+Load style default over global style
+
+**Kind**: global function  
+<a name="GuiIconText"></a>
+
+## GuiIconText(iconId, text) ⇒ <code>string</code>
+Get text with icon id prepended (if supported)
+
+**Kind**: global function  
+**Returns**: <code>string</code> - The resulting const char *.  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+| text | <code>string</code> | 
+
+<a name="GuiGetIcons"></a>
+
+## GuiGetIcons() ⇒ <code>number</code>
+Get full icons data pointer
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting unsigned int *.  
+<a name="GuiGetIconData"></a>
+
+## GuiGetIconData(iconId) ⇒ <code>number</code>
+Get icon bit data
+
+**Kind**: global function  
+**Returns**: <code>number</code> - The resulting unsigned int *.  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+
+<a name="GuiSetIconData"></a>
+
+## GuiSetIconData(iconId, data) ⇒ <code>undefined</code>
+Set icon bit data
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+| data | <code>number</code> | 
+
+<a name="GuiSetIconPixel"></a>
+
+## GuiSetIconPixel(iconId, x, y) ⇒ <code>undefined</code>
+Set icon pixel value
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+| x | <code>number</code> | 
+| y | <code>number</code> | 
+
+<a name="GuiClearIconPixel"></a>
+
+## GuiClearIconPixel(iconId, x, y) ⇒ <code>undefined</code>
+Clear icon pixel value
+
+**Kind**: global function  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+| x | <code>number</code> | 
+| y | <code>number</code> | 
+
+<a name="GuiCheckIconPixel"></a>
+
+## GuiCheckIconPixel(iconId, x, y) ⇒ <code>boolean</code>
+Check icon pixel value
+
+**Kind**: global function  
+**Returns**: <code>boolean</code> - The resulting bool.  
+
+| Param | Type |
+| --- | --- |
+| iconId | <code>number</code> | 
+| x | <code>number</code> | 
+| y | <code>number</code> | 
 
 <a name="UpdateCamera"></a>
 
diff --git a/examples/models/models_rlgl_solar_system.js b/examples/models/models_rlgl_solar_system.js
index 72ae86c..b3b1be8 100644
--- a/examples/models/models_rlgl_solar_system.js
+++ b/examples/models/models_rlgl_solar_system.js
@@ -73,6 +73,7 @@ camera.target = r.Vector3(0, 0, 0)
 camera.up = r.Vector3(0, 1, 0)
 camera.fovy = 45
 camera.type = r.CAMERA_PERSPECTIVE
+camera.projection = r.CAMERA_PERSPECTIVE
 
 r.SetCameraMode(camera, r.CAMERA_FREE)
 
diff --git a/examples/raygui/raygui_basic_window.js b/examples/raygui/raygui_basic_window.js
new file mode 100644
index 0000000..0163d35
--- /dev/null
+++ b/examples/raygui/raygui_basic_window.js
@@ -0,0 +1,68 @@
+/*******************************************************************************************
+*
+*   raylib [raygui] example - Basic window
+*
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   Copyright (c) 2022 Rob Loach (@RobLoach)
+*
+********************************************************************************************/
+
+const r = require('raylib')
+
+// Initialization
+// --------------------------------------------------------------------------------------
+const screenWidth = 800
+const screenHeight = 450
+let showMessageBox = false
+let backgroundColor = r.RAYWHITE
+
+r.InitWindow(screenWidth, screenHeight, 'raylib [raygui] example - basic window')
+
+r.SetTargetFPS(60)
+
+// r.GuiLoadStyleDefault()
+// --------------------------------------------------------------------------------------
+
+// Main game loop
+while (!r.WindowShouldClose()) { // Detect window close button or ESC key
+  // Update
+  // ----------------------------------------------------------------------------------
+  // TODO: Update your variables here
+  // ----------------------------------------------------------------------------------
+
+  // Draw
+  // ----------------------------------------------------------------------------------
+  r.BeginDrawing()
+
+  r.ClearBackground(backgroundColor)
+
+  if (r.GuiButton(r.Rectangle(30, 100, 200, 30), 'Change Background Color')) {
+    showMessageBox = true
+  }
+
+  if (showMessageBox) {
+    switch (r.GuiMessageBox(r.Rectangle(r.GetScreenWidth() / 2 - 200, r.GetScreenHeight() / 2 - 50, 400, 100), 'Change Background Color', 'Do you really want to change the background?', 'Yes;No')) {
+      case 0:
+      case 2:
+        showMessageBox = false
+        break
+      case 1: // Yes
+        backgroundColor = r.Color(
+          r.GetRandomValue(0, 255),
+          r.GetRandomValue(0, 255),
+          r.GetRandomValue(0, 255),
+          255
+        )
+        showMessageBox = false
+    }
+  }
+
+  r.EndDrawing()
+  // ----------------------------------------------------------------------------------
+}
+
+// De-Initialization
+// --------------------------------------------------------------------------------------
+r.CloseWindow() // Close window and OpenGL context
+// --------------------------------------------------------------------------------------
diff --git a/package-lock.json b/package-lock.json
index 97342ce..a0ad0fc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,7 @@
         "raylib": "bin/node-raylib"
       },
       "devDependencies": {
+        "@raylib/api": "^4.0.0",
         "archiver": "^5.3.1",
         "jest": "^28.1.0",
         "jsdoc-to-markdown": "^7.1.1",
@@ -1050,6 +1051,12 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@raylib/api": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@raylib/api/-/api-4.0.0.tgz",
+      "integrity": "sha512-U/TsyYPQDxkU1bG5cMdnmi2lfzz5tJRQBSYmwPdXn/P3puyFYe1tWkk0OzueS3zr/8j4yZbc6ibg5JMU0I4L5w==",
+      "dev": true
+    },
     "node_modules/@sinclair/typebox": {
       "version": "0.23.5",
       "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
@@ -8409,6 +8416,12 @@
         "fastq": "^1.6.0"
       }
     },
+    "@raylib/api": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@raylib/api/-/api-4.0.0.tgz",
+      "integrity": "sha512-U/TsyYPQDxkU1bG5cMdnmi2lfzz5tJRQBSYmwPdXn/P3puyFYe1tWkk0OzueS3zr/8j4yZbc6ibg5JMU0I4L5w==",
+      "dev": true
+    },
     "@sinclair/typebox": {
       "version": "0.23.5",
       "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
diff --git a/package.json b/package.json
index 9e0ee92..2805aba 100644
--- a/package.json
+++ b/package.json
@@ -62,6 +62,7 @@
     "module-alias": "^2.2.2"
   },
   "devDependencies": {
+    "@raylib/api": "^4.0.0",
     "archiver": "^5.3.1",
     "jest": "^28.1.0",
     "jsdoc-to-markdown": "^7.1.1",
diff --git a/src/generated/node-raylib.cc b/src/generated/node-raylib.cc
index f864f66..5dfedd0 100644
--- a/src/generated/node-raylib.cc
+++ b/src/generated/node-raylib.cc
@@ -6,6 +6,11 @@
 #include <cstring>
 #include "raylib.h"
 #include "extras/easings.h"
+#include "raymath.h"
+
+#define RAYGUI_IMPLEMENTATION
+#include "extras/raygui.h"
+
 using namespace Napi;
 
 inline Napi::Value ToValue(Napi::Env env, bool value) {
@@ -40,10 +45,13 @@ inline Napi::Value ToValue(Napi::Env env, void * value) {
 }
 
 inline float floatFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().FloatValue();
 }
 inline int intFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().Int32Value();
+}
+inline double doubleFromValue(const Napi::CallbackInfo& info, int index) {
+  return info[index].As<Napi::Number>().DoubleValue();
 }
 uintptr_t pointerFromValue(const Napi::CallbackInfo& info, int index) {
   return (uintptr_t) info[index].As<Napi::Number>().Int64Value();
@@ -52,7 +60,7 @@ inline unsigned char unsignedcharFromValue(const Napi::CallbackInfo& info, int i
   return info[index].As<Napi::Number>().Uint32Value();
 }
 inline unsigned int unsignedintFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().Uint32Value();
 }
 inline bool boolFromValue(const Napi::CallbackInfo& info, int index) {
   return info[index].As<Napi::Boolean>();
@@ -247,14 +255,6 @@ inline MaterialMap MaterialMapFromValue(const Napi::CallbackInfo& info, int inde
   };
 }
 
-inline Material MaterialFromValue(const Napi::CallbackInfo& info, int index) {
-  return {
-     ShaderFromValue(info, index + 0),
-     (MaterialMap *) pointerFromValue(info, index + 2),
-     floatFromValue(info, index + 3)
-  };
-}
-
 inline Transform TransformFromValue(const Napi::CallbackInfo& info, int index) {
   return {
      Vector3FromValue(info, index + 0),
@@ -351,34 +351,6 @@ inline Music MusicFromValue(const Napi::CallbackInfo& info, int index) {
      (void *) pointerFromValue(info, index + 7)
   };
 }
-
-inline VrDeviceInfo VrDeviceInfoFromValue(const Napi::CallbackInfo& info, int index) {
-  return {
-     intFromValue(info, index + 0),
-     intFromValue(info, index + 1),
-     floatFromValue(info, index + 2),
-     floatFromValue(info, index + 3),
-     floatFromValue(info, index + 4),
-     floatFromValue(info, index + 5),
-     floatFromValue(info, index + 6),
-     floatFromValue(info, index + 7),
-     floatFromValue(info, index + 8),
-     floatFromValue(info, index + 9)
-  };
-}
-
-inline VrStereoConfig VrStereoConfigFromValue(const Napi::CallbackInfo& info, int index) {
-  return {
-     MatrixFromValue(info, index + 0),
-     MatrixFromValue(info, index + 16),
-     floatFromValue(info, index + 32),
-     floatFromValue(info, index + 33),
-     floatFromValue(info, index + 34),
-     floatFromValue(info, index + 35),
-     floatFromValue(info, index + 36),
-     floatFromValue(info, index + 37)
-  };
-}
 // Convert structs to Napi::Objects for output to JS
 
 inline Napi::Value ToValue(Napi::Env env, Vector2 obj) {
@@ -408,20 +380,20 @@ inline Napi::Value ToValue(Napi::Env env, Vector4 obj) {
 inline Napi::Value ToValue(Napi::Env env, Matrix obj) {
   Napi::Object out = Napi::Object::New(env);
   out.Set("m0", ToValue(env, obj.m0));
-  out.Set("m1", ToValue(env, obj.m1));
-  out.Set("m2", ToValue(env, obj.m2));
-  out.Set("m3", ToValue(env, obj.m3));
   out.Set("m4", ToValue(env, obj.m4));
-  out.Set("m5", ToValue(env, obj.m5));
-  out.Set("m6", ToValue(env, obj.m6));
-  out.Set("m7", ToValue(env, obj.m7));
   out.Set("m8", ToValue(env, obj.m8));
-  out.Set("m9", ToValue(env, obj.m9));
-  out.Set("m10", ToValue(env, obj.m10));
-  out.Set("m11", ToValue(env, obj.m11));
   out.Set("m12", ToValue(env, obj.m12));
+  out.Set("m1", ToValue(env, obj.m1));
+  out.Set("m5", ToValue(env, obj.m5));
+  out.Set("m9", ToValue(env, obj.m9));
   out.Set("m13", ToValue(env, obj.m13));
+  out.Set("m2", ToValue(env, obj.m2));
+  out.Set("m6", ToValue(env, obj.m6));
+  out.Set("m10", ToValue(env, obj.m10));
   out.Set("m14", ToValue(env, obj.m14));
+  out.Set("m3", ToValue(env, obj.m3));
+  out.Set("m7", ToValue(env, obj.m7));
+  out.Set("m11", ToValue(env, obj.m11));
   out.Set("m15", ToValue(env, obj.m15));
   return out;
 }
@@ -558,14 +530,6 @@ inline Napi::Value ToValue(Napi::Env env, MaterialMap obj) {
   return out;
 }
 
-inline Napi::Value ToValue(Napi::Env env, Material obj) {
-  Napi::Object out = Napi::Object::New(env);
-  out.Set("shader", ToValue(env, obj.shader));
-  out.Set("maps", ToValue(env, obj.maps));
-  out.Set("params", ToValue(env, obj.params));
-  return out;
-}
-
 inline Napi::Value ToValue(Napi::Env env, Transform obj) {
   Napi::Object out = Napi::Object::New(env);
   out.Set("translation", ToValue(env, obj.translation));
@@ -663,34 +627,6 @@ inline Napi::Value ToValue(Napi::Env env, Music obj) {
   return out;
 }
 
-inline Napi::Value ToValue(Napi::Env env, VrDeviceInfo obj) {
-  Napi::Object out = Napi::Object::New(env);
-  out.Set("hResolution", ToValue(env, obj.hResolution));
-  out.Set("vResolution", ToValue(env, obj.vResolution));
-  out.Set("hScreenSize", ToValue(env, obj.hScreenSize));
-  out.Set("vScreenSize", ToValue(env, obj.vScreenSize));
-  out.Set("vScreenCenter", ToValue(env, obj.vScreenCenter));
-  out.Set("eyeToScreenDistance", ToValue(env, obj.eyeToScreenDistance));
-  out.Set("lensSeparationDistance", ToValue(env, obj.lensSeparationDistance));
-  out.Set("interpupillaryDistance", ToValue(env, obj.interpupillaryDistance));
-  out.Set("lensDistortionValues", ToValue(env, obj.lensDistortionValues));
-  out.Set("chromaAbCorrection", ToValue(env, obj.chromaAbCorrection));
-  return out;
-}
-
-inline Napi::Value ToValue(Napi::Env env, VrStereoConfig obj) {
-  Napi::Object out = Napi::Object::New(env);
-  out.Set("projection", ToValue(env, obj.projection));
-  out.Set("viewOffset", ToValue(env, obj.viewOffset));
-  out.Set("leftLensCenter", ToValue(env, obj.leftLensCenter));
-  out.Set("rightLensCenter", ToValue(env, obj.rightLensCenter));
-  out.Set("leftScreenCenter", ToValue(env, obj.leftScreenCenter));
-  out.Set("rightScreenCenter", ToValue(env, obj.rightScreenCenter));
-  out.Set("scale", ToValue(env, obj.scale));
-  out.Set("scaleIn", ToValue(env, obj.scaleIn));
-  return out;
-}
-
 inline Texture2D Texture2DFromValue(const Napi::CallbackInfo& info, int index) {
   return (Texture2D) TextureFromValue(info, index);
 }
@@ -3028,187 +2964,1360 @@ Napi::Value BindEaseElasticInOut(const Napi::CallbackInfo& info) {
   );
 }
 
-void BindInitWindow(const Napi::CallbackInfo& info) {
-  InitWindow(
-     intFromValue(info, 0),
-       intFromValue(info, 1),
-       (const char *) stringFromValue(info, 2)
+Napi::Value BindClamp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Clamp(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindCloseWindow(const Napi::CallbackInfo& info) {
-  CloseWindow(
-    
+Napi::Value BindLerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Lerp(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindSetWindowState(const Napi::CallbackInfo& info) {
-  SetWindowState(
-     unsignedintFromValue(info, 0)
+Napi::Value BindNormalize(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Normalize(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindClearWindowState(const Napi::CallbackInfo& info) {
-  ClearWindowState(
-     unsignedintFromValue(info, 0)
+Napi::Value BindRemap(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Remap(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2),
+       floatFromValue(info, 3),
+       floatFromValue(info, 4)
+    )
   );
 }
 
-void BindToggleFullscreen(const Napi::CallbackInfo& info) {
-  ToggleFullscreen(
-    
+Napi::Value BindVector2Zero(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Zero(
+      
+    )
   );
 }
 
-void BindMaximizeWindow(const Napi::CallbackInfo& info) {
-  MaximizeWindow(
-    
+Napi::Value BindVector2One(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2One(
+      
+    )
   );
 }
 
-void BindMinimizeWindow(const Napi::CallbackInfo& info) {
-  MinimizeWindow(
-    
+Napi::Value BindVector2Add(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Add(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindRestoreWindow(const Napi::CallbackInfo& info) {
-  RestoreWindow(
-    
+Napi::Value BindVector2AddValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2AddValue(
+       Vector2FromValue(info, 0),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindSetWindowIcon(const Napi::CallbackInfo& info) {
-  SetWindowIcon(
-     ImageFromValue(info, 0)
+Napi::Value BindVector2Subtract(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Subtract(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindSetWindowTitle(const Napi::CallbackInfo& info) {
-  SetWindowTitle(
-     (const char *) stringFromValue(info, 0)
+Napi::Value BindVector2SubtractValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2SubtractValue(
+       Vector2FromValue(info, 0),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindSetWindowPosition(const Napi::CallbackInfo& info) {
-  SetWindowPosition(
-     intFromValue(info, 0),
-       intFromValue(info, 1)
+Napi::Value BindVector2Length(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Length(
+       Vector2FromValue(info, 0)
+    )
   );
 }
 
-void BindSetWindowMonitor(const Napi::CallbackInfo& info) {
-  SetWindowMonitor(
-     intFromValue(info, 0)
+Napi::Value BindVector2LengthSqr(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2LengthSqr(
+       Vector2FromValue(info, 0)
+    )
   );
 }
 
-void BindSetWindowMinSize(const Napi::CallbackInfo& info) {
-  SetWindowMinSize(
-     intFromValue(info, 0),
-       intFromValue(info, 1)
+Napi::Value BindVector2DotProduct(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2DotProduct(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindSetWindowSize(const Napi::CallbackInfo& info) {
-  SetWindowSize(
-     intFromValue(info, 0),
-       intFromValue(info, 1)
+Napi::Value BindVector2Distance(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Distance(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindSetClipboardText(const Napi::CallbackInfo& info) {
-  SetClipboardText(
-     (const char *) stringFromValue(info, 0)
+Napi::Value BindVector2Angle(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Angle(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindSwapScreenBuffer(const Napi::CallbackInfo& info) {
-  SwapScreenBuffer(
-    
+Napi::Value BindVector2Scale(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Scale(
+       Vector2FromValue(info, 0),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindPollInputEvents(const Napi::CallbackInfo& info) {
-  PollInputEvents(
-    
+Napi::Value BindVector2Multiply(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Multiply(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindWaitTime(const Napi::CallbackInfo& info) {
-  WaitTime(
-     floatFromValue(info, 0)
+Napi::Value BindVector2Negate(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Negate(
+       Vector2FromValue(info, 0)
+    )
   );
 }
 
-void BindShowCursor(const Napi::CallbackInfo& info) {
-  ShowCursor(
-    
+Napi::Value BindVector2Divide(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Divide(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindHideCursor(const Napi::CallbackInfo& info) {
-  HideCursor(
-    
+Napi::Value BindVector2Normalize(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Normalize(
+       Vector2FromValue(info, 0)
+    )
   );
 }
 
-void BindEnableCursor(const Napi::CallbackInfo& info) {
-  EnableCursor(
-    
+Napi::Value BindVector2Lerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Lerp(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2),
+       floatFromValue(info, 4)
+    )
   );
 }
 
-void BindDisableCursor(const Napi::CallbackInfo& info) {
-  DisableCursor(
-    
+Napi::Value BindVector2Reflect(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Reflect(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2)
+    )
   );
 }
 
-void BindClearBackground(const Napi::CallbackInfo& info) {
-  ClearBackground(
-     ColorFromValue(info, 0)
+Napi::Value BindVector2Rotate(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2Rotate(
+       Vector2FromValue(info, 0),
+       floatFromValue(info, 2)
+    )
   );
 }
 
-void BindBeginDrawing(const Napi::CallbackInfo& info) {
-  BeginDrawing(
-    
+Napi::Value BindVector2MoveTowards(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector2MoveTowards(
+       Vector2FromValue(info, 0),
+       Vector2FromValue(info, 2),
+       floatFromValue(info, 4)
+    )
   );
 }
 
-void BindEndDrawing(const Napi::CallbackInfo& info) {
-  EndDrawing(
-    
+Napi::Value BindVector3Zero(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Zero(
+      
+    )
   );
 }
 
-void BindBeginMode2D(const Napi::CallbackInfo& info) {
-  BeginMode2D(
-     Camera2DFromValue(info, 0)
+Napi::Value BindVector3One(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3One(
+      
+    )
   );
 }
 
-void BindEndMode2D(const Napi::CallbackInfo& info) {
-  EndMode2D(
-    
+Napi::Value BindVector3Add(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Add(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
   );
 }
 
-void BindBeginMode3D(const Napi::CallbackInfo& info) {
-  BeginMode3D(
-     Camera3DFromValue(info, 0)
+Napi::Value BindVector3AddValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3AddValue(
+       Vector3FromValue(info, 0),
+       floatFromValue(info, 3)
+    )
   );
 }
 
-void BindEndMode3D(const Napi::CallbackInfo& info) {
-  EndMode3D(
-    
+Napi::Value BindVector3Subtract(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Subtract(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
   );
 }
 
-void BindBeginTextureMode(const Napi::CallbackInfo& info) {
-  BeginTextureMode(
+Napi::Value BindVector3SubtractValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3SubtractValue(
+       Vector3FromValue(info, 0),
+       floatFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Scale(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Scale(
+       Vector3FromValue(info, 0),
+       floatFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Multiply(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Multiply(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3CrossProduct(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3CrossProduct(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Perpendicular(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Perpendicular(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindVector3Length(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Length(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindVector3LengthSqr(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3LengthSqr(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindVector3DotProduct(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3DotProduct(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Distance(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Distance(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Angle(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Angle(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Negate(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Negate(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindVector3Divide(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Divide(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Normalize(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Normalize(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindVector3Transform(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Transform(
+       Vector3FromValue(info, 0),
+       MatrixFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3RotateByQuaternion(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3RotateByQuaternion(
+       Vector3FromValue(info, 0),
+       Vector4FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Lerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Lerp(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3),
+       floatFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindVector3Reflect(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Reflect(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Min(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Min(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Max(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Max(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindVector3Barycenter(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Barycenter(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3),
+       Vector3FromValue(info, 6),
+       Vector3FromValue(info, 9)
+    )
+  );
+}
+
+Napi::Value BindVector3Unproject(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    Vector3Unproject(
+       Vector3FromValue(info, 0),
+       MatrixFromValue(info, 3),
+       MatrixFromValue(info, 19)
+    )
+  );
+}
+
+Napi::Value BindMatrixDeterminant(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixDeterminant(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixTrace(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixTrace(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixTranspose(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixTranspose(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixInvert(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixInvert(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixNormalize(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixNormalize(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixIdentity(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixIdentity(
+      
+    )
+  );
+}
+
+Napi::Value BindMatrixAdd(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixAdd(
+       MatrixFromValue(info, 0),
+       MatrixFromValue(info, 16)
+    )
+  );
+}
+
+Napi::Value BindMatrixSubtract(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixSubtract(
+       MatrixFromValue(info, 0),
+       MatrixFromValue(info, 16)
+    )
+  );
+}
+
+Napi::Value BindMatrixMultiply(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixMultiply(
+       MatrixFromValue(info, 0),
+       MatrixFromValue(info, 16)
+    )
+  );
+}
+
+Napi::Value BindMatrixTranslate(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixTranslate(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotate(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotate(
+       Vector3FromValue(info, 0),
+       floatFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotateX(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotateX(
+       floatFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotateY(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotateY(
+       floatFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotateZ(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotateZ(
+       floatFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotateXYZ(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotateXYZ(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixRotateZYX(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixRotateZYX(
+       Vector3FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindMatrixScale(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixScale(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindMatrixFrustum(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixFrustum(
+       doubleFromValue(info, 0),
+       doubleFromValue(info, 1),
+       doubleFromValue(info, 2),
+       doubleFromValue(info, 3),
+       doubleFromValue(info, 4),
+       doubleFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindMatrixPerspective(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixPerspective(
+       doubleFromValue(info, 0),
+       doubleFromValue(info, 1),
+       doubleFromValue(info, 2),
+       doubleFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindMatrixOrtho(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixOrtho(
+       doubleFromValue(info, 0),
+       doubleFromValue(info, 1),
+       doubleFromValue(info, 2),
+       doubleFromValue(info, 3),
+       doubleFromValue(info, 4),
+       doubleFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindMatrixLookAt(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    MatrixLookAt(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3),
+       Vector3FromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindQuaternionAdd(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionAdd(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionAddValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionAddValue(
+       Vector4FromValue(info, 0),
+       floatFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionSubtract(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionSubtract(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionSubtractValue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionSubtractValue(
+       Vector4FromValue(info, 0),
+       floatFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionIdentity(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionIdentity(
+      
+    )
+  );
+}
+
+Napi::Value BindQuaternionLength(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionLength(
+       Vector4FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionNormalize(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionNormalize(
+       Vector4FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionInvert(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionInvert(
+       Vector4FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionMultiply(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionMultiply(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionScale(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionScale(
+       Vector4FromValue(info, 0),
+       floatFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionDivide(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionDivide(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindQuaternionLerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionLerp(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindQuaternionNlerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionNlerp(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindQuaternionSlerp(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionSlerp(
+       Vector4FromValue(info, 0),
+       Vector4FromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindQuaternionFromVector3ToVector3(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionFromVector3ToVector3(
+       Vector3FromValue(info, 0),
+       Vector3FromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindQuaternionFromMatrix(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionFromMatrix(
+       MatrixFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionToMatrix(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionToMatrix(
+       Vector4FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionFromAxisAngle(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionFromAxisAngle(
+       Vector3FromValue(info, 0),
+       floatFromValue(info, 3)
+    )
+  );
+}
+
+Napi::Value BindQuaternionFromEuler(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionFromEuler(
+       floatFromValue(info, 0),
+       floatFromValue(info, 1),
+       floatFromValue(info, 2)
+    )
+  );
+}
+
+Napi::Value BindQuaternionToEuler(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionToEuler(
+       Vector4FromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindQuaternionTransform(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    QuaternionTransform(
+       Vector4FromValue(info, 0),
+       MatrixFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindGuiIsLocked(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiIsLocked(
+      
+    )
+  );
+}
+
+Napi::Value BindGuiGetState(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGetState(
+      
+    )
+  );
+}
+
+Napi::Value BindGuiGetFont(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGetFont(
+      
+    )
+  );
+}
+
+Napi::Value BindGuiGetStyle(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGetStyle(
+       intFromValue(info, 0),
+       intFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindGuiWindowBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiWindowBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiScrollPanel(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiScrollPanel(
+       RectangleFromValue(info, 0),
+       RectangleFromValue(info, 4),
+       (Vector2 *) pointerFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiButton(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiButton(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiLabelButton(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiLabelButton(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiToggle(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiToggle(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       boolFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindGuiToggleGroup(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiToggleGroup(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       intFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindGuiCheckBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiCheckBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       boolFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindGuiComboBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiComboBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       intFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindGuiDropdownBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiDropdownBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (int *) pointerFromValue(info, 5),
+       boolFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiSpinner(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiSpinner(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (int *) pointerFromValue(info, 5),
+       intFromValue(info, 6),
+       intFromValue(info, 7),
+       boolFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiValueBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiValueBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (int *) pointerFromValue(info, 5),
+       intFromValue(info, 6),
+       intFromValue(info, 7),
+       boolFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiTextBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiTextBox(
+       RectangleFromValue(info, 0),
+       (char *) pointerFromValue(info, 4),
+       intFromValue(info, 5),
+       boolFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiTextBoxMulti(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiTextBoxMulti(
+       RectangleFromValue(info, 0),
+       (char *) pointerFromValue(info, 4),
+       intFromValue(info, 5),
+       boolFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiSlider(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiSlider(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (const char *) stringFromValue(info, 5),
+       floatFromValue(info, 6),
+       floatFromValue(info, 7),
+       floatFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiSliderBar(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiSliderBar(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (const char *) stringFromValue(info, 5),
+       floatFromValue(info, 6),
+       floatFromValue(info, 7),
+       floatFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiProgressBar(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiProgressBar(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (const char *) stringFromValue(info, 5),
+       floatFromValue(info, 6),
+       floatFromValue(info, 7),
+       floatFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiScrollBar(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiScrollBar(
+       RectangleFromValue(info, 0),
+       intFromValue(info, 4),
+       intFromValue(info, 5),
+       intFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiGrid(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGrid(
+       RectangleFromValue(info, 0),
+       floatFromValue(info, 4),
+       intFromValue(info, 5)
+    )
+  );
+}
+
+Napi::Value BindGuiListView(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiListView(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (int *) pointerFromValue(info, 5),
+       intFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiListViewEx(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiListViewEx(
+       RectangleFromValue(info, 0),
+       (const char **) pointerFromValue(info, 4),
+       intFromValue(info, 5),
+       (int *) pointerFromValue(info, 6),
+       (int *) pointerFromValue(info, 7),
+       intFromValue(info, 8)
+    )
+  );
+}
+
+Napi::Value BindGuiMessageBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiMessageBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (const char *) stringFromValue(info, 5),
+       (const char *) stringFromValue(info, 6)
+    )
+  );
+}
+
+Napi::Value BindGuiTextInputBox(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiTextInputBox(
+       RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4),
+       (const char *) stringFromValue(info, 5),
+       (const char *) stringFromValue(info, 6),
+       (char *) pointerFromValue(info, 7)
+    )
+  );
+}
+
+Napi::Value BindGuiColorPicker(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiColorPicker(
+       RectangleFromValue(info, 0),
+       ColorFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiColorPanel(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiColorPanel(
+       RectangleFromValue(info, 0),
+       ColorFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiColorBarAlpha(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiColorBarAlpha(
+       RectangleFromValue(info, 0),
+       floatFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiColorBarHue(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiColorBarHue(
+       RectangleFromValue(info, 0),
+       floatFromValue(info, 4)
+    )
+  );
+}
+
+Napi::Value BindGuiIconText(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiIconText(
+       intFromValue(info, 0),
+       (const char *) stringFromValue(info, 1)
+    )
+  );
+}
+
+Napi::Value BindGuiGetIcons(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGetIcons(
+      
+    )
+  );
+}
+
+Napi::Value BindGuiGetIconData(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiGetIconData(
+       intFromValue(info, 0)
+    )
+  );
+}
+
+Napi::Value BindGuiCheckIconPixel(const Napi::CallbackInfo& info) {
+  return ToValue(info.Env(),
+    GuiCheckIconPixel(
+       intFromValue(info, 0),
+       intFromValue(info, 1),
+       intFromValue(info, 2)
+    )
+  );
+}
+
+void BindInitWindow(const Napi::CallbackInfo& info) {
+  InitWindow(
+     intFromValue(info, 0),
+       intFromValue(info, 1),
+       (const char *) stringFromValue(info, 2)
+  );
+}
+
+void BindCloseWindow(const Napi::CallbackInfo& info) {
+  CloseWindow(
+    
+  );
+}
+
+void BindSetWindowState(const Napi::CallbackInfo& info) {
+  SetWindowState(
+     unsignedintFromValue(info, 0)
+  );
+}
+
+void BindClearWindowState(const Napi::CallbackInfo& info) {
+  ClearWindowState(
+     unsignedintFromValue(info, 0)
+  );
+}
+
+void BindToggleFullscreen(const Napi::CallbackInfo& info) {
+  ToggleFullscreen(
+    
+  );
+}
+
+void BindMaximizeWindow(const Napi::CallbackInfo& info) {
+  MaximizeWindow(
+    
+  );
+}
+
+void BindMinimizeWindow(const Napi::CallbackInfo& info) {
+  MinimizeWindow(
+    
+  );
+}
+
+void BindRestoreWindow(const Napi::CallbackInfo& info) {
+  RestoreWindow(
+    
+  );
+}
+
+void BindSetWindowIcon(const Napi::CallbackInfo& info) {
+  SetWindowIcon(
+     ImageFromValue(info, 0)
+  );
+}
+
+void BindSetWindowTitle(const Napi::CallbackInfo& info) {
+  SetWindowTitle(
+     (const char *) stringFromValue(info, 0)
+  );
+}
+
+void BindSetWindowPosition(const Napi::CallbackInfo& info) {
+  SetWindowPosition(
+     intFromValue(info, 0),
+       intFromValue(info, 1)
+  );
+}
+
+void BindSetWindowMonitor(const Napi::CallbackInfo& info) {
+  SetWindowMonitor(
+     intFromValue(info, 0)
+  );
+}
+
+void BindSetWindowMinSize(const Napi::CallbackInfo& info) {
+  SetWindowMinSize(
+     intFromValue(info, 0),
+       intFromValue(info, 1)
+  );
+}
+
+void BindSetWindowSize(const Napi::CallbackInfo& info) {
+  SetWindowSize(
+     intFromValue(info, 0),
+       intFromValue(info, 1)
+  );
+}
+
+void BindSetClipboardText(const Napi::CallbackInfo& info) {
+  SetClipboardText(
+     (const char *) stringFromValue(info, 0)
+  );
+}
+
+void BindSwapScreenBuffer(const Napi::CallbackInfo& info) {
+  SwapScreenBuffer(
+    
+  );
+}
+
+void BindPollInputEvents(const Napi::CallbackInfo& info) {
+  PollInputEvents(
+    
+  );
+}
+
+void BindWaitTime(const Napi::CallbackInfo& info) {
+  WaitTime(
+     floatFromValue(info, 0)
+  );
+}
+
+void BindShowCursor(const Napi::CallbackInfo& info) {
+  ShowCursor(
+    
+  );
+}
+
+void BindHideCursor(const Napi::CallbackInfo& info) {
+  HideCursor(
+    
+  );
+}
+
+void BindEnableCursor(const Napi::CallbackInfo& info) {
+  EnableCursor(
+    
+  );
+}
+
+void BindDisableCursor(const Napi::CallbackInfo& info) {
+  DisableCursor(
+    
+  );
+}
+
+void BindClearBackground(const Napi::CallbackInfo& info) {
+  ClearBackground(
+     ColorFromValue(info, 0)
+  );
+}
+
+void BindBeginDrawing(const Napi::CallbackInfo& info) {
+  BeginDrawing(
+    
+  );
+}
+
+void BindEndDrawing(const Napi::CallbackInfo& info) {
+  EndDrawing(
+    
+  );
+}
+
+void BindBeginMode2D(const Napi::CallbackInfo& info) {
+  BeginMode2D(
+     Camera2DFromValue(info, 0)
+  );
+}
+
+void BindEndMode2D(const Napi::CallbackInfo& info) {
+  EndMode2D(
+    
+  );
+}
+
+void BindBeginMode3D(const Napi::CallbackInfo& info) {
+  BeginMode3D(
+     Camera3DFromValue(info, 0)
+  );
+}
+
+void BindEndMode3D(const Napi::CallbackInfo& info) {
+  EndMode3D(
+    
+  );
+}
+
+void BindBeginTextureMode(const Napi::CallbackInfo& info) {
+  BeginTextureMode(
      RenderTexture2DFromValue(info, 0)
   );
 }
@@ -4554,6 +5663,157 @@ void BindSetAudioStreamBufferSizeDefault(const Napi::CallbackInfo& info) {
      intFromValue(info, 0)
   );
 }
+
+void BindVector3OrthoNormalize(const Napi::CallbackInfo& info) {
+  Vector3OrthoNormalize(
+     (Vector3 *) pointerFromValue(info, 0),
+       (Vector3 *) pointerFromValue(info, 1)
+  );
+}
+
+void BindQuaternionToAxisAngle(const Napi::CallbackInfo& info) {
+  QuaternionToAxisAngle(
+     Vector4FromValue(info, 0),
+       (Vector3 *) pointerFromValue(info, 1),
+       (float *) pointerFromValue(info, 2)
+  );
+}
+
+void BindGuiEnable(const Napi::CallbackInfo& info) {
+  GuiEnable(
+    
+  );
+}
+
+void BindGuiDisable(const Napi::CallbackInfo& info) {
+  GuiDisable(
+    
+  );
+}
+
+void BindGuiLock(const Napi::CallbackInfo& info) {
+  GuiLock(
+    
+  );
+}
+
+void BindGuiUnlock(const Napi::CallbackInfo& info) {
+  GuiUnlock(
+    
+  );
+}
+
+void BindGuiFade(const Napi::CallbackInfo& info) {
+  GuiFade(
+     floatFromValue(info, 0)
+  );
+}
+
+void BindGuiSetState(const Napi::CallbackInfo& info) {
+  GuiSetState(
+     intFromValue(info, 0)
+  );
+}
+
+void BindGuiSetFont(const Napi::CallbackInfo& info) {
+  GuiSetFont(
+     FontFromValue(info, 0)
+  );
+}
+
+void BindGuiSetStyle(const Napi::CallbackInfo& info) {
+  GuiSetStyle(
+     intFromValue(info, 0),
+       intFromValue(info, 1),
+       intFromValue(info, 2)
+  );
+}
+
+void BindGuiGroupBox(const Napi::CallbackInfo& info) {
+  GuiGroupBox(
+     RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+  );
+}
+
+void BindGuiLine(const Napi::CallbackInfo& info) {
+  GuiLine(
+     RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+  );
+}
+
+void BindGuiPanel(const Napi::CallbackInfo& info) {
+  GuiPanel(
+     RectangleFromValue(info, 0)
+  );
+}
+
+void BindGuiLabel(const Napi::CallbackInfo& info) {
+  GuiLabel(
+     RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+  );
+}
+
+void BindGuiStatusBar(const Napi::CallbackInfo& info) {
+  GuiStatusBar(
+     RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+  );
+}
+
+void BindGuiDummyRec(const Napi::CallbackInfo& info) {
+  GuiDummyRec(
+     RectangleFromValue(info, 0),
+       (const char *) stringFromValue(info, 4)
+  );
+}
+
+void BindGuiLoadStyle(const Napi::CallbackInfo& info) {
+  GuiLoadStyle(
+     (const char *) stringFromValue(info, 0)
+  );
+}
+
+void BindGuiLoadStyleDefault(const Napi::CallbackInfo& info) {
+  GuiLoadStyleDefault(
+    
+  );
+}
+
+void BindGuiDrawIcon(const Napi::CallbackInfo& info) {
+  GuiDrawIcon(
+     intFromValue(info, 0),
+       intFromValue(info, 1),
+       intFromValue(info, 2),
+       intFromValue(info, 3),
+       ColorFromValue(info, 4)
+  );
+}
+
+void BindGuiSetIconData(const Napi::CallbackInfo& info) {
+  GuiSetIconData(
+     intFromValue(info, 0),
+       (unsigned int *) pointerFromValue(info, 1)
+  );
+}
+
+void BindGuiSetIconPixel(const Napi::CallbackInfo& info) {
+  GuiSetIconPixel(
+     intFromValue(info, 0),
+       intFromValue(info, 1),
+       intFromValue(info, 2)
+  );
+}
+
+void BindGuiClearIconPixel(const Napi::CallbackInfo& info) {
+  GuiClearIconPixel(
+     intFromValue(info, 0),
+       intFromValue(info, 1),
+       intFromValue(info, 2)
+  );
+}
 // By-Reference function bindings
 
 Napi::Value BindUpdateCamera(const Napi::CallbackInfo& info) {
@@ -5526,6 +6786,154 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
   exports.Set("BindEaseElasticIn", Napi::Function::New(env, BindEaseElasticIn));
   exports.Set("BindEaseElasticOut", Napi::Function::New(env, BindEaseElasticOut));
   exports.Set("BindEaseElasticInOut", Napi::Function::New(env, BindEaseElasticInOut));
+  exports.Set("BindClamp", Napi::Function::New(env, BindClamp));
+  exports.Set("BindLerp", Napi::Function::New(env, BindLerp));
+  exports.Set("BindNormalize", Napi::Function::New(env, BindNormalize));
+  exports.Set("BindRemap", Napi::Function::New(env, BindRemap));
+  exports.Set("BindVector2Zero", Napi::Function::New(env, BindVector2Zero));
+  exports.Set("BindVector2One", Napi::Function::New(env, BindVector2One));
+  exports.Set("BindVector2Add", Napi::Function::New(env, BindVector2Add));
+  exports.Set("BindVector2AddValue", Napi::Function::New(env, BindVector2AddValue));
+  exports.Set("BindVector2Subtract", Napi::Function::New(env, BindVector2Subtract));
+  exports.Set("BindVector2SubtractValue", Napi::Function::New(env, BindVector2SubtractValue));
+  exports.Set("BindVector2Length", Napi::Function::New(env, BindVector2Length));
+  exports.Set("BindVector2LengthSqr", Napi::Function::New(env, BindVector2LengthSqr));
+  exports.Set("BindVector2DotProduct", Napi::Function::New(env, BindVector2DotProduct));
+  exports.Set("BindVector2Distance", Napi::Function::New(env, BindVector2Distance));
+  exports.Set("BindVector2Angle", Napi::Function::New(env, BindVector2Angle));
+  exports.Set("BindVector2Scale", Napi::Function::New(env, BindVector2Scale));
+  exports.Set("BindVector2Multiply", Napi::Function::New(env, BindVector2Multiply));
+  exports.Set("BindVector2Negate", Napi::Function::New(env, BindVector2Negate));
+  exports.Set("BindVector2Divide", Napi::Function::New(env, BindVector2Divide));
+  exports.Set("BindVector2Normalize", Napi::Function::New(env, BindVector2Normalize));
+  exports.Set("BindVector2Lerp", Napi::Function::New(env, BindVector2Lerp));
+  exports.Set("BindVector2Reflect", Napi::Function::New(env, BindVector2Reflect));
+  exports.Set("BindVector2Rotate", Napi::Function::New(env, BindVector2Rotate));
+  exports.Set("BindVector2MoveTowards", Napi::Function::New(env, BindVector2MoveTowards));
+  exports.Set("BindVector3Zero", Napi::Function::New(env, BindVector3Zero));
+  exports.Set("BindVector3One", Napi::Function::New(env, BindVector3One));
+  exports.Set("BindVector3Add", Napi::Function::New(env, BindVector3Add));
+  exports.Set("BindVector3AddValue", Napi::Function::New(env, BindVector3AddValue));
+  exports.Set("BindVector3Subtract", Napi::Function::New(env, BindVector3Subtract));
+  exports.Set("BindVector3SubtractValue", Napi::Function::New(env, BindVector3SubtractValue));
+  exports.Set("BindVector3Scale", Napi::Function::New(env, BindVector3Scale));
+  exports.Set("BindVector3Multiply", Napi::Function::New(env, BindVector3Multiply));
+  exports.Set("BindVector3CrossProduct", Napi::Function::New(env, BindVector3CrossProduct));
+  exports.Set("BindVector3Perpendicular", Napi::Function::New(env, BindVector3Perpendicular));
+  exports.Set("BindVector3Length", Napi::Function::New(env, BindVector3Length));
+  exports.Set("BindVector3LengthSqr", Napi::Function::New(env, BindVector3LengthSqr));
+  exports.Set("BindVector3DotProduct", Napi::Function::New(env, BindVector3DotProduct));
+  exports.Set("BindVector3Distance", Napi::Function::New(env, BindVector3Distance));
+  exports.Set("BindVector3Angle", Napi::Function::New(env, BindVector3Angle));
+  exports.Set("BindVector3Negate", Napi::Function::New(env, BindVector3Negate));
+  exports.Set("BindVector3Divide", Napi::Function::New(env, BindVector3Divide));
+  exports.Set("BindVector3Normalize", Napi::Function::New(env, BindVector3Normalize));
+  exports.Set("BindVector3OrthoNormalize", Napi::Function::New(env, BindVector3OrthoNormalize));
+  exports.Set("BindVector3Transform", Napi::Function::New(env, BindVector3Transform));
+  exports.Set("BindVector3RotateByQuaternion", Napi::Function::New(env, BindVector3RotateByQuaternion));
+  exports.Set("BindVector3Lerp", Napi::Function::New(env, BindVector3Lerp));
+  exports.Set("BindVector3Reflect", Napi::Function::New(env, BindVector3Reflect));
+  exports.Set("BindVector3Min", Napi::Function::New(env, BindVector3Min));
+  exports.Set("BindVector3Max", Napi::Function::New(env, BindVector3Max));
+  exports.Set("BindVector3Barycenter", Napi::Function::New(env, BindVector3Barycenter));
+  exports.Set("BindVector3Unproject", Napi::Function::New(env, BindVector3Unproject));
+  exports.Set("BindMatrixDeterminant", Napi::Function::New(env, BindMatrixDeterminant));
+  exports.Set("BindMatrixTrace", Napi::Function::New(env, BindMatrixTrace));
+  exports.Set("BindMatrixTranspose", Napi::Function::New(env, BindMatrixTranspose));
+  exports.Set("BindMatrixInvert", Napi::Function::New(env, BindMatrixInvert));
+  exports.Set("BindMatrixNormalize", Napi::Function::New(env, BindMatrixNormalize));
+  exports.Set("BindMatrixIdentity", Napi::Function::New(env, BindMatrixIdentity));
+  exports.Set("BindMatrixAdd", Napi::Function::New(env, BindMatrixAdd));
+  exports.Set("BindMatrixSubtract", Napi::Function::New(env, BindMatrixSubtract));
+  exports.Set("BindMatrixMultiply", Napi::Function::New(env, BindMatrixMultiply));
+  exports.Set("BindMatrixTranslate", Napi::Function::New(env, BindMatrixTranslate));
+  exports.Set("BindMatrixRotate", Napi::Function::New(env, BindMatrixRotate));
+  exports.Set("BindMatrixRotateX", Napi::Function::New(env, BindMatrixRotateX));
+  exports.Set("BindMatrixRotateY", Napi::Function::New(env, BindMatrixRotateY));
+  exports.Set("BindMatrixRotateZ", Napi::Function::New(env, BindMatrixRotateZ));
+  exports.Set("BindMatrixRotateXYZ", Napi::Function::New(env, BindMatrixRotateXYZ));
+  exports.Set("BindMatrixRotateZYX", Napi::Function::New(env, BindMatrixRotateZYX));
+  exports.Set("BindMatrixScale", Napi::Function::New(env, BindMatrixScale));
+  exports.Set("BindMatrixFrustum", Napi::Function::New(env, BindMatrixFrustum));
+  exports.Set("BindMatrixPerspective", Napi::Function::New(env, BindMatrixPerspective));
+  exports.Set("BindMatrixOrtho", Napi::Function::New(env, BindMatrixOrtho));
+  exports.Set("BindMatrixLookAt", Napi::Function::New(env, BindMatrixLookAt));
+  exports.Set("BindQuaternionAdd", Napi::Function::New(env, BindQuaternionAdd));
+  exports.Set("BindQuaternionAddValue", Napi::Function::New(env, BindQuaternionAddValue));
+  exports.Set("BindQuaternionSubtract", Napi::Function::New(env, BindQuaternionSubtract));
+  exports.Set("BindQuaternionSubtractValue", Napi::Function::New(env, BindQuaternionSubtractValue));
+  exports.Set("BindQuaternionIdentity", Napi::Function::New(env, BindQuaternionIdentity));
+  exports.Set("BindQuaternionLength", Napi::Function::New(env, BindQuaternionLength));
+  exports.Set("BindQuaternionNormalize", Napi::Function::New(env, BindQuaternionNormalize));
+  exports.Set("BindQuaternionInvert", Napi::Function::New(env, BindQuaternionInvert));
+  exports.Set("BindQuaternionMultiply", Napi::Function::New(env, BindQuaternionMultiply));
+  exports.Set("BindQuaternionScale", Napi::Function::New(env, BindQuaternionScale));
+  exports.Set("BindQuaternionDivide", Napi::Function::New(env, BindQuaternionDivide));
+  exports.Set("BindQuaternionLerp", Napi::Function::New(env, BindQuaternionLerp));
+  exports.Set("BindQuaternionNlerp", Napi::Function::New(env, BindQuaternionNlerp));
+  exports.Set("BindQuaternionSlerp", Napi::Function::New(env, BindQuaternionSlerp));
+  exports.Set("BindQuaternionFromVector3ToVector3", Napi::Function::New(env, BindQuaternionFromVector3ToVector3));
+  exports.Set("BindQuaternionFromMatrix", Napi::Function::New(env, BindQuaternionFromMatrix));
+  exports.Set("BindQuaternionToMatrix", Napi::Function::New(env, BindQuaternionToMatrix));
+  exports.Set("BindQuaternionFromAxisAngle", Napi::Function::New(env, BindQuaternionFromAxisAngle));
+  exports.Set("BindQuaternionToAxisAngle", Napi::Function::New(env, BindQuaternionToAxisAngle));
+  exports.Set("BindQuaternionFromEuler", Napi::Function::New(env, BindQuaternionFromEuler));
+  exports.Set("BindQuaternionToEuler", Napi::Function::New(env, BindQuaternionToEuler));
+  exports.Set("BindQuaternionTransform", Napi::Function::New(env, BindQuaternionTransform));
+  exports.Set("BindGuiEnable", Napi::Function::New(env, BindGuiEnable));
+  exports.Set("BindGuiDisable", Napi::Function::New(env, BindGuiDisable));
+  exports.Set("BindGuiLock", Napi::Function::New(env, BindGuiLock));
+  exports.Set("BindGuiUnlock", Napi::Function::New(env, BindGuiUnlock));
+  exports.Set("BindGuiIsLocked", Napi::Function::New(env, BindGuiIsLocked));
+  exports.Set("BindGuiFade", Napi::Function::New(env, BindGuiFade));
+  exports.Set("BindGuiSetState", Napi::Function::New(env, BindGuiSetState));
+  exports.Set("BindGuiGetState", Napi::Function::New(env, BindGuiGetState));
+  exports.Set("BindGuiSetFont", Napi::Function::New(env, BindGuiSetFont));
+  exports.Set("BindGuiGetFont", Napi::Function::New(env, BindGuiGetFont));
+  exports.Set("BindGuiSetStyle", Napi::Function::New(env, BindGuiSetStyle));
+  exports.Set("BindGuiGetStyle", Napi::Function::New(env, BindGuiGetStyle));
+  exports.Set("BindGuiWindowBox", Napi::Function::New(env, BindGuiWindowBox));
+  exports.Set("BindGuiGroupBox", Napi::Function::New(env, BindGuiGroupBox));
+  exports.Set("BindGuiLine", Napi::Function::New(env, BindGuiLine));
+  exports.Set("BindGuiPanel", Napi::Function::New(env, BindGuiPanel));
+  exports.Set("BindGuiScrollPanel", Napi::Function::New(env, BindGuiScrollPanel));
+  exports.Set("BindGuiLabel", Napi::Function::New(env, BindGuiLabel));
+  exports.Set("BindGuiButton", Napi::Function::New(env, BindGuiButton));
+  exports.Set("BindGuiLabelButton", Napi::Function::New(env, BindGuiLabelButton));
+  exports.Set("BindGuiToggle", Napi::Function::New(env, BindGuiToggle));
+  exports.Set("BindGuiToggleGroup", Napi::Function::New(env, BindGuiToggleGroup));
+  exports.Set("BindGuiCheckBox", Napi::Function::New(env, BindGuiCheckBox));
+  exports.Set("BindGuiComboBox", Napi::Function::New(env, BindGuiComboBox));
+  exports.Set("BindGuiDropdownBox", Napi::Function::New(env, BindGuiDropdownBox));
+  exports.Set("BindGuiSpinner", Napi::Function::New(env, BindGuiSpinner));
+  exports.Set("BindGuiValueBox", Napi::Function::New(env, BindGuiValueBox));
+  exports.Set("BindGuiTextBox", Napi::Function::New(env, BindGuiTextBox));
+  exports.Set("BindGuiTextBoxMulti", Napi::Function::New(env, BindGuiTextBoxMulti));
+  exports.Set("BindGuiSlider", Napi::Function::New(env, BindGuiSlider));
+  exports.Set("BindGuiSliderBar", Napi::Function::New(env, BindGuiSliderBar));
+  exports.Set("BindGuiProgressBar", Napi::Function::New(env, BindGuiProgressBar));
+  exports.Set("BindGuiStatusBar", Napi::Function::New(env, BindGuiStatusBar));
+  exports.Set("BindGuiDummyRec", Napi::Function::New(env, BindGuiDummyRec));
+  exports.Set("BindGuiScrollBar", Napi::Function::New(env, BindGuiScrollBar));
+  exports.Set("BindGuiGrid", Napi::Function::New(env, BindGuiGrid));
+  exports.Set("BindGuiListView", Napi::Function::New(env, BindGuiListView));
+  exports.Set("BindGuiListViewEx", Napi::Function::New(env, BindGuiListViewEx));
+  exports.Set("BindGuiMessageBox", Napi::Function::New(env, BindGuiMessageBox));
+  exports.Set("BindGuiTextInputBox", Napi::Function::New(env, BindGuiTextInputBox));
+  exports.Set("BindGuiColorPicker", Napi::Function::New(env, BindGuiColorPicker));
+  exports.Set("BindGuiColorPanel", Napi::Function::New(env, BindGuiColorPanel));
+  exports.Set("BindGuiColorBarAlpha", Napi::Function::New(env, BindGuiColorBarAlpha));
+  exports.Set("BindGuiColorBarHue", Napi::Function::New(env, BindGuiColorBarHue));
+  exports.Set("BindGuiLoadStyle", Napi::Function::New(env, BindGuiLoadStyle));
+  exports.Set("BindGuiLoadStyleDefault", Napi::Function::New(env, BindGuiLoadStyleDefault));
+  exports.Set("BindGuiIconText", Napi::Function::New(env, BindGuiIconText));
+  exports.Set("BindGuiDrawIcon", Napi::Function::New(env, BindGuiDrawIcon));
+  exports.Set("BindGuiGetIcons", Napi::Function::New(env, BindGuiGetIcons));
+  exports.Set("BindGuiGetIconData", Napi::Function::New(env, BindGuiGetIconData));
+  exports.Set("BindGuiSetIconData", Napi::Function::New(env, BindGuiSetIconData));
+  exports.Set("BindGuiSetIconPixel", Napi::Function::New(env, BindGuiSetIconPixel));
+  exports.Set("BindGuiClearIconPixel", Napi::Function::New(env, BindGuiClearIconPixel));
+  exports.Set("BindGuiCheckIconPixel", Napi::Function::New(env, BindGuiCheckIconPixel));
 
   exports.Set("BindSetShaderFloat", Napi::Function::New(env, BindSetShaderFloat));
   exports.Set("BindSetShaderInt", Napi::Function::New(env, BindSetShaderInt));
diff --git a/src/generated/node-raylib.d.ts b/src/generated/node-raylib.d.ts
index acb012f..675df3c 100644
--- a/src/generated/node-raylib.d.ts
+++ b/src/generated/node-raylib.d.ts
@@ -31,35 +31,35 @@ declare module "raylib" {
   export interface Matrix {
     /** Matrix first row (4 components) */
     m0: number
-    /** Matrix second row (4 components) */
-    m1: number
-    /** Matrix third row (4 components) */
-    m2: number
-    /** Matrix fourth row (4 components) */
-    m3: number
     /** Matrix first row (4 components) */
     m4: number
-    /** Matrix second row (4 components) */
-    m5: number
-    /** Matrix third row (4 components) */
-    m6: number
-    /** Matrix fourth row (4 components) */
-    m7: number
     /** Matrix first row (4 components) */
     m8: number
-    /** Matrix second row (4 components) */
-    m9: number
-    /** Matrix third row (4 components) */
-    m10: number
-    /** Matrix fourth row (4 components) */
-    m11: number
     /** Matrix first row (4 components) */
     m12: number
     /** Matrix second row (4 components) */
+    m1: number
+    /** Matrix second row (4 components) */
+    m5: number
+    /** Matrix second row (4 components) */
+    m9: number
+    /** Matrix second row (4 components) */
     m13: number
     /** Matrix third row (4 components) */
+    m2: number
+    /** Matrix third row (4 components) */
+    m6: number
+    /** Matrix third row (4 components) */
+    m10: number
+    /** Matrix third row (4 components) */
     m14: number
     /** Matrix fourth row (4 components) */
+    m3: number
+    /** Matrix fourth row (4 components) */
+    m7: number
+    /** Matrix fourth row (4 components) */
+    m11: number
+    /** Matrix fourth row (4 components) */
     m15: number
   }
   /** Color, 4 components, R8G8B8A8 (32bit) */
@@ -242,7 +242,7 @@ declare module "raylib" {
     /** Material maps array (MAX_MATERIAL_MAPS) */
     maps: number
     /** Material generic parameters (if required) */
-    params: number
+    params: float[4]
   }
   /** Transform, vectex transformation data */
   export interface Transform {
@@ -380,28 +380,28 @@ declare module "raylib" {
     /** IPD (distance between pupils) in meters */
     interpupillaryDistance: number
     /** Lens distortion constant parameters */
-    lensDistortionValues: number
+    lensDistortionValues: float[4]
     /** Chromatic aberration correction parameters */
-    chromaAbCorrection: number
+    chromaAbCorrection: float[4]
   }
   /** VrStereoConfig, VR stereo rendering configuration for simulator */
   export interface VrStereoConfig {
     /** VR projection matrices (per eye) */
-    projection: Matrix
+    projection: Matrix[2]
     /** VR view offset matrices (per eye) */
-    viewOffset: Matrix
+    viewOffset: Matrix[2]
     /** VR left lens center */
-    leftLensCenter: number
+    leftLensCenter: float[2]
     /** VR right lens center */
-    rightLensCenter: number
+    rightLensCenter: float[2]
     /** VR left screen center */
-    leftScreenCenter: number
+    leftScreenCenter: float[2]
     /** VR right screen center */
-    rightScreenCenter: number
+    rightScreenCenter: float[2]
     /** VR distortion scale */
-    scale: number
+    scale: float[2]
     /** VR distortion scale in */
-    scaleIn: number
+    scaleIn: float[2]
   }
 
   /** RenderTexture, fbo for texture rendering */
@@ -449,7 +449,7 @@ declare module "raylib" {
   /** Check if one specific window flag is enabled */
   export function IsWindowState(flag: number): boolean
   
-  /** Set window configuration state using flags (only PLATFORM_DESKTOP) */
+  /** Set window configuration state using flags */
   export function SetWindowState(flags: number): void
   
   /** Clear window configuration state flags */
@@ -1349,7 +1349,7 @@ declare module "raylib" {
   /** Load font from file into GPU memory (VRAM) */
   export function LoadFont(fileName: string): Font
   
-  /** Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set */
+  /** Load font from file with extended parameters */
   export function LoadFontEx(fileName: string, fontSize: number, fontChars: number, glyphCount: number): Font
   
   /** Load font from Image (XNA style) */
@@ -1367,7 +1367,7 @@ declare module "raylib" {
   /** Unload font chars info data (RAM) */
   export function UnloadFontData(chars: number, glyphCount: number): void
   
-  /** Unload font from GPU memory (VRAM) */
+  /** Unload Font from GPU memory (VRAM) */
   export function UnloadFont(font: Font): void
   
   /** Draw current FPS */
@@ -1823,90 +1823,534 @@ declare module "raylib" {
   /** Default size for new audio streams */
   export function SetAudioStreamBufferSizeDefault(size: number): void
   
-  /** Easing: EaseLinearNone. */
+  /**  */
   export function EaseLinearNone(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseLinearIn. */
+  /**  */
   export function EaseLinearIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseLinearOut. */
+  /**  */
   export function EaseLinearOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseLinearInOut. */
+  /**  */
   export function EaseLinearInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseSineIn. */
+  /**  */
   export function EaseSineIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseSineOut. */
+  /**  */
   export function EaseSineOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseSineInOut. */
+  /**  */
   export function EaseSineInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCircIn. */
+  /**  */
   export function EaseCircIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCircOut. */
+  /**  */
   export function EaseCircOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCircInOut. */
+  /**  */
   export function EaseCircInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCubicIn. */
+  /**  */
   export function EaseCubicIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCubicOut. */
+  /**  */
   export function EaseCubicOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseCubicInOut. */
+  /**  */
   export function EaseCubicInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseQuadIn. */
+  /**  */
   export function EaseQuadIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseQuadOut. */
+  /**  */
   export function EaseQuadOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseQuadInOut. */
+  /**  */
   export function EaseQuadInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseExpoIn. */
+  /**  */
   export function EaseExpoIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseExpoOut. */
+  /**  */
   export function EaseExpoOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseExpoInOut. */
+  /**  */
   export function EaseExpoInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBackIn. */
+  /**  */
   export function EaseBackIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBackOut. */
+  /**  */
   export function EaseBackOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBackInOut. */
+  /**  */
   export function EaseBackInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBounceOut. */
+  /**  */
   export function EaseBounceOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBounceIn. */
+  /**  */
   export function EaseBounceIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseBounceInOut. */
+  /**  */
   export function EaseBounceInOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseElasticIn. */
+  /**  */
   export function EaseElasticIn(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseElasticOut. */
+  /**  */
   export function EaseElasticOut(t: number, b: number, c: number, d: number): number
   
-  /** Easing: EaseElasticInOut. */
+  /**  */
   export function EaseElasticInOut(t: number, b: number, c: number, d: number): number
   
+  /**  */
+  export function Clamp(value: number, min: number, max: number): number
+  
+  /**  */
+  export function Lerp(start: number, end: number, amount: number): number
+  
+  /**  */
+  export function Normalize(value: number, start: number, end: number): number
+  
+  /**  */
+  export function Remap(value: number, inputStart: number, inputEnd: number, outputStart: number, outputEnd: number): number
+  
+  /**  */
+  export function Vector2Zero(): Vector2
+  
+  /**  */
+  export function Vector2One(): Vector2
+  
+  /**  */
+  export function Vector2Add(v1: Vector2, v2: Vector2): Vector2
+  
+  /**  */
+  export function Vector2AddValue(v: Vector2, add: number): Vector2
+  
+  /**  */
+  export function Vector2Subtract(v1: Vector2, v2: Vector2): Vector2
+  
+  /**  */
+  export function Vector2SubtractValue(v: Vector2, sub: number): Vector2
+  
+  /**  */
+  export function Vector2Length(v: Vector2): number
+  
+  /**  */
+  export function Vector2LengthSqr(v: Vector2): number
+  
+  /**  */
+  export function Vector2DotProduct(v1: Vector2, v2: Vector2): number
+  
+  /**  */
+  export function Vector2Distance(v1: Vector2, v2: Vector2): number
+  
+  /**  */
+  export function Vector2Angle(v1: Vector2, v2: Vector2): number
+  
+  /**  */
+  export function Vector2Scale(v: Vector2, scale: number): Vector2
+  
+  /**  */
+  export function Vector2Multiply(v1: Vector2, v2: Vector2): Vector2
+  
+  /**  */
+  export function Vector2Negate(v: Vector2): Vector2
+  
+  /**  */
+  export function Vector2Divide(v1: Vector2, v2: Vector2): Vector2
+  
+  /**  */
+  export function Vector2Normalize(v: Vector2): Vector2
+  
+  /**  */
+  export function Vector2Lerp(v1: Vector2, v2: Vector2, amount: number): Vector2
+  
+  /**  */
+  export function Vector2Reflect(v: Vector2, normal: Vector2): Vector2
+  
+  /**  */
+  export function Vector2Rotate(v: Vector2, angle: number): Vector2
+  
+  /**  */
+  export function Vector2MoveTowards(v: Vector2, target: Vector2, maxDistance: number): Vector2
+  
+  /**  */
+  export function Vector3Zero(): Vector3
+  
+  /**  */
+  export function Vector3One(): Vector3
+  
+  /**  */
+  export function Vector3Add(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3AddValue(v: Vector3, add: number): Vector3
+  
+  /**  */
+  export function Vector3Subtract(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3SubtractValue(v: Vector3, sub: number): Vector3
+  
+  /**  */
+  export function Vector3Scale(v: Vector3, scalar: number): Vector3
+  
+  /**  */
+  export function Vector3Multiply(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3CrossProduct(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Perpendicular(v: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Length(v: Vector3): number
+  
+  /**  */
+  export function Vector3LengthSqr(v: Vector3): number
+  
+  /**  */
+  export function Vector3DotProduct(v1: Vector3, v2: Vector3): number
+  
+  /**  */
+  export function Vector3Distance(v1: Vector3, v2: Vector3): number
+  
+  /**  */
+  export function Vector3Angle(v1: Vector3, v2: Vector3): Vector2
+  
+  /**  */
+  export function Vector3Negate(v: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Divide(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Normalize(v: Vector3): Vector3
+  
+  /**  */
+  export function Vector3OrthoNormalize(v1: number, v2: number): void
+  
+  /**  */
+  export function Vector3Transform(v: Vector3, mat: Matrix): Vector3
+  
+  /**  */
+  export function Vector3RotateByQuaternion(v: Vector3, q: Quaternion): Vector3
+  
+  /**  */
+  export function Vector3Lerp(v1: Vector3, v2: Vector3, amount: number): Vector3
+  
+  /**  */
+  export function Vector3Reflect(v: Vector3, normal: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Min(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Max(v1: Vector3, v2: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Barycenter(p: Vector3, a: Vector3, b: Vector3, c: Vector3): Vector3
+  
+  /**  */
+  export function Vector3Unproject(source: Vector3, projection: Matrix, view: Matrix): Vector3
+  
+  /**  */
+  export function MatrixDeterminant(mat: Matrix): number
+  
+  /**  */
+  export function MatrixTrace(mat: Matrix): number
+  
+  /**  */
+  export function MatrixTranspose(mat: Matrix): Matrix
+  
+  /**  */
+  export function MatrixInvert(mat: Matrix): Matrix
+  
+  /**  */
+  export function MatrixNormalize(mat: Matrix): Matrix
+  
+  /**  */
+  export function MatrixIdentity(): Matrix
+  
+  /**  */
+  export function MatrixAdd(left: Matrix, right: Matrix): Matrix
+  
+  /**  */
+  export function MatrixSubtract(left: Matrix, right: Matrix): Matrix
+  
+  /**  */
+  export function MatrixMultiply(left: Matrix, right: Matrix): Matrix
+  
+  /**  */
+  export function MatrixTranslate(x: number, y: number, z: number): Matrix
+  
+  /**  */
+  export function MatrixRotate(axis: Vector3, angle: number): Matrix
+  
+  /**  */
+  export function MatrixRotateX(angle: number): Matrix
+  
+  /**  */
+  export function MatrixRotateY(angle: number): Matrix
+  
+  /**  */
+  export function MatrixRotateZ(angle: number): Matrix
+  
+  /**  */
+  export function MatrixRotateXYZ(ang: Vector3): Matrix
+  
+  /**  */
+  export function MatrixRotateZYX(ang: Vector3): Matrix
+  
+  /**  */
+  export function MatrixScale(x: number, y: number, z: number): Matrix
+  
+  /**  */
+  export function MatrixFrustum(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix
+  
+  /**  */
+  export function MatrixPerspective(fovy: number, aspect: number, near: number, far: number): Matrix
+  
+  /**  */
+  export function MatrixOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix
+  
+  /**  */
+  export function MatrixLookAt(eye: Vector3, target: Vector3, up: Vector3): Matrix
+  
+  /**  */
+  export function QuaternionAdd(q1: Quaternion, q2: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionAddValue(q: Quaternion, add: number): Quaternion
+  
+  /**  */
+  export function QuaternionSubtract(q1: Quaternion, q2: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionSubtractValue(q: Quaternion, sub: number): Quaternion
+  
+  /**  */
+  export function QuaternionIdentity(): Quaternion
+  
+  /**  */
+  export function QuaternionLength(q: Quaternion): number
+  
+  /**  */
+  export function QuaternionNormalize(q: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionInvert(q: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionMultiply(q1: Quaternion, q2: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionScale(q: Quaternion, mul: number): Quaternion
+  
+  /**  */
+  export function QuaternionDivide(q1: Quaternion, q2: Quaternion): Quaternion
+  
+  /**  */
+  export function QuaternionLerp(q1: Quaternion, q2: Quaternion, amount: number): Quaternion
+  
+  /**  */
+  export function QuaternionNlerp(q1: Quaternion, q2: Quaternion, amount: number): Quaternion
+  
+  /**  */
+  export function QuaternionSlerp(q1: Quaternion, q2: Quaternion, amount: number): Quaternion
+  
+  /**  */
+  export function QuaternionFromVector3ToVector3(from: Vector3, to: Vector3): Quaternion
+  
+  /**  */
+  export function QuaternionFromMatrix(mat: Matrix): Quaternion
+  
+  /**  */
+  export function QuaternionToMatrix(q: Quaternion): Matrix
+  
+  /**  */
+  export function QuaternionFromAxisAngle(axis: Vector3, angle: number): Quaternion
+  
+  /**  */
+  export function QuaternionToAxisAngle(q: Quaternion, outAxis: number, outAngle: number): void
+  
+  /**  */
+  export function QuaternionFromEuler(pitch: number, yaw: number, roll: number): Quaternion
+  
+  /**  */
+  export function QuaternionToEuler(q: Quaternion): Vector3
+  
+  /**  */
+  export function QuaternionTransform(q: Quaternion, mat: Matrix): Quaternion
+  
+  /** Enable gui controls (global state) */
+  export function GuiEnable(): void
+  
+  /** Disable gui controls (global state) */
+  export function GuiDisable(): void
+  
+  /** Lock gui controls (global state) */
+  export function GuiLock(): void
+  
+  /** Unlock gui controls (global state) */
+  export function GuiUnlock(): void
+  
+  /** Check if gui is locked (global state) */
+  export function GuiIsLocked(): boolean
+  
+  /** Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f */
+  export function GuiFade(alpha: number): void
+  
+  /** Set gui state (global state) */
+  export function GuiSetState(state: number): void
+  
+  /** Get gui state (global state) */
+  export function GuiGetState(): number
+  
+  /** Set gui custom font (global state) */
+  export function GuiSetFont(font: Font): void
+  
+  /** Get gui custom font (global state) */
+  export function GuiGetFont(): Font
+  
+  /** Set one style property */
+  export function GuiSetStyle(control: number, property: number, value: number): void
+  
+  /** Get one style property */
+  export function GuiGetStyle(control: number, property: number): number
+  
+  /** Window Box control, shows a window that can be closed */
+  export function GuiWindowBox(bounds: Rectangle, title: string): boolean
+  
+  /** Group Box control with text name */
+  export function GuiGroupBox(bounds: Rectangle, text: string): void
+  
+  /** Line separator control, could contain text */
+  export function GuiLine(bounds: Rectangle, text: string): void
+  
+  /** Panel control, useful to group controls */
+  export function GuiPanel(bounds: Rectangle): void
+  
+  /** Scroll Panel control */
+  export function GuiScrollPanel(bounds: Rectangle, content: Rectangle, scroll: number): Rectangle
+  
+  /** Label control, shows text */
+  export function GuiLabel(bounds: Rectangle, text: string): void
+  
+  /** Button control, returns true when clicked */
+  export function GuiButton(bounds: Rectangle, text: string): boolean
+  
+  /** Label button control, show true when clicked */
+  export function GuiLabelButton(bounds: Rectangle, text: string): boolean
+  
+  /** Toggle Button control, returns true when active */
+  export function GuiToggle(bounds: Rectangle, text: string, active: boolean): boolean
+  
+  /** Toggle Group control, returns active toggle index */
+  export function GuiToggleGroup(bounds: Rectangle, text: string, active: number): number
+  
+  /** Check Box control, returns true when active */
+  export function GuiCheckBox(bounds: Rectangle, text: string, checked: boolean): boolean
+  
+  /** Combo Box control, returns selected item index */
+  export function GuiComboBox(bounds: Rectangle, text: string, active: number): number
+  
+  /** Dropdown Box control, returns selected item */
+  export function GuiDropdownBox(bounds: Rectangle, text: string, active: number, editMode: boolean): boolean
+  
+  /** Spinner control, returns selected value */
+  export function GuiSpinner(bounds: Rectangle, text: string, value: number, minValue: number, maxValue: number, editMode: boolean): boolean
+  
+  /** Value Box control, updates input text with numbers */
+  export function GuiValueBox(bounds: Rectangle, text: string, value: number, minValue: number, maxValue: number, editMode: boolean): boolean
+  
+  /** Text Box control, updates input text */
+  export function GuiTextBox(bounds: Rectangle, text: string, textSize: number, editMode: boolean): boolean
+  
+  /** Text Box control with multiple lines */
+  export function GuiTextBoxMulti(bounds: Rectangle, text: string, textSize: number, editMode: boolean): boolean
+  
+  /** Slider control, returns selected value */
+  export function GuiSlider(bounds: Rectangle, textLeft: string, textRight: string, value: number, minValue: number, maxValue: number): number
+  
+  /** Slider Bar control, returns selected value */
+  export function GuiSliderBar(bounds: Rectangle, textLeft: string, textRight: string, value: number, minValue: number, maxValue: number): number
+  
+  /** Progress Bar control, shows current progress value */
+  export function GuiProgressBar(bounds: Rectangle, textLeft: string, textRight: string, value: number, minValue: number, maxValue: number): number
+  
+  /** Status Bar control, shows info text */
+  export function GuiStatusBar(bounds: Rectangle, text: string): void
+  
+  /** Dummy control for placeholders */
+  export function GuiDummyRec(bounds: Rectangle, text: string): void
+  
+  /** Scroll Bar control */
+  export function GuiScrollBar(bounds: Rectangle, value: number, minValue: number, maxValue: number): number
+  
+  /** Grid control */
+  export function GuiGrid(bounds: Rectangle, spacing: number, subdivs: number): Vector2
+  
+  /** List View control, returns selected list item index */
+  export function GuiListView(bounds: Rectangle, text: string, scrollIndex: number, active: number): number
+  
+  /** List View with extended parameters */
+  export function GuiListViewEx(bounds: Rectangle, text: number, count: number, focus: number, scrollIndex: number, active: number): number
+  
+  /** Message Box control, displays a message */
+  export function GuiMessageBox(bounds: Rectangle, title: string, message: string, buttons: string): number
+  
+  /** Text Input Box control, ask for text */
+  export function GuiTextInputBox(bounds: Rectangle, title: string, message: string, buttons: string, text: string): number
+  
+  /** Color Picker control (multiple color controls) */
+  export function GuiColorPicker(bounds: Rectangle, color: Color): Color
+  
+  /** Color Panel control */
+  export function GuiColorPanel(bounds: Rectangle, color: Color): Color
+  
+  /** Color Bar Alpha control */
+  export function GuiColorBarAlpha(bounds: Rectangle, alpha: number): number
+  
+  /** Color Bar Hue control */
+  export function GuiColorBarHue(bounds: Rectangle, value: number): number
+  
+  /** Load style file over global style variable (.rgs) */
+  export function GuiLoadStyle(fileName: string): void
+  
+  /** Load style default over global style */
+  export function GuiLoadStyleDefault(): void
+  
+  /** Get text with icon id prepended (if supported) */
+  export function GuiIconText(iconId: number, text: string): string
+  
+  /**  */
+  export function GuiDrawIcon(iconId: number, posX: number, posY: number, pixelSize: number, color: Color): void
+  
+  /** Get full icons data pointer */
+  export function GuiGetIcons(): number
+  
+  /** Get icon bit data */
+  export function GuiGetIconData(iconId: number): number
+  
+  /** Set icon bit data */
+  export function GuiSetIconData(iconId: number, data: number): void
+  
+  /** Set icon pixel value */
+  export function GuiSetIconPixel(iconId: number, x: number, y: number): void
+  
+  /** Clear icon pixel value */
+  export function GuiClearIconPixel(iconId: number, x: number, y: number): void
+  
+  /** Check icon pixel value */
+  export function GuiCheckIconPixel(iconId: number, x: number, y: number): boolean
+  
 
   /** Set shader uniform float */
   export function SetShaderFloat(shader: Shader, locIndex: number, value: number): void
@@ -2409,7 +2853,7 @@ declare module "raylib" {
   export const PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20
   /** 2 bpp */
   export const PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21
-  /** No filter, just pixel approximation */
+  /** No filter, just pixel aproximation */
   export const TEXTURE_FILTER_POINT = 0
   /** Linear filtering */
   export const TEXTURE_FILTER_BILINEAR = 1
@@ -2501,6 +2945,156 @@ declare module "raylib" {
   export const NPATCH_THREE_PATCH_VERTICAL = 1
   /** Npatch layout: 3x1 tiles */
   export const NPATCH_THREE_PATCH_HORIZONTAL = 2
+  /**  */
+  export const GUI_STATE_NORMAL = 0
+  /**  */
+  export const GUI_STATE_FOCUSED = 1
+  /**  */
+  export const GUI_STATE_PRESSED = 2
+  /**  */
+  export const GUI_STATE_DISABLED = 3
+  /**  */
+  export const GUI_TEXT_ALIGN_LEFT = 0
+  /**  */
+  export const GUI_TEXT_ALIGN_CENTER = 1
+  /**  */
+  export const GUI_TEXT_ALIGN_RIGHT = 2
+  /** Generic control -> populates to all controls when set */
+  export const DEFAULT = 0
+  /** Used also for: LABELBUTTON */
+  export const LABEL = 1
+  /**  */
+  export const BUTTON = 2
+  /** Used also for: TOGGLEGROUP */
+  export const TOGGLE = 3
+  /** Used also for: SLIDERBAR */
+  export const SLIDER = 4
+  /**  */
+  export const PROGRESSBAR = 5
+  /**  */
+  export const CHECKBOX = 6
+  /**  */
+  export const COMBOBOX = 7
+  /**  */
+  export const DROPDOWNBOX = 8
+  /** Used also for: TEXTBOXMULTI */
+  export const TEXTBOX = 9
+  /**  */
+  export const VALUEBOX = 10
+  /**  */
+  export const SPINNER = 11
+  /**  */
+  export const LISTVIEW = 12
+  /**  */
+  export const COLORPICKER = 13
+  /**  */
+  export const SCROLLBAR = 14
+  /**  */
+  export const STATUSBAR = 15
+  /**  */
+  export const BORDER_COLOR_NORMAL = 0
+  /**  */
+  export const BASE_COLOR_NORMAL = 1
+  /**  */
+  export const TEXT_COLOR_NORMAL = 2
+  /**  */
+  export const BORDER_COLOR_FOCUSED = 3
+  /**  */
+  export const BASE_COLOR_FOCUSED = 4
+  /**  */
+  export const TEXT_COLOR_FOCUSED = 5
+  /**  */
+  export const BORDER_COLOR_PRESSED = 6
+  /**  */
+  export const BASE_COLOR_PRESSED = 7
+  /**  */
+  export const TEXT_COLOR_PRESSED = 8
+  /**  */
+  export const BORDER_COLOR_DISABLED = 9
+  /**  */
+  export const BASE_COLOR_DISABLED = 10
+  /**  */
+  export const TEXT_COLOR_DISABLED = 11
+  /**  */
+  export const BORDER_WIDTH = 12
+  /**  */
+  export const TEXT_PADDING = 13
+  /**  */
+  export const TEXT_ALIGNMENT = 14
+  /**  */
+  export const RESERVED = 15
+  /**  */
+  export const TEXT_SIZE = 16
+  /**  */
+  export const TEXT_SPACING = 17
+  /**  */
+  export const LINE_COLOR = 18
+  /**  */
+  export const BACKGROUND_COLOR = 19
+  /**  */
+  export const GROUP_PADDING = 16
+  /**  */
+  export const SLIDER_WIDTH = 16
+  /**  */
+  export const SLIDER_PADDING = 17
+  /**  */
+  export const PROGRESS_PADDING = 16
+  /**  */
+  export const CHECK_PADDING = 16
+  /**  */
+  export const COMBO_BUTTON_WIDTH = 16
+  /**  */
+  export const COMBO_BUTTON_PADDING = 17
+  /**  */
+  export const ARROW_PADDING = 16
+  /**  */
+  export const DROPDOWN_ITEMS_PADDING = 17
+  /**  */
+  export const TEXT_INNER_PADDING = 16
+  /**  */
+  export const TEXT_LINES_PADDING = 17
+  /**  */
+  export const COLOR_SELECTED_FG = 18
+  /**  */
+  export const COLOR_SELECTED_BG = 19
+  /**  */
+  export const SPIN_BUTTON_WIDTH = 16
+  /**  */
+  export const SPIN_BUTTON_PADDING = 17
+  /**  */
+  export const ARROWS_SIZE = 16
+  /**  */
+  export const ARROWS_VISIBLE = 17
+  /**  */
+  export const SCROLL_SLIDER_PADDING = 18
+  /**  */
+  export const SCROLL_SLIDER_SIZE = 19
+  /**  */
+  export const SCROLL_PADDING = 20
+  /**  */
+  export const SCROLL_SPEED = 21
+  /**  */
+  export const SCROLLBAR_LEFT_SIDE = 0
+  /**  */
+  export const SCROLLBAR_RIGHT_SIDE = 1
+  /**  */
+  export const LIST_ITEMS_HEIGHT = 16
+  /**  */
+  export const LIST_ITEMS_PADDING = 17
+  /**  */
+  export const SCROLLBAR_WIDTH = 18
+  /**  */
+  export const SCROLLBAR_SIDE = 19
+  /**  */
+  export const COLOR_SELECTOR_SIZE = 16
+  /** Right hue bar width */
+  export const HUEBAR_WIDTH = 17
+  /** Right hue bar separation from panel */
+  export const HUEBAR_PADDING = 18
+  /** Right hue bar selector height */
+  export const HUEBAR_SELECTOR_HEIGHT = 19
+  /** Right hue bar selector overflow */
+  export const HUEBAR_SELECTOR_OVERFLOW = 20
 
   export const LIGHTGRAY: { r: 200, g: 200, b: 200, a: 255 }
   export const GRAY: { r: 130, g: 130, b: 130, a: 255 }
diff --git a/src/generated/node-raylib.js b/src/generated/node-raylib.js
index a4adf36..5b2d816 100644
--- a/src/generated/node-raylib.js
+++ b/src/generated/node-raylib.js
@@ -134,7 +134,7 @@ function IsWindowState(flag) {
 raylib.IsWindowState = IsWindowState
 
 /**
- * Set window configuration state using flags (only PLATFORM_DESKTOP)
+ * Set window configuration state using flags
  *
  * @param {number} flags
  *
@@ -885,20 +885,20 @@ function SetShaderValueMatrix(shader, locIndex, mat) {
     shader.locs,
     locIndex,
     mat.m0,
-    mat.m1,
-    mat.m2,
-    mat.m3,
     mat.m4,
-    mat.m5,
-    mat.m6,
-    mat.m7,
     mat.m8,
-    mat.m9,
-    mat.m10,
-    mat.m11,
     mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
     mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
     mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
     mat.m15
   )
 }
@@ -4782,7 +4782,7 @@ function LoadFont(fileName) {
 raylib.LoadFont = LoadFont
 
 /**
- * Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set
+ * Load font from file with extended parameters
  *
  * @param {string} fileName
  * @param {number} fontSize
@@ -4915,7 +4915,7 @@ function UnloadFontData(chars, glyphCount) {
 raylib.UnloadFontData = UnloadFontData
 
 /**
- * Unload font from GPU memory (VRAM)
+ * Unload Font from GPU memory (VRAM)
  *
  * @param {Font} font
  *
@@ -6143,20 +6143,20 @@ raylib.LoadModelFromMesh = LoadModelFromMesh
 function UnloadModel(model) {
   return r.BindUnloadModel(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6180,20 +6180,20 @@ raylib.UnloadModel = UnloadModel
 function UnloadModelKeepMeshes(model) {
   return r.BindUnloadModelKeepMeshes(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6217,20 +6217,20 @@ raylib.UnloadModelKeepMeshes = UnloadModelKeepMeshes
 function GetModelBoundingBox(model) {
   return r.BindGetModelBoundingBox(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6257,20 +6257,20 @@ raylib.GetModelBoundingBox = GetModelBoundingBox
 function DrawModel(model, position, scale, tint) {
   return r.BindDrawModel(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6307,20 +6307,20 @@ raylib.DrawModel = DrawModel
 function DrawModelEx(model, position, rotationAxis, rotationAngle, scale, tint) {
   return r.BindDrawModelEx(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6361,20 +6361,20 @@ raylib.DrawModelEx = DrawModelEx
 function DrawModelWires(model, position, scale, tint) {
   return r.BindDrawModelWires(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6411,20 +6411,20 @@ raylib.DrawModelWires = DrawModelWires
 function DrawModelWiresEx(model, position, rotationAxis, rotationAngle, scale, tint) {
   return r.BindDrawModelWiresEx(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -6980,20 +6980,20 @@ raylib.LoadModelAnimations = LoadModelAnimations
 function UpdateModelAnimation(model, anim, frame) {
   return r.BindUpdateModelAnimation(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -7056,20 +7056,20 @@ raylib.UnloadModelAnimations = UnloadModelAnimations
 function IsModelAnimationValid(model, anim) {
   return r.BindIsModelAnimationValid(
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -7230,20 +7230,20 @@ function GetRayCollisionModel(ray, model) {
     ray.direction.y,
     ray.direction.z,
     model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
     model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
     model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
     model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
     model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
     model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
     model.transform.m15,
     model.meshCount,
     model.materialCount,
@@ -7290,20 +7290,20 @@ function GetRayCollisionMesh(ray, mesh, transform) {
     mesh.vaoId,
     mesh.vboId,
     transform.m0,
-    transform.m1,
-    transform.m2,
-    transform.m3,
     transform.m4,
-    transform.m5,
-    transform.m6,
-    transform.m7,
     transform.m8,
-    transform.m9,
-    transform.m10,
-    transform.m11,
     transform.m12,
+    transform.m1,
+    transform.m5,
+    transform.m9,
     transform.m13,
+    transform.m2,
+    transform.m6,
+    transform.m10,
     transform.m14,
+    transform.m3,
+    transform.m7,
+    transform.m11,
     transform.m15
   )
 }
@@ -8299,16 +8299,6 @@ function SetAudioStreamBufferSizeDefault(size) {
 }
 raylib.SetAudioStreamBufferSizeDefault = SetAudioStreamBufferSizeDefault
 
-/**
- * Easing: EaseLinearNone.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseLinearNone(t, b, c, d) {
   return r.BindEaseLinearNone(
     t,
@@ -8319,16 +8309,6 @@ function EaseLinearNone(t, b, c, d) {
 }
 raylib.EaseLinearNone = EaseLinearNone
 
-/**
- * Easing: EaseLinearIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseLinearIn(t, b, c, d) {
   return r.BindEaseLinearIn(
     t,
@@ -8339,16 +8319,6 @@ function EaseLinearIn(t, b, c, d) {
 }
 raylib.EaseLinearIn = EaseLinearIn
 
-/**
- * Easing: EaseLinearOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseLinearOut(t, b, c, d) {
   return r.BindEaseLinearOut(
     t,
@@ -8359,16 +8329,6 @@ function EaseLinearOut(t, b, c, d) {
 }
 raylib.EaseLinearOut = EaseLinearOut
 
-/**
- * Easing: EaseLinearInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseLinearInOut(t, b, c, d) {
   return r.BindEaseLinearInOut(
     t,
@@ -8379,16 +8339,6 @@ function EaseLinearInOut(t, b, c, d) {
 }
 raylib.EaseLinearInOut = EaseLinearInOut
 
-/**
- * Easing: EaseSineIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseSineIn(t, b, c, d) {
   return r.BindEaseSineIn(
     t,
@@ -8399,16 +8349,6 @@ function EaseSineIn(t, b, c, d) {
 }
 raylib.EaseSineIn = EaseSineIn
 
-/**
- * Easing: EaseSineOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseSineOut(t, b, c, d) {
   return r.BindEaseSineOut(
     t,
@@ -8419,16 +8359,6 @@ function EaseSineOut(t, b, c, d) {
 }
 raylib.EaseSineOut = EaseSineOut
 
-/**
- * Easing: EaseSineInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseSineInOut(t, b, c, d) {
   return r.BindEaseSineInOut(
     t,
@@ -8439,16 +8369,6 @@ function EaseSineInOut(t, b, c, d) {
 }
 raylib.EaseSineInOut = EaseSineInOut
 
-/**
- * Easing: EaseCircIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCircIn(t, b, c, d) {
   return r.BindEaseCircIn(
     t,
@@ -8459,16 +8379,6 @@ function EaseCircIn(t, b, c, d) {
 }
 raylib.EaseCircIn = EaseCircIn
 
-/**
- * Easing: EaseCircOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCircOut(t, b, c, d) {
   return r.BindEaseCircOut(
     t,
@@ -8479,16 +8389,6 @@ function EaseCircOut(t, b, c, d) {
 }
 raylib.EaseCircOut = EaseCircOut
 
-/**
- * Easing: EaseCircInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCircInOut(t, b, c, d) {
   return r.BindEaseCircInOut(
     t,
@@ -8499,16 +8399,6 @@ function EaseCircInOut(t, b, c, d) {
 }
 raylib.EaseCircInOut = EaseCircInOut
 
-/**
- * Easing: EaseCubicIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCubicIn(t, b, c, d) {
   return r.BindEaseCubicIn(
     t,
@@ -8519,16 +8409,6 @@ function EaseCubicIn(t, b, c, d) {
 }
 raylib.EaseCubicIn = EaseCubicIn
 
-/**
- * Easing: EaseCubicOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCubicOut(t, b, c, d) {
   return r.BindEaseCubicOut(
     t,
@@ -8539,16 +8419,6 @@ function EaseCubicOut(t, b, c, d) {
 }
 raylib.EaseCubicOut = EaseCubicOut
 
-/**
- * Easing: EaseCubicInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseCubicInOut(t, b, c, d) {
   return r.BindEaseCubicInOut(
     t,
@@ -8559,16 +8429,6 @@ function EaseCubicInOut(t, b, c, d) {
 }
 raylib.EaseCubicInOut = EaseCubicInOut
 
-/**
- * Easing: EaseQuadIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseQuadIn(t, b, c, d) {
   return r.BindEaseQuadIn(
     t,
@@ -8579,16 +8439,6 @@ function EaseQuadIn(t, b, c, d) {
 }
 raylib.EaseQuadIn = EaseQuadIn
 
-/**
- * Easing: EaseQuadOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseQuadOut(t, b, c, d) {
   return r.BindEaseQuadOut(
     t,
@@ -8599,16 +8449,6 @@ function EaseQuadOut(t, b, c, d) {
 }
 raylib.EaseQuadOut = EaseQuadOut
 
-/**
- * Easing: EaseQuadInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseQuadInOut(t, b, c, d) {
   return r.BindEaseQuadInOut(
     t,
@@ -8619,16 +8459,6 @@ function EaseQuadInOut(t, b, c, d) {
 }
 raylib.EaseQuadInOut = EaseQuadInOut
 
-/**
- * Easing: EaseExpoIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseExpoIn(t, b, c, d) {
   return r.BindEaseExpoIn(
     t,
@@ -8639,16 +8469,6 @@ function EaseExpoIn(t, b, c, d) {
 }
 raylib.EaseExpoIn = EaseExpoIn
 
-/**
- * Easing: EaseExpoOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseExpoOut(t, b, c, d) {
   return r.BindEaseExpoOut(
     t,
@@ -8659,16 +8479,6 @@ function EaseExpoOut(t, b, c, d) {
 }
 raylib.EaseExpoOut = EaseExpoOut
 
-/**
- * Easing: EaseExpoInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseExpoInOut(t, b, c, d) {
   return r.BindEaseExpoInOut(
     t,
@@ -8679,16 +8489,6 @@ function EaseExpoInOut(t, b, c, d) {
 }
 raylib.EaseExpoInOut = EaseExpoInOut
 
-/**
- * Easing: EaseBackIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBackIn(t, b, c, d) {
   return r.BindEaseBackIn(
     t,
@@ -8699,16 +8499,6 @@ function EaseBackIn(t, b, c, d) {
 }
 raylib.EaseBackIn = EaseBackIn
 
-/**
- * Easing: EaseBackOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBackOut(t, b, c, d) {
   return r.BindEaseBackOut(
     t,
@@ -8719,16 +8509,6 @@ function EaseBackOut(t, b, c, d) {
 }
 raylib.EaseBackOut = EaseBackOut
 
-/**
- * Easing: EaseBackInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBackInOut(t, b, c, d) {
   return r.BindEaseBackInOut(
     t,
@@ -8739,16 +8519,6 @@ function EaseBackInOut(t, b, c, d) {
 }
 raylib.EaseBackInOut = EaseBackInOut
 
-/**
- * Easing: EaseBounceOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBounceOut(t, b, c, d) {
   return r.BindEaseBounceOut(
     t,
@@ -8759,16 +8529,6 @@ function EaseBounceOut(t, b, c, d) {
 }
 raylib.EaseBounceOut = EaseBounceOut
 
-/**
- * Easing: EaseBounceIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBounceIn(t, b, c, d) {
   return r.BindEaseBounceIn(
     t,
@@ -8779,16 +8539,6 @@ function EaseBounceIn(t, b, c, d) {
 }
 raylib.EaseBounceIn = EaseBounceIn
 
-/**
- * Easing: EaseBounceInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseBounceInOut(t, b, c, d) {
   return r.BindEaseBounceInOut(
     t,
@@ -8799,16 +8549,6 @@ function EaseBounceInOut(t, b, c, d) {
 }
 raylib.EaseBounceInOut = EaseBounceInOut
 
-/**
- * Easing: EaseElasticIn.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseElasticIn(t, b, c, d) {
   return r.BindEaseElasticIn(
     t,
@@ -8819,16 +8559,6 @@ function EaseElasticIn(t, b, c, d) {
 }
 raylib.EaseElasticIn = EaseElasticIn
 
-/**
- * Easing: EaseElasticOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseElasticOut(t, b, c, d) {
   return r.BindEaseElasticOut(
     t,
@@ -8839,16 +8569,6 @@ function EaseElasticOut(t, b, c, d) {
 }
 raylib.EaseElasticOut = EaseElasticOut
 
-/**
- * Easing: EaseElasticInOut.
- *
- * @param {number} t
- * @param {number} b
- * @param {number} c
- * @param {number} d
- *
- * @return {number} The resulting float.
- */
 function EaseElasticInOut(t, b, c, d) {
   return r.BindEaseElasticInOut(
     t,
@@ -8859,3870 +8579,6577 @@ function EaseElasticInOut(t, b, c, d) {
 }
 raylib.EaseElasticInOut = EaseElasticInOut
 
-/**
- * Update camera position for selected mode
- *
- * @param {Camera} camera
- *
- * @return {undefined}
- */
-function UpdateCamera(camera) {
-  const obj = r.BindUpdateCamera(
-    camera.position.x,
-    camera.position.y,
-    camera.position.z,
-    camera.target.x,
-    camera.target.y,
-    camera.target.z,
-    camera.up.x,
-    camera.up.y,
-    camera.up.z,
-    camera.fovy,
-    camera.projection
+function Clamp(value, min, max) {
+  return r.BindClamp(
+    value,
+    min,
+    max
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      camera[key] = obj[key]
-    }
-  }
 }
-raylib.UpdateCamera = UpdateCamera
+raylib.Clamp = Clamp
 
-/**
- * Convert image data to desired format
- *
- * @param {Image} image
- * @param {number} newFormat
- *
- * @return {undefined}
- */
-function ImageFormat(image, newFormat) {
-  const obj = r.BindImageFormat(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    newFormat
+function Lerp(start, end, amount) {
+  return r.BindLerp(
+    start,
+    end,
+    amount
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageFormat = ImageFormat
+raylib.Lerp = Lerp
 
-/**
- * Convert image to POT (power-of-two)
- *
- * @param {Image} image
- * @param {Color} fill
- *
- * @return {undefined}
- */
-function ImageToPOT(image, fill) {
-  const obj = r.BindImageToPOT(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    fill.r,
-    fill.g,
-    fill.b,
-    fill.a
+function Normalize(value, start, end) {
+  return r.BindNormalize(
+    value,
+    start,
+    end
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageToPOT = ImageToPOT
+raylib.Normalize = Normalize
 
-/**
- * Crop an image to a defined rectangle
- *
- * @param {Image} image
- * @param {Rectangle} crop
- *
- * @return {undefined}
- */
-function ImageCrop(image, crop) {
-  const obj = r.BindImageCrop(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    crop.x,
-    crop.y,
-    crop.width,
-    crop.height
+function Remap(value, inputStart, inputEnd, outputStart, outputEnd) {
+  return r.BindRemap(
+    value,
+    inputStart,
+    inputEnd,
+    outputStart,
+    outputEnd
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageCrop = ImageCrop
+raylib.Remap = Remap
 
-/**
- * Crop image depending on alpha value
- *
- * @param {Image} image
- * @param {number} threshold
- *
- * @return {undefined}
- */
-function ImageAlphaCrop(image, threshold) {
-  const obj = r.BindImageAlphaCrop(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    threshold
+function Vector2Zero() {
+  return r.BindVector2Zero()
+}
+raylib.Vector2Zero = Vector2Zero
+
+function Vector2One() {
+  return r.BindVector2One()
+}
+raylib.Vector2One = Vector2One
+
+function Vector2Add(v1, v2) {
+  return r.BindVector2Add(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageAlphaCrop = ImageAlphaCrop
+raylib.Vector2Add = Vector2Add
 
-/**
- * Clear alpha channel to desired color
- *
- * @param {Image} image
- * @param {Color} color
- * @param {number} threshold
- *
- * @return {undefined}
- */
-function ImageAlphaClear(image, color, threshold) {
-  const obj = r.BindImageAlphaClear(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    color.r,
-    color.g,
-    color.b,
-    color.a,
-    threshold
+function Vector2AddValue(v, add) {
+  return r.BindVector2AddValue(
+    v.x,
+    v.y,
+    add
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageAlphaClear = ImageAlphaClear
+raylib.Vector2AddValue = Vector2AddValue
 
-/**
- * Apply alpha mask to image
- *
- * @param {Image} image
- * @param {Image} alphaMask
- *
- * @return {undefined}
- */
-function ImageAlphaMask(image, alphaMask) {
-  const obj = r.BindImageAlphaMask(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    alphaMask.data,
-    alphaMask.width,
-    alphaMask.height,
-    alphaMask.mipmaps,
-    alphaMask.format
+function Vector2Subtract(v1, v2) {
+  return r.BindVector2Subtract(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageAlphaMask = ImageAlphaMask
+raylib.Vector2Subtract = Vector2Subtract
 
-/**
- * Premultiply alpha channel
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageAlphaPremultiply(image) {
-  const obj = r.BindImageAlphaPremultiply(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2SubtractValue(v, sub) {
+  return r.BindVector2SubtractValue(
+    v.x,
+    v.y,
+    sub
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageAlphaPremultiply = ImageAlphaPremultiply
+raylib.Vector2SubtractValue = Vector2SubtractValue
 
-/**
- * Resize image (Bicubic scaling algorithm)
- *
- * @param {Image} image
- * @param {number} newWidth
- * @param {number} newHeight
- *
- * @return {undefined}
- */
-function ImageResize(image, newWidth, newHeight) {
-  const obj = r.BindImageResize(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    newWidth,
-    newHeight
+function Vector2Length(v) {
+  return r.BindVector2Length(
+    v.x,
+    v.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageResize = ImageResize
+raylib.Vector2Length = Vector2Length
 
-/**
- * Resize image (Nearest-Neighbor scaling algorithm)
- *
- * @param {Image} image
- * @param {number} newWidth
- * @param {number} newHeight
- *
- * @return {undefined}
- */
-function ImageResizeNN(image, newWidth, newHeight) {
-  const obj = r.BindImageResizeNN(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    newWidth,
-    newHeight
+function Vector2LengthSqr(v) {
+  return r.BindVector2LengthSqr(
+    v.x,
+    v.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageResizeNN = ImageResizeNN
+raylib.Vector2LengthSqr = Vector2LengthSqr
 
-/**
- * Resize canvas and fill with color
- *
- * @param {Image} image
- * @param {number} newWidth
- * @param {number} newHeight
- * @param {number} offsetX
- * @param {number} offsetY
- * @param {Color} fill
- *
- * @return {undefined}
- */
-function ImageResizeCanvas(image, newWidth, newHeight, offsetX, offsetY, fill) {
-  const obj = r.BindImageResizeCanvas(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    newWidth,
-    newHeight,
-    offsetX,
-    offsetY,
-    fill.r,
-    fill.g,
-    fill.b,
-    fill.a
+function Vector2DotProduct(v1, v2) {
+  return r.BindVector2DotProduct(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageResizeCanvas = ImageResizeCanvas
+raylib.Vector2DotProduct = Vector2DotProduct
 
-/**
- * Compute all mipmap levels for a provided image
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageMipmaps(image) {
-  const obj = r.BindImageMipmaps(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Distance(v1, v2) {
+  return r.BindVector2Distance(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageMipmaps = ImageMipmaps
+raylib.Vector2Distance = Vector2Distance
 
-/**
- * Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
- *
- * @param {Image} image
- * @param {number} rBpp
- * @param {number} gBpp
- * @param {number} bBpp
- * @param {number} aBpp
- *
- * @return {undefined}
- */
-function ImageDither(image, rBpp, gBpp, bBpp, aBpp) {
-  const obj = r.BindImageDither(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    rBpp,
-    gBpp,
-    bBpp,
-    aBpp
+function Vector2Angle(v1, v2) {
+  return r.BindVector2Angle(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageDither = ImageDither
+raylib.Vector2Angle = Vector2Angle
 
-/**
- * Flip image vertically
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageFlipVertical(image) {
-  const obj = r.BindImageFlipVertical(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Scale(v, scale) {
+  return r.BindVector2Scale(
+    v.x,
+    v.y,
+    scale
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageFlipVertical = ImageFlipVertical
+raylib.Vector2Scale = Vector2Scale
 
-/**
- * Flip image horizontally
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageFlipHorizontal(image) {
-  const obj = r.BindImageFlipHorizontal(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Multiply(v1, v2) {
+  return r.BindVector2Multiply(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageFlipHorizontal = ImageFlipHorizontal
+raylib.Vector2Multiply = Vector2Multiply
 
-/**
- * Rotate image clockwise 90deg
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageRotateCW(image) {
-  const obj = r.BindImageRotateCW(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Negate(v) {
+  return r.BindVector2Negate(
+    v.x,
+    v.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageRotateCW = ImageRotateCW
+raylib.Vector2Negate = Vector2Negate
 
-/**
- * Rotate image counter-clockwise 90deg
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageRotateCCW(image) {
-  const obj = r.BindImageRotateCCW(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Divide(v1, v2) {
+  return r.BindVector2Divide(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageRotateCCW = ImageRotateCCW
+raylib.Vector2Divide = Vector2Divide
 
-/**
- * Modify image color: tint
- *
- * @param {Image} image
- * @param {Color} color
- *
- * @return {undefined}
- */
-function ImageColorTint(image, color) {
-  const obj = r.BindImageColorTint(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    color.r,
-    color.g,
-    color.b,
-    color.a
+function Vector2Normalize(v) {
+  return r.BindVector2Normalize(
+    v.x,
+    v.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorTint = ImageColorTint
+raylib.Vector2Normalize = Vector2Normalize
 
-/**
- * Modify image color: invert
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageColorInvert(image) {
-  const obj = r.BindImageColorInvert(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Lerp(v1, v2, amount) {
+  return r.BindVector2Lerp(
+    v1.x,
+    v1.y,
+    v2.x,
+    v2.y,
+    amount
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorInvert = ImageColorInvert
+raylib.Vector2Lerp = Vector2Lerp
 
-/**
- * Modify image color: grayscale
- *
- * @param {Image} image
- *
- * @return {undefined}
- */
-function ImageColorGrayscale(image) {
-  const obj = r.BindImageColorGrayscale(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format
+function Vector2Reflect(v, normal) {
+  return r.BindVector2Reflect(
+    v.x,
+    v.y,
+    normal.x,
+    normal.y
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorGrayscale = ImageColorGrayscale
+raylib.Vector2Reflect = Vector2Reflect
 
-/**
- * Modify image color: contrast (-100 to 100)
- *
- * @param {Image} image
- * @param {number} contrast
- *
- * @return {undefined}
- */
-function ImageColorContrast(image, contrast) {
-  const obj = r.BindImageColorContrast(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    contrast
+function Vector2Rotate(v, angle) {
+  return r.BindVector2Rotate(
+    v.x,
+    v.y,
+    angle
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorContrast = ImageColorContrast
+raylib.Vector2Rotate = Vector2Rotate
 
-/**
- * Modify image color: brightness (-255 to 255)
- *
- * @param {Image} image
- * @param {number} brightness
- *
- * @return {undefined}
- */
-function ImageColorBrightness(image, brightness) {
-  const obj = r.BindImageColorBrightness(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    brightness
+function Vector2MoveTowards(v, target, maxDistance) {
+  return r.BindVector2MoveTowards(
+    v.x,
+    v.y,
+    target.x,
+    target.y,
+    maxDistance
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorBrightness = ImageColorBrightness
+raylib.Vector2MoveTowards = Vector2MoveTowards
 
-/**
- * Modify image color: replace color
- *
- * @param {Image} image
- * @param {Color} color
- * @param {Color} replace
- *
- * @return {undefined}
- */
-function ImageColorReplace(image, color, replace) {
-  const obj = r.BindImageColorReplace(
-    image.data,
-    image.width,
-    image.height,
-    image.mipmaps,
-    image.format,
-    color.r,
-    color.g,
-    color.b,
-    color.a,
-    replace.r,
-    replace.g,
-    replace.b,
-    replace.a
+function Vector3Zero() {
+  return r.BindVector3Zero()
+}
+raylib.Vector3Zero = Vector3Zero
+
+function Vector3One() {
+  return r.BindVector3One()
+}
+raylib.Vector3One = Vector3One
+
+function Vector3Add(v1, v2) {
+  return r.BindVector3Add(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      image[key] = obj[key]
-    }
-  }
 }
-raylib.ImageColorReplace = ImageColorReplace
+raylib.Vector3Add = Vector3Add
 
-/**
- * Clear image background with given color
- *
- * @param {Image} dst
- * @param {Color} color
- *
- * @return {undefined}
- */
-function ImageClearBackground(dst, color) {
-  const obj = r.BindImageClearBackground(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    color.r,
-    color.g,
-    color.b,
-    color.a
+function Vector3AddValue(v, add) {
+  return r.BindVector3AddValue(
+    v.x,
+    v.y,
+    v.z,
+    add
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
 }
-raylib.ImageClearBackground = ImageClearBackground
+raylib.Vector3AddValue = Vector3AddValue
 
-/**
- * Draw pixel within an image
- *
- * @param {Image} dst
- * @param {number} posX
- * @param {number} posY
- * @param {Color} color
- *
- * @return {undefined}
- */
-function ImageDrawPixel(dst, posX, posY, color) {
-  const obj = r.BindImageDrawPixel(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    posX,
-    posY,
-    color.r,
-    color.g,
-    color.b,
-    color.a
+function Vector3Subtract(v1, v2) {
+  return r.BindVector3Subtract(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
 }
-raylib.ImageDrawPixel = ImageDrawPixel
+raylib.Vector3Subtract = Vector3Subtract
 
-/**
- * Draw pixel within an image (Vector version)
- *
- * @param {Image} dst
- * @param {Vector2} position
- * @param {Color} color
- *
- * @return {undefined}
- */
-function ImageDrawPixelV(dst, position, color) {
-  const obj = r.BindImageDrawPixelV(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    position.x,
-    position.y,
-    color.r,
-    color.g,
-    color.b,
-    color.a
+function Vector3SubtractValue(v, sub) {
+  return r.BindVector3SubtractValue(
+    v.x,
+    v.y,
+    v.z,
+    sub
   )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
 }
-raylib.ImageDrawPixelV = ImageDrawPixelV
+raylib.Vector3SubtractValue = Vector3SubtractValue
+
+function Vector3Scale(v, scalar) {
+  return r.BindVector3Scale(
+    v.x,
+    v.y,
+    v.z,
+    scalar
+  )
+}
+raylib.Vector3Scale = Vector3Scale
+
+function Vector3Multiply(v1, v2) {
+  return r.BindVector3Multiply(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Multiply = Vector3Multiply
+
+function Vector3CrossProduct(v1, v2) {
+  return r.BindVector3CrossProduct(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3CrossProduct = Vector3CrossProduct
+
+function Vector3Perpendicular(v) {
+  return r.BindVector3Perpendicular(
+    v.x,
+    v.y,
+    v.z
+  )
+}
+raylib.Vector3Perpendicular = Vector3Perpendicular
+
+function Vector3Length(v) {
+  return r.BindVector3Length(
+    v
+  )
+}
+raylib.Vector3Length = Vector3Length
+
+function Vector3LengthSqr(v) {
+  return r.BindVector3LengthSqr(
+    v
+  )
+}
+raylib.Vector3LengthSqr = Vector3LengthSqr
+
+function Vector3DotProduct(v1, v2) {
+  return r.BindVector3DotProduct(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3DotProduct = Vector3DotProduct
+
+function Vector3Distance(v1, v2) {
+  return r.BindVector3Distance(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Distance = Vector3Distance
+
+function Vector3Angle(v1, v2) {
+  return r.BindVector3Angle(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Angle = Vector3Angle
+
+function Vector3Negate(v) {
+  return r.BindVector3Negate(
+    v.x,
+    v.y,
+    v.z
+  )
+}
+raylib.Vector3Negate = Vector3Negate
+
+function Vector3Divide(v1, v2) {
+  return r.BindVector3Divide(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Divide = Vector3Divide
+
+function Vector3Normalize(v) {
+  return r.BindVector3Normalize(
+    v.x,
+    v.y,
+    v.z
+  )
+}
+raylib.Vector3Normalize = Vector3Normalize
+
+function Vector3OrthoNormalize(v1, v2) {
+  return r.BindVector3OrthoNormalize(
+    v1,
+    v2
+  )
+}
+raylib.Vector3OrthoNormalize = Vector3OrthoNormalize
+
+function Vector3Transform(v, mat) {
+  return r.BindVector3Transform(
+    v.x,
+    v.y,
+    v.z,
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.Vector3Transform = Vector3Transform
+
+function Vector3RotateByQuaternion(v, q) {
+  return r.BindVector3RotateByQuaternion(
+    v.x,
+    v.y,
+    v.z,
+    q
+  )
+}
+raylib.Vector3RotateByQuaternion = Vector3RotateByQuaternion
+
+function Vector3Lerp(v1, v2, amount) {
+  return r.BindVector3Lerp(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z,
+    amount
+  )
+}
+raylib.Vector3Lerp = Vector3Lerp
+
+function Vector3Reflect(v, normal) {
+  return r.BindVector3Reflect(
+    v.x,
+    v.y,
+    v.z,
+    normal.x,
+    normal.y,
+    normal.z
+  )
+}
+raylib.Vector3Reflect = Vector3Reflect
+
+function Vector3Min(v1, v2) {
+  return r.BindVector3Min(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Min = Vector3Min
+
+function Vector3Max(v1, v2) {
+  return r.BindVector3Max(
+    v1.x,
+    v1.y,
+    v1.z,
+    v2.x,
+    v2.y,
+    v2.z
+  )
+}
+raylib.Vector3Max = Vector3Max
+
+function Vector3Barycenter(p, a, b, c) {
+  return r.BindVector3Barycenter(
+    p.x,
+    p.y,
+    p.z,
+    a.x,
+    a.y,
+    a.z,
+    b.x,
+    b.y,
+    b.z,
+    c.x,
+    c.y,
+    c.z
+  )
+}
+raylib.Vector3Barycenter = Vector3Barycenter
+
+function Vector3Unproject(source, projection, view) {
+  return r.BindVector3Unproject(
+    source.x,
+    source.y,
+    source.z,
+    projection.m0,
+    projection.m4,
+    projection.m8,
+    projection.m12,
+    projection.m1,
+    projection.m5,
+    projection.m9,
+    projection.m13,
+    projection.m2,
+    projection.m6,
+    projection.m10,
+    projection.m14,
+    projection.m3,
+    projection.m7,
+    projection.m11,
+    projection.m15,
+    view.m0,
+    view.m4,
+    view.m8,
+    view.m12,
+    view.m1,
+    view.m5,
+    view.m9,
+    view.m13,
+    view.m2,
+    view.m6,
+    view.m10,
+    view.m14,
+    view.m3,
+    view.m7,
+    view.m11,
+    view.m15
+  )
+}
+raylib.Vector3Unproject = Vector3Unproject
+
+function MatrixDeterminant(mat) {
+  return r.BindMatrixDeterminant(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.MatrixDeterminant = MatrixDeterminant
+
+function MatrixTrace(mat) {
+  return r.BindMatrixTrace(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.MatrixTrace = MatrixTrace
+
+function MatrixTranspose(mat) {
+  return r.BindMatrixTranspose(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.MatrixTranspose = MatrixTranspose
+
+function MatrixInvert(mat) {
+  return r.BindMatrixInvert(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.MatrixInvert = MatrixInvert
+
+function MatrixNormalize(mat) {
+  return r.BindMatrixNormalize(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.MatrixNormalize = MatrixNormalize
+
+function MatrixIdentity() {
+  return r.BindMatrixIdentity()
+}
+raylib.MatrixIdentity = MatrixIdentity
+
+function MatrixAdd(left, right) {
+  return r.BindMatrixAdd(
+    left.m0,
+    left.m4,
+    left.m8,
+    left.m12,
+    left.m1,
+    left.m5,
+    left.m9,
+    left.m13,
+    left.m2,
+    left.m6,
+    left.m10,
+    left.m14,
+    left.m3,
+    left.m7,
+    left.m11,
+    left.m15,
+    right.m0,
+    right.m4,
+    right.m8,
+    right.m12,
+    right.m1,
+    right.m5,
+    right.m9,
+    right.m13,
+    right.m2,
+    right.m6,
+    right.m10,
+    right.m14,
+    right.m3,
+    right.m7,
+    right.m11,
+    right.m15
+  )
+}
+raylib.MatrixAdd = MatrixAdd
+
+function MatrixSubtract(left, right) {
+  return r.BindMatrixSubtract(
+    left.m0,
+    left.m4,
+    left.m8,
+    left.m12,
+    left.m1,
+    left.m5,
+    left.m9,
+    left.m13,
+    left.m2,
+    left.m6,
+    left.m10,
+    left.m14,
+    left.m3,
+    left.m7,
+    left.m11,
+    left.m15,
+    right.m0,
+    right.m4,
+    right.m8,
+    right.m12,
+    right.m1,
+    right.m5,
+    right.m9,
+    right.m13,
+    right.m2,
+    right.m6,
+    right.m10,
+    right.m14,
+    right.m3,
+    right.m7,
+    right.m11,
+    right.m15
+  )
+}
+raylib.MatrixSubtract = MatrixSubtract
+
+function MatrixMultiply(left, right) {
+  return r.BindMatrixMultiply(
+    left.m0,
+    left.m4,
+    left.m8,
+    left.m12,
+    left.m1,
+    left.m5,
+    left.m9,
+    left.m13,
+    left.m2,
+    left.m6,
+    left.m10,
+    left.m14,
+    left.m3,
+    left.m7,
+    left.m11,
+    left.m15,
+    right.m0,
+    right.m4,
+    right.m8,
+    right.m12,
+    right.m1,
+    right.m5,
+    right.m9,
+    right.m13,
+    right.m2,
+    right.m6,
+    right.m10,
+    right.m14,
+    right.m3,
+    right.m7,
+    right.m11,
+    right.m15
+  )
+}
+raylib.MatrixMultiply = MatrixMultiply
+
+function MatrixTranslate(x, y, z) {
+  return r.BindMatrixTranslate(
+    x,
+    y,
+    z
+  )
+}
+raylib.MatrixTranslate = MatrixTranslate
+
+function MatrixRotate(axis, angle) {
+  return r.BindMatrixRotate(
+    axis.x,
+    axis.y,
+    axis.z,
+    angle
+  )
+}
+raylib.MatrixRotate = MatrixRotate
+
+function MatrixRotateX(angle) {
+  return r.BindMatrixRotateX(
+    angle
+  )
+}
+raylib.MatrixRotateX = MatrixRotateX
+
+function MatrixRotateY(angle) {
+  return r.BindMatrixRotateY(
+    angle
+  )
+}
+raylib.MatrixRotateY = MatrixRotateY
+
+function MatrixRotateZ(angle) {
+  return r.BindMatrixRotateZ(
+    angle
+  )
+}
+raylib.MatrixRotateZ = MatrixRotateZ
+
+function MatrixRotateXYZ(ang) {
+  return r.BindMatrixRotateXYZ(
+    ang.x,
+    ang.y,
+    ang.z
+  )
+}
+raylib.MatrixRotateXYZ = MatrixRotateXYZ
+
+function MatrixRotateZYX(ang) {
+  return r.BindMatrixRotateZYX(
+    ang.x,
+    ang.y,
+    ang.z
+  )
+}
+raylib.MatrixRotateZYX = MatrixRotateZYX
+
+function MatrixScale(x, y, z) {
+  return r.BindMatrixScale(
+    x,
+    y,
+    z
+  )
+}
+raylib.MatrixScale = MatrixScale
+
+function MatrixFrustum(left, right, bottom, top, near, far) {
+  return r.BindMatrixFrustum(
+    left,
+    right,
+    bottom,
+    top,
+    near,
+    far
+  )
+}
+raylib.MatrixFrustum = MatrixFrustum
+
+function MatrixPerspective(fovy, aspect, near, far) {
+  return r.BindMatrixPerspective(
+    fovy,
+    aspect,
+    near,
+    far
+  )
+}
+raylib.MatrixPerspective = MatrixPerspective
+
+function MatrixOrtho(left, right, bottom, top, near, far) {
+  return r.BindMatrixOrtho(
+    left,
+    right,
+    bottom,
+    top,
+    near,
+    far
+  )
+}
+raylib.MatrixOrtho = MatrixOrtho
+
+function MatrixLookAt(eye, target, up) {
+  return r.BindMatrixLookAt(
+    eye.x,
+    eye.y,
+    eye.z,
+    target.x,
+    target.y,
+    target.z,
+    up.x,
+    up.y,
+    up.z
+  )
+}
+raylib.MatrixLookAt = MatrixLookAt
+
+function QuaternionAdd(q1, q2) {
+  return r.BindQuaternionAdd(
+    q1,
+    q2
+  )
+}
+raylib.QuaternionAdd = QuaternionAdd
+
+function QuaternionAddValue(q, add) {
+  return r.BindQuaternionAddValue(
+    q,
+    add
+  )
+}
+raylib.QuaternionAddValue = QuaternionAddValue
+
+function QuaternionSubtract(q1, q2) {
+  return r.BindQuaternionSubtract(
+    q1,
+    q2
+  )
+}
+raylib.QuaternionSubtract = QuaternionSubtract
+
+function QuaternionSubtractValue(q, sub) {
+  return r.BindQuaternionSubtractValue(
+    q,
+    sub
+  )
+}
+raylib.QuaternionSubtractValue = QuaternionSubtractValue
+
+function QuaternionIdentity() {
+  return r.BindQuaternionIdentity()
+}
+raylib.QuaternionIdentity = QuaternionIdentity
+
+function QuaternionLength(q) {
+  return r.BindQuaternionLength(
+    q
+  )
+}
+raylib.QuaternionLength = QuaternionLength
+
+function QuaternionNormalize(q) {
+  return r.BindQuaternionNormalize(
+    q
+  )
+}
+raylib.QuaternionNormalize = QuaternionNormalize
+
+function QuaternionInvert(q) {
+  return r.BindQuaternionInvert(
+    q
+  )
+}
+raylib.QuaternionInvert = QuaternionInvert
+
+function QuaternionMultiply(q1, q2) {
+  return r.BindQuaternionMultiply(
+    q1,
+    q2
+  )
+}
+raylib.QuaternionMultiply = QuaternionMultiply
+
+function QuaternionScale(q, mul) {
+  return r.BindQuaternionScale(
+    q,
+    mul
+  )
+}
+raylib.QuaternionScale = QuaternionScale
+
+function QuaternionDivide(q1, q2) {
+  return r.BindQuaternionDivide(
+    q1,
+    q2
+  )
+}
+raylib.QuaternionDivide = QuaternionDivide
+
+function QuaternionLerp(q1, q2, amount) {
+  return r.BindQuaternionLerp(
+    q1,
+    q2,
+    amount
+  )
+}
+raylib.QuaternionLerp = QuaternionLerp
+
+function QuaternionNlerp(q1, q2, amount) {
+  return r.BindQuaternionNlerp(
+    q1,
+    q2,
+    amount
+  )
+}
+raylib.QuaternionNlerp = QuaternionNlerp
+
+function QuaternionSlerp(q1, q2, amount) {
+  return r.BindQuaternionSlerp(
+    q1,
+    q2,
+    amount
+  )
+}
+raylib.QuaternionSlerp = QuaternionSlerp
+
+function QuaternionFromVector3ToVector3(from, to) {
+  return r.BindQuaternionFromVector3ToVector3(
+    from.x,
+    from.y,
+    from.z,
+    to.x,
+    to.y,
+    to.z
+  )
+}
+raylib.QuaternionFromVector3ToVector3 = QuaternionFromVector3ToVector3
+
+function QuaternionFromMatrix(mat) {
+  return r.BindQuaternionFromMatrix(
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.QuaternionFromMatrix = QuaternionFromMatrix
+
+function QuaternionToMatrix(q) {
+  return r.BindQuaternionToMatrix(
+    q
+  )
+}
+raylib.QuaternionToMatrix = QuaternionToMatrix
+
+function QuaternionFromAxisAngle(axis, angle) {
+  return r.BindQuaternionFromAxisAngle(
+    axis.x,
+    axis.y,
+    axis.z,
+    angle
+  )
+}
+raylib.QuaternionFromAxisAngle = QuaternionFromAxisAngle
+
+function QuaternionToAxisAngle(q, outAxis, outAngle) {
+  return r.BindQuaternionToAxisAngle(
+    q,
+    outAxis,
+    outAngle
+  )
+}
+raylib.QuaternionToAxisAngle = QuaternionToAxisAngle
+
+function QuaternionFromEuler(pitch, yaw, roll) {
+  return r.BindQuaternionFromEuler(
+    pitch,
+    yaw,
+    roll
+  )
+}
+raylib.QuaternionFromEuler = QuaternionFromEuler
+
+function QuaternionToEuler(q) {
+  return r.BindQuaternionToEuler(
+    q
+  )
+}
+raylib.QuaternionToEuler = QuaternionToEuler
+
+function QuaternionTransform(q, mat) {
+  return r.BindQuaternionTransform(
+    q,
+    mat.m0,
+    mat.m4,
+    mat.m8,
+    mat.m12,
+    mat.m1,
+    mat.m5,
+    mat.m9,
+    mat.m13,
+    mat.m2,
+    mat.m6,
+    mat.m10,
+    mat.m14,
+    mat.m3,
+    mat.m7,
+    mat.m11,
+    mat.m15
+  )
+}
+raylib.QuaternionTransform = QuaternionTransform
+
+/**
+ * Enable gui controls (global state)
+ *
+ * @return {undefined}
+ */
+function GuiEnable() {
+  return r.BindGuiEnable()
+}
+raylib.GuiEnable = GuiEnable
+
+/**
+ * Disable gui controls (global state)
+ *
+ * @return {undefined}
+ */
+function GuiDisable() {
+  return r.BindGuiDisable()
+}
+raylib.GuiDisable = GuiDisable
+
+/**
+ * Lock gui controls (global state)
+ *
+ * @return {undefined}
+ */
+function GuiLock() {
+  return r.BindGuiLock()
+}
+raylib.GuiLock = GuiLock
+
+/**
+ * Unlock gui controls (global state)
+ *
+ * @return {undefined}
+ */
+function GuiUnlock() {
+  return r.BindGuiUnlock()
+}
+raylib.GuiUnlock = GuiUnlock
+
+/**
+ * Check if gui is locked (global state)
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiIsLocked() {
+  return r.BindGuiIsLocked()
+}
+raylib.GuiIsLocked = GuiIsLocked
+
+/**
+ * Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f
+ *
+ * @param {number} alpha
+ *
+ * @return {undefined}
+ */
+function GuiFade(alpha) {
+  return r.BindGuiFade(
+    alpha
+  )
+}
+raylib.GuiFade = GuiFade
+
+/**
+ * Set gui state (global state)
+ *
+ * @param {number} state
+ *
+ * @return {undefined}
+ */
+function GuiSetState(state) {
+  return r.BindGuiSetState(
+    state
+  )
+}
+raylib.GuiSetState = GuiSetState
+
+/**
+ * Get gui state (global state)
+ *
+ * @return {number} The resulting int.
+ */
+function GuiGetState() {
+  return r.BindGuiGetState()
+}
+raylib.GuiGetState = GuiGetState
+
+/**
+ * Set gui custom font (global state)
+ *
+ * @param {Font} font
+ *
+ * @return {undefined}
+ */
+function GuiSetFont(font) {
+  return r.BindGuiSetFont(
+    font.baseSize,
+    font.glyphCount,
+    font.glyphPadding,
+    font.texture.id,
+    font.texture.width,
+    font.texture.height,
+    font.texture.mipmaps,
+    font.texture.format,
+    font.recs,
+    font.glyphs
+  )
+}
+raylib.GuiSetFont = GuiSetFont
+
+/**
+ * Get gui custom font (global state)
+ *
+ * @return {Font} The resulting Font.
+ */
+function GuiGetFont() {
+  return r.BindGuiGetFont()
+}
+raylib.GuiGetFont = GuiGetFont
+
+/**
+ * Set one style property
+ *
+ * @param {number} control
+ * @param {number} property
+ * @param {number} value
+ *
+ * @return {undefined}
+ */
+function GuiSetStyle(control, property, value) {
+  return r.BindGuiSetStyle(
+    control,
+    property,
+    value
+  )
+}
+raylib.GuiSetStyle = GuiSetStyle
+
+/**
+ * Get one style property
+ *
+ * @param {number} control
+ * @param {number} property
+ *
+ * @return {number} The resulting int.
+ */
+function GuiGetStyle(control, property) {
+  return r.BindGuiGetStyle(
+    control,
+    property
+  )
+}
+raylib.GuiGetStyle = GuiGetStyle
+
+/**
+ * Window Box control, shows a window that can be closed
+ *
+ * @param {Rectangle} bounds
+ * @param {string} title
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiWindowBox(bounds, title) {
+  return r.BindGuiWindowBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    title
+  )
+}
+raylib.GuiWindowBox = GuiWindowBox
+
+/**
+ * Group Box control with text name
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {undefined}
+ */
+function GuiGroupBox(bounds, text) {
+  return r.BindGuiGroupBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiGroupBox = GuiGroupBox
+
+/**
+ * Line separator control, could contain text
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {undefined}
+ */
+function GuiLine(bounds, text) {
+  return r.BindGuiLine(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiLine = GuiLine
+
+/**
+ * Panel control, useful to group controls
+ *
+ * @param {Rectangle} bounds
+ *
+ * @return {undefined}
+ */
+function GuiPanel(bounds) {
+  return r.BindGuiPanel(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height
+  )
+}
+raylib.GuiPanel = GuiPanel
+
+/**
+ * Scroll Panel control
+ *
+ * @param {Rectangle} bounds
+ * @param {Rectangle} content
+ * @param {number} scroll
+ *
+ * @return {Rectangle} The resulting Rectangle.
+ */
+function GuiScrollPanel(bounds, content, scroll) {
+  return r.BindGuiScrollPanel(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    content.x,
+    content.y,
+    content.width,
+    content.height,
+    scroll
+  )
+}
+raylib.GuiScrollPanel = GuiScrollPanel
+
+/**
+ * Label control, shows text
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {undefined}
+ */
+function GuiLabel(bounds, text) {
+  return r.BindGuiLabel(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiLabel = GuiLabel
+
+/**
+ * Button control, returns true when clicked
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiButton(bounds, text) {
+  return r.BindGuiButton(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiButton = GuiButton
+
+/**
+ * Label button control, show true when clicked
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiLabelButton(bounds, text) {
+  return r.BindGuiLabelButton(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiLabelButton = GuiLabelButton
+
+/**
+ * Toggle Button control, returns true when active
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {boolean} active
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiToggle(bounds, text, active) {
+  return r.BindGuiToggle(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    active
+  )
+}
+raylib.GuiToggle = GuiToggle
+
+/**
+ * Toggle Group control, returns active toggle index
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} active
+ *
+ * @return {number} The resulting int.
+ */
+function GuiToggleGroup(bounds, text, active) {
+  return r.BindGuiToggleGroup(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    active
+  )
+}
+raylib.GuiToggleGroup = GuiToggleGroup
+
+/**
+ * Check Box control, returns true when active
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {boolean} checked
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiCheckBox(bounds, text, checked) {
+  return r.BindGuiCheckBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    checked
+  )
+}
+raylib.GuiCheckBox = GuiCheckBox
+
+/**
+ * Combo Box control, returns selected item index
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} active
+ *
+ * @return {number} The resulting int.
+ */
+function GuiComboBox(bounds, text, active) {
+  return r.BindGuiComboBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    active
+  )
+}
+raylib.GuiComboBox = GuiComboBox
+
+/**
+ * Dropdown Box control, returns selected item
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} active
+ * @param {boolean} editMode
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiDropdownBox(bounds, text, active, editMode) {
+  return r.BindGuiDropdownBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    active,
+    editMode
+  )
+}
+raylib.GuiDropdownBox = GuiDropdownBox
+
+/**
+ * Spinner control, returns selected value
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ * @param {boolean} editMode
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiSpinner(bounds, text, value, minValue, maxValue, editMode) {
+  return r.BindGuiSpinner(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    value,
+    minValue,
+    maxValue,
+    editMode
+  )
+}
+raylib.GuiSpinner = GuiSpinner
+
+/**
+ * Value Box control, updates input text with numbers
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ * @param {boolean} editMode
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiValueBox(bounds, text, value, minValue, maxValue, editMode) {
+  return r.BindGuiValueBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    value,
+    minValue,
+    maxValue,
+    editMode
+  )
+}
+raylib.GuiValueBox = GuiValueBox
+
+/**
+ * Text Box control, updates input text
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} textSize
+ * @param {boolean} editMode
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiTextBox(bounds, text, textSize, editMode) {
+  return r.BindGuiTextBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    textSize,
+    editMode
+  )
+}
+raylib.GuiTextBox = GuiTextBox
+
+/**
+ * Text Box control with multiple lines
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} textSize
+ * @param {boolean} editMode
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiTextBoxMulti(bounds, text, textSize, editMode) {
+  return r.BindGuiTextBoxMulti(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    textSize,
+    editMode
+  )
+}
+raylib.GuiTextBoxMulti = GuiTextBoxMulti
+
+/**
+ * Slider control, returns selected value
+ *
+ * @param {Rectangle} bounds
+ * @param {string} textLeft
+ * @param {string} textRight
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ *
+ * @return {number} The resulting float.
+ */
+function GuiSlider(bounds, textLeft, textRight, value, minValue, maxValue) {
+  return r.BindGuiSlider(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    textLeft,
+    textRight,
+    value,
+    minValue,
+    maxValue
+  )
+}
+raylib.GuiSlider = GuiSlider
+
+/**
+ * Slider Bar control, returns selected value
+ *
+ * @param {Rectangle} bounds
+ * @param {string} textLeft
+ * @param {string} textRight
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ *
+ * @return {number} The resulting float.
+ */
+function GuiSliderBar(bounds, textLeft, textRight, value, minValue, maxValue) {
+  return r.BindGuiSliderBar(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    textLeft,
+    textRight,
+    value,
+    minValue,
+    maxValue
+  )
+}
+raylib.GuiSliderBar = GuiSliderBar
+
+/**
+ * Progress Bar control, shows current progress value
+ *
+ * @param {Rectangle} bounds
+ * @param {string} textLeft
+ * @param {string} textRight
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ *
+ * @return {number} The resulting float.
+ */
+function GuiProgressBar(bounds, textLeft, textRight, value, minValue, maxValue) {
+  return r.BindGuiProgressBar(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    textLeft,
+    textRight,
+    value,
+    minValue,
+    maxValue
+  )
+}
+raylib.GuiProgressBar = GuiProgressBar
+
+/**
+ * Status Bar control, shows info text
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {undefined}
+ */
+function GuiStatusBar(bounds, text) {
+  return r.BindGuiStatusBar(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiStatusBar = GuiStatusBar
+
+/**
+ * Dummy control for placeholders
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ *
+ * @return {undefined}
+ */
+function GuiDummyRec(bounds, text) {
+  return r.BindGuiDummyRec(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text
+  )
+}
+raylib.GuiDummyRec = GuiDummyRec
+
+/**
+ * Scroll Bar control
+ *
+ * @param {Rectangle} bounds
+ * @param {number} value
+ * @param {number} minValue
+ * @param {number} maxValue
+ *
+ * @return {number} The resulting int.
+ */
+function GuiScrollBar(bounds, value, minValue, maxValue) {
+  return r.BindGuiScrollBar(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    value,
+    minValue,
+    maxValue
+  )
+}
+raylib.GuiScrollBar = GuiScrollBar
+
+/**
+ * Grid control
+ *
+ * @param {Rectangle} bounds
+ * @param {number} spacing
+ * @param {number} subdivs
+ *
+ * @return {Vector2} The resulting Vector2.
+ */
+function GuiGrid(bounds, spacing, subdivs) {
+  return r.BindGuiGrid(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    spacing,
+    subdivs
+  )
+}
+raylib.GuiGrid = GuiGrid
+
+/**
+ * List View control, returns selected list item index
+ *
+ * @param {Rectangle} bounds
+ * @param {string} text
+ * @param {number} scrollIndex
+ * @param {number} active
+ *
+ * @return {number} The resulting int.
+ */
+function GuiListView(bounds, text, scrollIndex, active) {
+  return r.BindGuiListView(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    scrollIndex,
+    active
+  )
+}
+raylib.GuiListView = GuiListView
+
+/**
+ * List View with extended parameters
+ *
+ * @param {Rectangle} bounds
+ * @param {number} text
+ * @param {number} count
+ * @param {number} focus
+ * @param {number} scrollIndex
+ * @param {number} active
+ *
+ * @return {number} The resulting int.
+ */
+function GuiListViewEx(bounds, text, count, focus, scrollIndex, active) {
+  return r.BindGuiListViewEx(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    text,
+    count,
+    focus,
+    scrollIndex,
+    active
+  )
+}
+raylib.GuiListViewEx = GuiListViewEx
+
+/**
+ * Message Box control, displays a message
+ *
+ * @param {Rectangle} bounds
+ * @param {string} title
+ * @param {string} message
+ * @param {string} buttons
+ *
+ * @return {number} The resulting int.
+ */
+function GuiMessageBox(bounds, title, message, buttons) {
+  return r.BindGuiMessageBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    title,
+    message,
+    buttons
+  )
+}
+raylib.GuiMessageBox = GuiMessageBox
+
+/**
+ * Text Input Box control, ask for text
+ *
+ * @param {Rectangle} bounds
+ * @param {string} title
+ * @param {string} message
+ * @param {string} buttons
+ * @param {string} text
+ *
+ * @return {number} The resulting int.
+ */
+function GuiTextInputBox(bounds, title, message, buttons, text) {
+  return r.BindGuiTextInputBox(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    title,
+    message,
+    buttons,
+    text
+  )
+}
+raylib.GuiTextInputBox = GuiTextInputBox
+
+/**
+ * Color Picker control (multiple color controls)
+ *
+ * @param {Rectangle} bounds
+ * @param {Color} color
+ *
+ * @return {Color} The resulting Color.
+ */
+function GuiColorPicker(bounds, color) {
+  return r.BindGuiColorPicker(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+}
+raylib.GuiColorPicker = GuiColorPicker
+
+/**
+ * Color Panel control
+ *
+ * @param {Rectangle} bounds
+ * @param {Color} color
+ *
+ * @return {Color} The resulting Color.
+ */
+function GuiColorPanel(bounds, color) {
+  return r.BindGuiColorPanel(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+}
+raylib.GuiColorPanel = GuiColorPanel
+
+/**
+ * Color Bar Alpha control
+ *
+ * @param {Rectangle} bounds
+ * @param {number} alpha
+ *
+ * @return {number} The resulting float.
+ */
+function GuiColorBarAlpha(bounds, alpha) {
+  return r.BindGuiColorBarAlpha(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    alpha
+  )
+}
+raylib.GuiColorBarAlpha = GuiColorBarAlpha
+
+/**
+ * Color Bar Hue control
+ *
+ * @param {Rectangle} bounds
+ * @param {number} value
+ *
+ * @return {number} The resulting float.
+ */
+function GuiColorBarHue(bounds, value) {
+  return r.BindGuiColorBarHue(
+    bounds.x,
+    bounds.y,
+    bounds.width,
+    bounds.height,
+    value
+  )
+}
+raylib.GuiColorBarHue = GuiColorBarHue
+
+/**
+ * Load style file over global style variable (.rgs)
+ *
+ * @param {string} fileName
+ *
+ * @return {undefined}
+ */
+function GuiLoadStyle(fileName) {
+  return r.BindGuiLoadStyle(
+    fileName
+  )
+}
+raylib.GuiLoadStyle = GuiLoadStyle
+
+/**
+ * Load style default over global style
+ *
+ * @return {undefined}
+ */
+function GuiLoadStyleDefault() {
+  return r.BindGuiLoadStyleDefault()
+}
+raylib.GuiLoadStyleDefault = GuiLoadStyleDefault
+
+/**
+ * Get text with icon id prepended (if supported)
+ *
+ * @param {number} iconId
+ * @param {string} text
+ *
+ * @return {string} The resulting const char *.
+ */
+function GuiIconText(iconId, text) {
+  return r.BindGuiIconText(
+    iconId,
+    text
+  )
+}
+raylib.GuiIconText = GuiIconText
+
+function GuiDrawIcon(iconId, posX, posY, pixelSize, color) {
+  return r.BindGuiDrawIcon(
+    iconId,
+    posX,
+    posY,
+    pixelSize,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+}
+raylib.GuiDrawIcon = GuiDrawIcon
+
+/**
+ * Get full icons data pointer
+ *
+ * @return {number} The resulting unsigned int *.
+ */
+function GuiGetIcons() {
+  return r.BindGuiGetIcons()
+}
+raylib.GuiGetIcons = GuiGetIcons
+
+/**
+ * Get icon bit data
+ *
+ * @param {number} iconId
+ *
+ * @return {number} The resulting unsigned int *.
+ */
+function GuiGetIconData(iconId) {
+  return r.BindGuiGetIconData(
+    iconId
+  )
+}
+raylib.GuiGetIconData = GuiGetIconData
+
+/**
+ * Set icon bit data
+ *
+ * @param {number} iconId
+ * @param {number} data
+ *
+ * @return {undefined}
+ */
+function GuiSetIconData(iconId, data) {
+  return r.BindGuiSetIconData(
+    iconId,
+    data
+  )
+}
+raylib.GuiSetIconData = GuiSetIconData
+
+/**
+ * Set icon pixel value
+ *
+ * @param {number} iconId
+ * @param {number} x
+ * @param {number} y
+ *
+ * @return {undefined}
+ */
+function GuiSetIconPixel(iconId, x, y) {
+  return r.BindGuiSetIconPixel(
+    iconId,
+    x,
+    y
+  )
+}
+raylib.GuiSetIconPixel = GuiSetIconPixel
+
+/**
+ * Clear icon pixel value
+ *
+ * @param {number} iconId
+ * @param {number} x
+ * @param {number} y
+ *
+ * @return {undefined}
+ */
+function GuiClearIconPixel(iconId, x, y) {
+  return r.BindGuiClearIconPixel(
+    iconId,
+    x,
+    y
+  )
+}
+raylib.GuiClearIconPixel = GuiClearIconPixel
+
+/**
+ * Check icon pixel value
+ *
+ * @param {number} iconId
+ * @param {number} x
+ * @param {number} y
+ *
+ * @return {boolean} The resulting bool.
+ */
+function GuiCheckIconPixel(iconId, x, y) {
+  return r.BindGuiCheckIconPixel(
+    iconId,
+    x,
+    y
+  )
+}
+raylib.GuiCheckIconPixel = GuiCheckIconPixel
+
+/**
+ * Update camera position for selected mode
+ *
+ * @param {Camera} camera
+ *
+ * @return {undefined}
+ */
+function UpdateCamera(camera) {
+  const obj = r.BindUpdateCamera(
+    camera.position.x,
+    camera.position.y,
+    camera.position.z,
+    camera.target.x,
+    camera.target.y,
+    camera.target.z,
+    camera.up.x,
+    camera.up.y,
+    camera.up.z,
+    camera.fovy,
+    camera.projection
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      camera[key] = obj[key]
+    }
+  }
+}
+raylib.UpdateCamera = UpdateCamera
+
+/**
+ * Convert image data to desired format
+ *
+ * @param {Image} image
+ * @param {number} newFormat
+ *
+ * @return {undefined}
+ */
+function ImageFormat(image, newFormat) {
+  const obj = r.BindImageFormat(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    newFormat
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageFormat = ImageFormat
+
+/**
+ * Convert image to POT (power-of-two)
+ *
+ * @param {Image} image
+ * @param {Color} fill
+ *
+ * @return {undefined}
+ */
+function ImageToPOT(image, fill) {
+  const obj = r.BindImageToPOT(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    fill.r,
+    fill.g,
+    fill.b,
+    fill.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageToPOT = ImageToPOT
+
+/**
+ * Crop an image to a defined rectangle
+ *
+ * @param {Image} image
+ * @param {Rectangle} crop
+ *
+ * @return {undefined}
+ */
+function ImageCrop(image, crop) {
+  const obj = r.BindImageCrop(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    crop.x,
+    crop.y,
+    crop.width,
+    crop.height
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageCrop = ImageCrop
+
+/**
+ * Crop image depending on alpha value
+ *
+ * @param {Image} image
+ * @param {number} threshold
+ *
+ * @return {undefined}
+ */
+function ImageAlphaCrop(image, threshold) {
+  const obj = r.BindImageAlphaCrop(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    threshold
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageAlphaCrop = ImageAlphaCrop
+
+/**
+ * Clear alpha channel to desired color
+ *
+ * @param {Image} image
+ * @param {Color} color
+ * @param {number} threshold
+ *
+ * @return {undefined}
+ */
+function ImageAlphaClear(image, color, threshold) {
+  const obj = r.BindImageAlphaClear(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    color.r,
+    color.g,
+    color.b,
+    color.a,
+    threshold
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageAlphaClear = ImageAlphaClear
+
+/**
+ * Apply alpha mask to image
+ *
+ * @param {Image} image
+ * @param {Image} alphaMask
+ *
+ * @return {undefined}
+ */
+function ImageAlphaMask(image, alphaMask) {
+  const obj = r.BindImageAlphaMask(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    alphaMask.data,
+    alphaMask.width,
+    alphaMask.height,
+    alphaMask.mipmaps,
+    alphaMask.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageAlphaMask = ImageAlphaMask
+
+/**
+ * Premultiply alpha channel
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageAlphaPremultiply(image) {
+  const obj = r.BindImageAlphaPremultiply(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageAlphaPremultiply = ImageAlphaPremultiply
+
+/**
+ * Resize image (Bicubic scaling algorithm)
+ *
+ * @param {Image} image
+ * @param {number} newWidth
+ * @param {number} newHeight
+ *
+ * @return {undefined}
+ */
+function ImageResize(image, newWidth, newHeight) {
+  const obj = r.BindImageResize(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    newWidth,
+    newHeight
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageResize = ImageResize
+
+/**
+ * Resize image (Nearest-Neighbor scaling algorithm)
+ *
+ * @param {Image} image
+ * @param {number} newWidth
+ * @param {number} newHeight
+ *
+ * @return {undefined}
+ */
+function ImageResizeNN(image, newWidth, newHeight) {
+  const obj = r.BindImageResizeNN(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    newWidth,
+    newHeight
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageResizeNN = ImageResizeNN
+
+/**
+ * Resize canvas and fill with color
+ *
+ * @param {Image} image
+ * @param {number} newWidth
+ * @param {number} newHeight
+ * @param {number} offsetX
+ * @param {number} offsetY
+ * @param {Color} fill
+ *
+ * @return {undefined}
+ */
+function ImageResizeCanvas(image, newWidth, newHeight, offsetX, offsetY, fill) {
+  const obj = r.BindImageResizeCanvas(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    newWidth,
+    newHeight,
+    offsetX,
+    offsetY,
+    fill.r,
+    fill.g,
+    fill.b,
+    fill.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageResizeCanvas = ImageResizeCanvas
+
+/**
+ * Compute all mipmap levels for a provided image
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageMipmaps(image) {
+  const obj = r.BindImageMipmaps(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageMipmaps = ImageMipmaps
+
+/**
+ * Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
+ *
+ * @param {Image} image
+ * @param {number} rBpp
+ * @param {number} gBpp
+ * @param {number} bBpp
+ * @param {number} aBpp
+ *
+ * @return {undefined}
+ */
+function ImageDither(image, rBpp, gBpp, bBpp, aBpp) {
+  const obj = r.BindImageDither(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    rBpp,
+    gBpp,
+    bBpp,
+    aBpp
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDither = ImageDither
+
+/**
+ * Flip image vertically
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageFlipVertical(image) {
+  const obj = r.BindImageFlipVertical(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageFlipVertical = ImageFlipVertical
+
+/**
+ * Flip image horizontally
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageFlipHorizontal(image) {
+  const obj = r.BindImageFlipHorizontal(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageFlipHorizontal = ImageFlipHorizontal
+
+/**
+ * Rotate image clockwise 90deg
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageRotateCW(image) {
+  const obj = r.BindImageRotateCW(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageRotateCW = ImageRotateCW
+
+/**
+ * Rotate image counter-clockwise 90deg
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageRotateCCW(image) {
+  const obj = r.BindImageRotateCCW(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageRotateCCW = ImageRotateCCW
+
+/**
+ * Modify image color: tint
+ *
+ * @param {Image} image
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageColorTint(image, color) {
+  const obj = r.BindImageColorTint(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorTint = ImageColorTint
+
+/**
+ * Modify image color: invert
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageColorInvert(image) {
+  const obj = r.BindImageColorInvert(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorInvert = ImageColorInvert
+
+/**
+ * Modify image color: grayscale
+ *
+ * @param {Image} image
+ *
+ * @return {undefined}
+ */
+function ImageColorGrayscale(image) {
+  const obj = r.BindImageColorGrayscale(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorGrayscale = ImageColorGrayscale
+
+/**
+ * Modify image color: contrast (-100 to 100)
+ *
+ * @param {Image} image
+ * @param {number} contrast
+ *
+ * @return {undefined}
+ */
+function ImageColorContrast(image, contrast) {
+  const obj = r.BindImageColorContrast(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    contrast
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorContrast = ImageColorContrast
+
+/**
+ * Modify image color: brightness (-255 to 255)
+ *
+ * @param {Image} image
+ * @param {number} brightness
+ *
+ * @return {undefined}
+ */
+function ImageColorBrightness(image, brightness) {
+  const obj = r.BindImageColorBrightness(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    brightness
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorBrightness = ImageColorBrightness
+
+/**
+ * Modify image color: replace color
+ *
+ * @param {Image} image
+ * @param {Color} color
+ * @param {Color} replace
+ *
+ * @return {undefined}
+ */
+function ImageColorReplace(image, color, replace) {
+  const obj = r.BindImageColorReplace(
+    image.data,
+    image.width,
+    image.height,
+    image.mipmaps,
+    image.format,
+    color.r,
+    color.g,
+    color.b,
+    color.a,
+    replace.r,
+    replace.g,
+    replace.b,
+    replace.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      image[key] = obj[key]
+    }
+  }
+}
+raylib.ImageColorReplace = ImageColorReplace
+
+/**
+ * Clear image background with given color
+ *
+ * @param {Image} dst
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageClearBackground(dst, color) {
+  const obj = r.BindImageClearBackground(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageClearBackground = ImageClearBackground
+
+/**
+ * Draw pixel within an image
+ *
+ * @param {Image} dst
+ * @param {number} posX
+ * @param {number} posY
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawPixel(dst, posX, posY, color) {
+  const obj = r.BindImageDrawPixel(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    posX,
+    posY,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawPixel = ImageDrawPixel
+
+/**
+ * Draw pixel within an image (Vector version)
+ *
+ * @param {Image} dst
+ * @param {Vector2} position
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawPixelV(dst, position, color) {
+  const obj = r.BindImageDrawPixelV(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    position.x,
+    position.y,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawPixelV = ImageDrawPixelV
+
+/**
+ * Draw line within an image
+ *
+ * @param {Image} dst
+ * @param {number} startPosX
+ * @param {number} startPosY
+ * @param {number} endPosX
+ * @param {number} endPosY
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawLine(dst, startPosX, startPosY, endPosX, endPosY, color) {
+  const obj = r.BindImageDrawLine(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    startPosX,
+    startPosY,
+    endPosX,
+    endPosY,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawLine = ImageDrawLine
+
+/**
+ * Draw line within an image (Vector version)
+ *
+ * @param {Image} dst
+ * @param {Vector2} start
+ * @param {Vector2} end
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawLineV(dst, start, end, color) {
+  const obj = r.BindImageDrawLineV(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    start.x,
+    start.y,
+    end.x,
+    end.y,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawLineV = ImageDrawLineV
+
+/**
+ * Draw circle within an image
+ *
+ * @param {Image} dst
+ * @param {number} centerX
+ * @param {number} centerY
+ * @param {number} radius
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawCircle(dst, centerX, centerY, radius, color) {
+  const obj = r.BindImageDrawCircle(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    centerX,
+    centerY,
+    radius,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawCircle = ImageDrawCircle
+
+/**
+ * Draw circle within an image (Vector version)
+ *
+ * @param {Image} dst
+ * @param {Vector2} center
+ * @param {number} radius
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawCircleV(dst, center, radius, color) {
+  const obj = r.BindImageDrawCircleV(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    center.x,
+    center.y,
+    radius,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawCircleV = ImageDrawCircleV
+
+/**
+ * Draw rectangle within an image
+ *
+ * @param {Image} dst
+ * @param {number} posX
+ * @param {number} posY
+ * @param {number} width
+ * @param {number} height
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawRectangle(dst, posX, posY, width, height, color) {
+  const obj = r.BindImageDrawRectangle(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    posX,
+    posY,
+    width,
+    height,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawRectangle = ImageDrawRectangle
+
+/**
+ * Draw rectangle within an image (Vector version)
+ *
+ * @param {Image} dst
+ * @param {Vector2} position
+ * @param {Vector2} size
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawRectangleV(dst, position, size, color) {
+  const obj = r.BindImageDrawRectangleV(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    position.x,
+    position.y,
+    size.x,
+    size.y,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawRectangleV = ImageDrawRectangleV
+
+/**
+ * Draw rectangle within an image
+ *
+ * @param {Image} dst
+ * @param {Rectangle} rec
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawRectangleRec(dst, rec, color) {
+  const obj = r.BindImageDrawRectangleRec(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    rec.x,
+    rec.y,
+    rec.width,
+    rec.height,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawRectangleRec = ImageDrawRectangleRec
+
+/**
+ * Draw rectangle lines within an image
+ *
+ * @param {Image} dst
+ * @param {Rectangle} rec
+ * @param {number} thick
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawRectangleLines(dst, rec, thick, color) {
+  const obj = r.BindImageDrawRectangleLines(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    rec.x,
+    rec.y,
+    rec.width,
+    rec.height,
+    thick,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawRectangleLines = ImageDrawRectangleLines
+
+/**
+ * Draw a source image within a destination image (tint applied to source)
+ *
+ * @param {Image} dst
+ * @param {Image} src
+ * @param {Rectangle} srcRec
+ * @param {Rectangle} dstRec
+ * @param {Color} tint
+ *
+ * @return {undefined}
+ */
+function ImageDraw(dst, src, srcRec, dstRec, tint) {
+  const obj = r.BindImageDraw(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    src.data,
+    src.width,
+    src.height,
+    src.mipmaps,
+    src.format,
+    srcRec.x,
+    srcRec.y,
+    srcRec.width,
+    srcRec.height,
+    dstRec.x,
+    dstRec.y,
+    dstRec.width,
+    dstRec.height,
+    tint.r,
+    tint.g,
+    tint.b,
+    tint.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDraw = ImageDraw
+
+/**
+ * Draw text (using default font) within an image (destination)
+ *
+ * @param {Image} dst
+ * @param {string} text
+ * @param {number} posX
+ * @param {number} posY
+ * @param {number} fontSize
+ * @param {Color} color
+ *
+ * @return {undefined}
+ */
+function ImageDrawText(dst, text, posX, posY, fontSize, color) {
+  const obj = r.BindImageDrawText(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    text,
+    posX,
+    posY,
+    fontSize,
+    color.r,
+    color.g,
+    color.b,
+    color.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawText = ImageDrawText
+
+/**
+ * Draw text (custom sprite font) within an image (destination)
+ *
+ * @param {Image} dst
+ * @param {Font} font
+ * @param {string} text
+ * @param {Vector2} position
+ * @param {number} fontSize
+ * @param {number} spacing
+ * @param {Color} tint
+ *
+ * @return {undefined}
+ */
+function ImageDrawTextEx(dst, font, text, position, fontSize, spacing, tint) {
+  const obj = r.BindImageDrawTextEx(
+    dst.data,
+    dst.width,
+    dst.height,
+    dst.mipmaps,
+    dst.format,
+    font.baseSize,
+    font.glyphCount,
+    font.glyphPadding,
+    font.texture.id,
+    font.texture.width,
+    font.texture.height,
+    font.texture.mipmaps,
+    font.texture.format,
+    font.recs,
+    font.glyphs,
+    text,
+    position.x,
+    position.y,
+    fontSize,
+    spacing,
+    tint.r,
+    tint.g,
+    tint.b,
+    tint.a
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      dst[key] = obj[key]
+    }
+  }
+}
+raylib.ImageDrawTextEx = ImageDrawTextEx
+
+/**
+ * Generate GPU mipmaps for a texture
+ *
+ * @param {Texture2D} texture
+ *
+ * @return {undefined}
+ */
+function GenTextureMipmaps(texture) {
+  const obj = r.BindGenTextureMipmaps(
+    texture.id,
+    texture.width,
+    texture.height,
+    texture.mipmaps,
+    texture.format
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      texture[key] = obj[key]
+    }
+  }
+}
+raylib.GenTextureMipmaps = GenTextureMipmaps
+
+/**
+ * Upload mesh vertex data in GPU and provide VAO/VBO ids
+ *
+ * @param {Mesh} mesh
+ * @param {boolean} dynamic
+ *
+ * @return {undefined}
+ */
+function UploadMesh(mesh, dynamic) {
+  const obj = r.BindUploadMesh(
+    mesh.vertexCount,
+    mesh.triangleCount,
+    mesh.vertices,
+    mesh.texcoords,
+    mesh.texcoords2,
+    mesh.normals,
+    mesh.tangents,
+    mesh.colors,
+    mesh.indices,
+    mesh.animVertices,
+    mesh.animNormals,
+    mesh.boneIds,
+    mesh.boneWeights,
+    mesh.vaoId,
+    mesh.vboId,
+    dynamic
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      mesh[key] = obj[key]
+    }
+  }
+}
+raylib.UploadMesh = UploadMesh
+
+/**
+ * Compute mesh tangents
+ *
+ * @param {Mesh} mesh
+ *
+ * @return {undefined}
+ */
+function GenMeshTangents(mesh) {
+  const obj = r.BindGenMeshTangents(
+    mesh.vertexCount,
+    mesh.triangleCount,
+    mesh.vertices,
+    mesh.texcoords,
+    mesh.texcoords2,
+    mesh.normals,
+    mesh.tangents,
+    mesh.colors,
+    mesh.indices,
+    mesh.animVertices,
+    mesh.animNormals,
+    mesh.boneIds,
+    mesh.boneWeights,
+    mesh.vaoId,
+    mesh.vboId
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      mesh[key] = obj[key]
+    }
+  }
+}
+raylib.GenMeshTangents = GenMeshTangents
+
+/**
+ * Compute mesh binormals
+ *
+ * @param {Mesh} mesh
+ *
+ * @return {undefined}
+ */
+function GenMeshBinormals(mesh) {
+  const obj = r.BindGenMeshBinormals(
+    mesh.vertexCount,
+    mesh.triangleCount,
+    mesh.vertices,
+    mesh.texcoords,
+    mesh.texcoords2,
+    mesh.normals,
+    mesh.tangents,
+    mesh.colors,
+    mesh.indices,
+    mesh.animVertices,
+    mesh.animNormals,
+    mesh.boneIds,
+    mesh.boneWeights,
+    mesh.vaoId,
+    mesh.vboId
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      mesh[key] = obj[key]
+    }
+  }
+}
+raylib.GenMeshBinormals = GenMeshBinormals
+
+/**
+ * Set material for a mesh
+ *
+ * @param {Model} model
+ * @param {number} meshId
+ * @param {number} materialId
+ *
+ * @return {undefined}
+ */
+function SetModelMeshMaterial(model, meshId, materialId) {
+  const obj = r.BindSetModelMeshMaterial(
+    model.transform.m0,
+    model.transform.m4,
+    model.transform.m8,
+    model.transform.m12,
+    model.transform.m1,
+    model.transform.m5,
+    model.transform.m9,
+    model.transform.m13,
+    model.transform.m2,
+    model.transform.m6,
+    model.transform.m10,
+    model.transform.m14,
+    model.transform.m3,
+    model.transform.m7,
+    model.transform.m11,
+    model.transform.m15,
+    model.meshCount,
+    model.materialCount,
+    model.meshes,
+    model.materials,
+    model.meshMaterial,
+    model.boneCount,
+    model.bones,
+    model.bindPose,
+    meshId,
+    materialId
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      model[key] = obj[key]
+    }
+  }
+}
+raylib.SetModelMeshMaterial = SetModelMeshMaterial
+
+/**
+ * Convert wave data to desired format
+ *
+ * @param {Wave} wave
+ * @param {number} sampleRate
+ * @param {number} sampleSize
+ * @param {number} channels
+ *
+ * @return {undefined}
+ */
+function WaveFormat(wave, sampleRate, sampleSize, channels) {
+  const obj = r.BindWaveFormat(
+    wave.frameCount,
+    wave.sampleRate,
+    wave.sampleSize,
+    wave.channels,
+    wave.data,
+    sampleRate,
+    sampleSize,
+    channels
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      wave[key] = obj[key]
+    }
+  }
+}
+raylib.WaveFormat = WaveFormat
+
+/**
+ * Crop a wave to defined samples range
+ *
+ * @param {Wave} wave
+ * @param {number} initSample
+ * @param {number} finalSample
+ *
+ * @return {undefined}
+ */
+function WaveCrop(wave, initSample, finalSample) {
+  const obj = r.BindWaveCrop(
+    wave.frameCount,
+    wave.sampleRate,
+    wave.sampleSize,
+    wave.channels,
+    wave.data,
+    initSample,
+    finalSample
+  )
+  if (typeof obj !== 'undefined') {
+    for (const key in obj) {
+      wave[key] = obj[key]
+    }
+  }
+}
+raylib.WaveCrop = WaveCrop
+
+/**
+ * Color, 4 components, R8G8B8A8 (32bit)
+ *
+ * @param {number} r - Color red value
+ * @param {number} g - Color green value
+ * @param {number} b - Color blue value
+ * @param {number} a - Color alpha value
+ *
+ * @return {Color} The new Color.
+ */
+function Color(r,g,b,a) {
+  return {r,g,b,a}
+}
+raylib.Color = Color
+
+/**
+ * Vector2, 2 components
+ *
+ * @param {number} x - Vector x component
+ * @param {number} y - Vector y component
+ *
+ * @return {Vector2} The new Vector2.
+ */
+function Vector2(x,y) {
+  return {x,y}
+}
+raylib.Vector2 = Vector2
+
+/**
+ * Vector3, 3 components
+ *
+ * @param {number} x - Vector x component
+ * @param {number} y - Vector y component
+ * @param {number} z - Vector z component
+ *
+ * @return {Vector3} The new Vector3.
+ */
+function Vector3(x,y,z) {
+  return {x,y,z}
+}
+raylib.Vector3 = Vector3
+
+/**
+ * Vector4, 4 components
+ *
+ * @param {number} x - Vector x component
+ * @param {number} y - Vector y component
+ * @param {number} z - Vector z component
+ * @param {number} w - Vector w component
+ *
+ * @return {Vector4} The new Vector4.
+ */
+function Vector4(x,y,z,w) {
+  return {x,y,z,w}
+}
+raylib.Vector4 = Vector4
+
+/**
+ * Rectangle, 4 components
+ *
+ * @param {number} x - Rectangle top-left corner position x
+ * @param {number} y - Rectangle top-left corner position y
+ * @param {number} width - Rectangle width
+ * @param {number} height - Rectangle height
+ *
+ * @return {Rectangle} The new Rectangle.
+ */
+function Rectangle(x,y,width,height) {
+  return {x,y,width,height}
+}
+raylib.Rectangle = Rectangle
+
+/**
+ * Camera2D, defines position/orientation in 2d space
+ *
+ * @param {Vector2} offset - Camera offset (displacement from target)
+ * @param {Vector2} target - Camera target (rotation and zoom origin)
+ * @param {number} rotation - Camera rotation in degrees
+ * @param {number} zoom - Camera zoom (scaling), should be 1.0f by default
+ *
+ * @return {Camera2D} The new Camera2D.
+ */
+function Camera2D(offset,target,rotation,zoom) {
+  return {offset,target,rotation,zoom}
+}
+raylib.Camera2D = Camera2D
+
+/**
+ * Camera, defines position/orientation in 3d space
+ *
+ * @param {Vector3} position - Camera position
+ * @param {Vector3} target - Camera target it looks-at
+ * @param {Vector3} up - Camera up vector (rotation over its axis)
+ * @param {number} fovy - Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
+ * @param {number} projection - Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
+ *
+ * @return {Camera3D} The new Camera3D.
+ */
+function Camera3D(position,target,up,fovy,projection) {
+  return {position,target,up,fovy,projection}
+}
+raylib.Camera3D = Camera3D
+raylib.Camera = raylib.Camera3D
+
+// WRAPPED TYPED SHADER FUNCTIONS
+
+/**
+ * Set shader uniform value float
+ * 
+ * @param {Shader} shader
+ * @param {number} locIndex
+ * @param {number} value
+ * 
+ * @returns {undefined}
+ */
+function SetShaderFloat(shader, locIndex, value) {
+  return r.BindSetShaderFloat(
+    shader.id,
+    shader.locs,
+    locIndex,
+    value
+  )
+}
+raylib.SetShaderFloat = SetShaderFloat
+
+/**
+ * Set shader uniform value float
+ * 
+ * @param {Shader} shader
+ * @param {number} locIndex
+ * @param {number} value
+ * 
+ * @returns {undefined}
+ */
+function SetShaderInt(shader, locIndex, value) {
+  return r.BindSetShaderInt(
+    shader.id,
+    shader.locs,
+    locIndex,
+    value
+  )
+}
+raylib.SetShaderInt = SetShaderInt
+
+/**
+ * Set shader uniform value vector2
+ * 
+ * @param {Shader} shader
+ * @param {number} locIndex
+ * @param {Vector2} value
+ * 
+ * @returns {undefined}
+ */
+function SetShaderVec2(shader, locIndex, value) {
+  return r.BindSetShaderVec2(
+    shader.id,
+    shader.locs,
+    locIndex,
+    value.x,
+    value.y
+  )
+}
+raylib.SetShaderVec2 = SetShaderVec2
+
+/**
+ * Set shader uniform value vector3
+ * 
+ * @param {Shader} shader
+ * @param {number} locIndex
+ * @param {Vector3} value
+ * 
+ * @returns {undefined}
+ */
+function SetShaderVec3(shader, locIndex, value) {
+  return r.BindSetShaderVec3(
+    shader.id,
+    shader.locs,
+    locIndex,
+    value.x,
+    value.y,
+    value.z
+  )
+}
+raylib.SetShaderVec3 = SetShaderVec3
+
+/**
+ * Set shader uniform value vector4
+ * 
+ * @param {Shader} shader
+ * @param {number} locIndex
+ * @param {Vector4} value
+ * 
+ * @returns {undefined}
+ */
+function SetShaderVec4(shader, locIndex, value) {
+  return r.BindSetShaderVec4(
+    shader.id,
+    shader.locs,
+    locIndex,
+    value.x,
+    value.y,
+    value.z,
+    value.w
+  )
+}
+raylib.SetShaderVec4 = SetShaderVec4
+
+/**
+ * Set to try enabling V-Sync on GPU
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_VSYNC_HINT = 64
+
+/**
+ * Set to run program in fullscreen
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_FULLSCREEN_MODE = 2
+
+/**
+ * Set to allow resizable window
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_RESIZABLE = 4
+
+/**
+ * Set to disable window decoration (frame and buttons)
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_UNDECORATED = 8
+
+/**
+ * Set to hide window
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_HIDDEN = 128
+
+/**
+ * Set to minimize window (iconify)
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_MINIMIZED = 512
+
+/**
+ * Set to maximize window (expanded to monitor)
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_MAXIMIZED = 1024
+
+/**
+ * Set to window non focused
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_UNFOCUSED = 2048
+
+/**
+ * Set to window always on top
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_TOPMOST = 4096
+
+/**
+ * Set to allow windows running while minimized
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_ALWAYS_RUN = 256
+
+/**
+ * Set to allow transparent framebuffer
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_TRANSPARENT = 16
+
+/**
+ * Set to support HighDPI
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_WINDOW_HIGHDPI = 8192
+
+/**
+ * Set to try enabling MSAA 4X
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_MSAA_4X_HINT = 32
+
+/**
+ * Set to try enabling interlaced video format (for V3D)
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.FLAG_INTERLACED_HINT = 65536
+
+/**
+ * Display all logs
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_ALL = 0
+
+/**
+ * Trace logging, intended for internal use only
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_TRACE = 1
+
+/**
+ * Debug logging, used for internal debugging, it should be disabled on release builds
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_DEBUG = 2
+
+/**
+ * Info logging, used for program execution info
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_INFO = 3
+
+/**
+ * Warning logging, used on recoverable failures
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_WARNING = 4
+
+/**
+ * Error logging, used on unrecoverable failures
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_ERROR = 5
+
+/**
+ * Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_FATAL = 6
+
+/**
+ * Disable logging
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.LOG_NONE = 7
+
+/**
+ * Key: NULL, used for no key pressed
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_NULL = 0
+
+/**
+ * Key: '
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_APOSTROPHE = 39
+
+/**
+ * Key: ,
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_COMMA = 44
+
+/**
+ * Key: -
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_MINUS = 45
 
 /**
- * Draw line within an image
+ * Key: .
  *
- * @param {Image} dst
- * @param {number} startPosX
- * @param {number} startPosY
- * @param {number} endPosX
- * @param {number} endPosY
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_PERIOD = 46
+
+/**
+ * Key: /
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawLine(dst, startPosX, startPosY, endPosX, endPosY, color) {
-  const obj = r.BindImageDrawLine(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    startPosX,
-    startPosY,
-    endPosX,
-    endPosY,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawLine = ImageDrawLine
+raylib.KEY_SLASH = 47
 
 /**
- * Draw line within an image (Vector version)
+ * Key: 0
  *
- * @param {Image} dst
- * @param {Vector2} start
- * @param {Vector2} end
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_ZERO = 48
+
+/**
+ * Key: 1
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawLineV(dst, start, end, color) {
-  const obj = r.BindImageDrawLineV(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    start.x,
-    start.y,
-    end.x,
-    end.y,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawLineV = ImageDrawLineV
+raylib.KEY_ONE = 49
 
 /**
- * Draw circle within an image
+ * Key: 2
  *
- * @param {Image} dst
- * @param {number} centerX
- * @param {number} centerY
- * @param {number} radius
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_TWO = 50
+
+/**
+ * Key: 3
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawCircle(dst, centerX, centerY, radius, color) {
-  const obj = r.BindImageDrawCircle(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    centerX,
-    centerY,
-    radius,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawCircle = ImageDrawCircle
+raylib.KEY_THREE = 51
 
 /**
- * Draw circle within an image (Vector version)
+ * Key: 4
  *
- * @param {Image} dst
- * @param {Vector2} center
- * @param {number} radius
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_FOUR = 52
+
+/**
+ * Key: 5
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawCircleV(dst, center, radius, color) {
-  const obj = r.BindImageDrawCircleV(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    center.x,
-    center.y,
-    radius,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawCircleV = ImageDrawCircleV
+raylib.KEY_FIVE = 53
 
 /**
- * Draw rectangle within an image
+ * Key: 6
  *
- * @param {Image} dst
- * @param {number} posX
- * @param {number} posY
- * @param {number} width
- * @param {number} height
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_SIX = 54
+
+/**
+ * Key: 7
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawRectangle(dst, posX, posY, width, height, color) {
-  const obj = r.BindImageDrawRectangle(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    posX,
-    posY,
-    width,
-    height,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawRectangle = ImageDrawRectangle
+raylib.KEY_SEVEN = 55
 
 /**
- * Draw rectangle within an image (Vector version)
+ * Key: 8
  *
- * @param {Image} dst
- * @param {Vector2} position
- * @param {Vector2} size
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_EIGHT = 56
+
+/**
+ * Key: 9
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawRectangleV(dst, position, size, color) {
-  const obj = r.BindImageDrawRectangleV(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    position.x,
-    position.y,
-    size.x,
-    size.y,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawRectangleV = ImageDrawRectangleV
+raylib.KEY_NINE = 57
+
+/**
+ * Key: ;
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_SEMICOLON = 59
 
 /**
- * Draw rectangle within an image
- *
- * @param {Image} dst
- * @param {Rectangle} rec
- * @param {Color} color
+ * Key: =
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawRectangleRec(dst, rec, color) {
-  const obj = r.BindImageDrawRectangleRec(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    rec.x,
-    rec.y,
-    rec.width,
-    rec.height,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawRectangleRec = ImageDrawRectangleRec
+raylib.KEY_EQUAL = 61
 
 /**
- * Draw rectangle lines within an image
+ * Key: A | a
  *
- * @param {Image} dst
- * @param {Rectangle} rec
- * @param {number} thick
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_A = 65
+
+/**
+ * Key: B | b
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawRectangleLines(dst, rec, thick, color) {
-  const obj = r.BindImageDrawRectangleLines(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    rec.x,
-    rec.y,
-    rec.width,
-    rec.height,
-    thick,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawRectangleLines = ImageDrawRectangleLines
+raylib.KEY_B = 66
 
 /**
- * Draw a source image within a destination image (tint applied to source)
+ * Key: C | c
  *
- * @param {Image} dst
- * @param {Image} src
- * @param {Rectangle} srcRec
- * @param {Rectangle} dstRec
- * @param {Color} tint
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_C = 67
+
+/**
+ * Key: D | d
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDraw(dst, src, srcRec, dstRec, tint) {
-  const obj = r.BindImageDraw(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    src.data,
-    src.width,
-    src.height,
-    src.mipmaps,
-    src.format,
-    srcRec.x,
-    srcRec.y,
-    srcRec.width,
-    srcRec.height,
-    dstRec.x,
-    dstRec.y,
-    dstRec.width,
-    dstRec.height,
-    tint.r,
-    tint.g,
-    tint.b,
-    tint.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDraw = ImageDraw
+raylib.KEY_D = 68
 
 /**
- * Draw text (using default font) within an image (destination)
+ * Key: E | e
  *
- * @param {Image} dst
- * @param {string} text
- * @param {number} posX
- * @param {number} posY
- * @param {number} fontSize
- * @param {Color} color
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_E = 69
+
+/**
+ * Key: F | f
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawText(dst, text, posX, posY, fontSize, color) {
-  const obj = r.BindImageDrawText(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    text,
-    posX,
-    posY,
-    fontSize,
-    color.r,
-    color.g,
-    color.b,
-    color.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawText = ImageDrawText
+raylib.KEY_F = 70
 
 /**
- * Draw text (custom sprite font) within an image (destination)
+ * Key: G | g
  *
- * @param {Image} dst
- * @param {Font} font
- * @param {string} text
- * @param {Vector2} position
- * @param {number} fontSize
- * @param {number} spacing
- * @param {Color} tint
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_G = 71
+
+/**
+ * Key: H | h
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function ImageDrawTextEx(dst, font, text, position, fontSize, spacing, tint) {
-  const obj = r.BindImageDrawTextEx(
-    dst.data,
-    dst.width,
-    dst.height,
-    dst.mipmaps,
-    dst.format,
-    font.baseSize,
-    font.glyphCount,
-    font.glyphPadding,
-    font.texture.id,
-    font.texture.width,
-    font.texture.height,
-    font.texture.mipmaps,
-    font.texture.format,
-    font.recs,
-    font.glyphs,
-    text,
-    position.x,
-    position.y,
-    fontSize,
-    spacing,
-    tint.r,
-    tint.g,
-    tint.b,
-    tint.a
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      dst[key] = obj[key]
-    }
-  }
-}
-raylib.ImageDrawTextEx = ImageDrawTextEx
+raylib.KEY_H = 72
 
 /**
- * Generate GPU mipmaps for a texture
+ * Key: I | i
  *
- * @param {Texture2D} texture
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_I = 73
+
+/**
+ * Key: J | j
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function GenTextureMipmaps(texture) {
-  const obj = r.BindGenTextureMipmaps(
-    texture.id,
-    texture.width,
-    texture.height,
-    texture.mipmaps,
-    texture.format
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      texture[key] = obj[key]
-    }
-  }
-}
-raylib.GenTextureMipmaps = GenTextureMipmaps
+raylib.KEY_J = 74
+
+/**
+ * Key: K | k
+ *
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_K = 75
 
 /**
- * Upload mesh vertex data in GPU and provide VAO/VBO ids
- *
- * @param {Mesh} mesh
- * @param {boolean} dynamic
+ * Key: L | l
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function UploadMesh(mesh, dynamic) {
-  const obj = r.BindUploadMesh(
-    mesh.vertexCount,
-    mesh.triangleCount,
-    mesh.vertices,
-    mesh.texcoords,
-    mesh.texcoords2,
-    mesh.normals,
-    mesh.tangents,
-    mesh.colors,
-    mesh.indices,
-    mesh.animVertices,
-    mesh.animNormals,
-    mesh.boneIds,
-    mesh.boneWeights,
-    mesh.vaoId,
-    mesh.vboId,
-    dynamic
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      mesh[key] = obj[key]
-    }
-  }
-}
-raylib.UploadMesh = UploadMesh
+raylib.KEY_L = 76
 
 /**
- * Compute mesh tangents
+ * Key: M | m
  *
- * @param {Mesh} mesh
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_M = 77
+
+/**
+ * Key: N | n
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function GenMeshTangents(mesh) {
-  const obj = r.BindGenMeshTangents(
-    mesh.vertexCount,
-    mesh.triangleCount,
-    mesh.vertices,
-    mesh.texcoords,
-    mesh.texcoords2,
-    mesh.normals,
-    mesh.tangents,
-    mesh.colors,
-    mesh.indices,
-    mesh.animVertices,
-    mesh.animNormals,
-    mesh.boneIds,
-    mesh.boneWeights,
-    mesh.vaoId,
-    mesh.vboId
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      mesh[key] = obj[key]
-    }
-  }
-}
-raylib.GenMeshTangents = GenMeshTangents
+raylib.KEY_N = 78
 
 /**
- * Compute mesh binormals
+ * Key: O | o
  *
- * @param {Mesh} mesh
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_O = 79
+
+/**
+ * Key: P | p
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function GenMeshBinormals(mesh) {
-  const obj = r.BindGenMeshBinormals(
-    mesh.vertexCount,
-    mesh.triangleCount,
-    mesh.vertices,
-    mesh.texcoords,
-    mesh.texcoords2,
-    mesh.normals,
-    mesh.tangents,
-    mesh.colors,
-    mesh.indices,
-    mesh.animVertices,
-    mesh.animNormals,
-    mesh.boneIds,
-    mesh.boneWeights,
-    mesh.vaoId,
-    mesh.vboId
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      mesh[key] = obj[key]
-    }
-  }
-}
-raylib.GenMeshBinormals = GenMeshBinormals
+raylib.KEY_P = 80
 
 /**
- * Set material for a mesh
+ * Key: Q | q
  *
- * @param {Model} model
- * @param {number} meshId
- * @param {number} materialId
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_Q = 81
+
+/**
+ * Key: R | r
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function SetModelMeshMaterial(model, meshId, materialId) {
-  const obj = r.BindSetModelMeshMaterial(
-    model.transform.m0,
-    model.transform.m1,
-    model.transform.m2,
-    model.transform.m3,
-    model.transform.m4,
-    model.transform.m5,
-    model.transform.m6,
-    model.transform.m7,
-    model.transform.m8,
-    model.transform.m9,
-    model.transform.m10,
-    model.transform.m11,
-    model.transform.m12,
-    model.transform.m13,
-    model.transform.m14,
-    model.transform.m15,
-    model.meshCount,
-    model.materialCount,
-    model.meshes,
-    model.materials,
-    model.meshMaterial,
-    model.boneCount,
-    model.bones,
-    model.bindPose,
-    meshId,
-    materialId
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      model[key] = obj[key]
-    }
-  }
-}
-raylib.SetModelMeshMaterial = SetModelMeshMaterial
+raylib.KEY_R = 82
 
 /**
- * Convert wave data to desired format
+ * Key: S | s
  *
- * @param {Wave} wave
- * @param {number} sampleRate
- * @param {number} sampleSize
- * @param {number} channels
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_S = 83
+
+/**
+ * Key: T | t
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function WaveFormat(wave, sampleRate, sampleSize, channels) {
-  const obj = r.BindWaveFormat(
-    wave.frameCount,
-    wave.sampleRate,
-    wave.sampleSize,
-    wave.channels,
-    wave.data,
-    sampleRate,
-    sampleSize,
-    channels
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      wave[key] = obj[key]
-    }
-  }
-}
-raylib.WaveFormat = WaveFormat
+raylib.KEY_T = 84
 
 /**
- * Crop a wave to defined samples range
+ * Key: U | u
  *
- * @param {Wave} wave
- * @param {number} initSample
- * @param {number} finalSample
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_U = 85
+
+/**
+ * Key: V | v
  *
- * @return {undefined}
+ * @type {number}
+ * @constant
  */
-function WaveCrop(wave, initSample, finalSample) {
-  const obj = r.BindWaveCrop(
-    wave.frameCount,
-    wave.sampleRate,
-    wave.sampleSize,
-    wave.channels,
-    wave.data,
-    initSample,
-    finalSample
-  )
-  if (typeof obj !== 'undefined') {
-    for (const key in obj) {
-      wave[key] = obj[key]
-    }
-  }
-}
-raylib.WaveCrop = WaveCrop
+raylib.KEY_V = 86
 
 /**
- * Color, 4 components, R8G8B8A8 (32bit)
+ * Key: W | w
  *
- * @param {number} r - Color red value
- * @param {number} g - Color green value
- * @param {number} b - Color blue value
- * @param {number} a - Color alpha value
+ * @type {number}
+ * @constant
+ */
+raylib.KEY_W = 87
+
+/**
+ * Key: X | x
  *
- * @return {Color} The new Color.
+ * @type {number}
+ * @constant
  */
-function Color(r,g,b,a) {
-  return {r,g,b,a}
-}
-raylib.Color = Color
+raylib.KEY_X = 88
 
 /**
- * Vector2, 2 components
- *
- * @param {number} x - Vector x component
- * @param {number} y - Vector y component
+ * Key: Y | y
  *
- * @return {Vector2} The new Vector2.
+ * @type {number}
+ * @constant
  */
-function Vector2(x,y) {
-  return {x,y}
-}
-raylib.Vector2 = Vector2
+raylib.KEY_Y = 89
 
 /**
- * Vector3, 3 components
- *
- * @param {number} x - Vector x component
- * @param {number} y - Vector y component
- * @param {number} z - Vector z component
+ * Key: Z | z
  *
- * @return {Vector3} The new Vector3.
+ * @type {number}
+ * @constant
  */
-function Vector3(x,y,z) {
-  return {x,y,z}
-}
-raylib.Vector3 = Vector3
+raylib.KEY_Z = 90
 
 /**
- * Vector4, 4 components
- *
- * @param {number} x - Vector x component
- * @param {number} y - Vector y component
- * @param {number} z - Vector z component
- * @param {number} w - Vector w component
+ * Key: [
  *
- * @return {Vector4} The new Vector4.
+ * @type {number}
+ * @constant
  */
-function Vector4(x,y,z,w) {
-  return {x,y,z,w}
-}
-raylib.Vector4 = Vector4
+raylib.KEY_LEFT_BRACKET = 91
 
 /**
- * Rectangle, 4 components
- *
- * @param {number} x - Rectangle top-left corner position x
- * @param {number} y - Rectangle top-left corner position y
- * @param {number} width - Rectangle width
- * @param {number} height - Rectangle height
+ * Key: '\'
  *
- * @return {Rectangle} The new Rectangle.
+ * @type {number}
+ * @constant
  */
-function Rectangle(x,y,width,height) {
-  return {x,y,width,height}
-}
-raylib.Rectangle = Rectangle
+raylib.KEY_BACKSLASH = 92
 
 /**
- * Camera2D, defines position/orientation in 2d space
- *
- * @param {Vector2} offset - Camera offset (displacement from target)
- * @param {Vector2} target - Camera target (rotation and zoom origin)
- * @param {number} rotation - Camera rotation in degrees
- * @param {number} zoom - Camera zoom (scaling), should be 1.0f by default
+ * Key: ]
  *
- * @return {Camera2D} The new Camera2D.
+ * @type {number}
+ * @constant
  */
-function Camera2D(offset,target,rotation,zoom) {
-  return {offset,target,rotation,zoom}
-}
-raylib.Camera2D = Camera2D
+raylib.KEY_RIGHT_BRACKET = 93
 
 /**
- * Camera, defines position/orientation in 3d space
- *
- * @param {Vector3} position - Camera position
- * @param {Vector3} target - Camera target it looks-at
- * @param {Vector3} up - Camera up vector (rotation over its axis)
- * @param {number} fovy - Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
- * @param {number} projection - Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
+ * Key: `
  *
- * @return {Camera3D} The new Camera3D.
+ * @type {number}
+ * @constant
  */
-function Camera3D(position,target,up,fovy,projection) {
-  return {position,target,up,fovy,projection}
-}
-raylib.Camera3D = Camera3D
-raylib.Camera = raylib.Camera3D
-
-// WRAPPED TYPED SHADER FUNCTIONS
+raylib.KEY_GRAVE = 96
 
 /**
- * Set shader uniform value float
- * 
- * @param {Shader} shader
- * @param {number} locIndex
- * @param {number} value
- * 
- * @returns {undefined}
+ * Key: Space
+ *
+ * @type {number}
+ * @constant
  */
-function SetShaderFloat(shader, locIndex, value) {
-  return r.BindSetShaderFloat(
-    shader.id,
-    shader.locs,
-    locIndex,
-    value
-  )
-}
-raylib.SetShaderFloat = SetShaderFloat
+raylib.KEY_SPACE = 32
 
 /**
- * Set shader uniform value float
- * 
- * @param {Shader} shader
- * @param {number} locIndex
- * @param {number} value
- * 
- * @returns {undefined}
+ * Key: Esc
+ *
+ * @type {number}
+ * @constant
  */
-function SetShaderInt(shader, locIndex, value) {
-  return r.BindSetShaderInt(
-    shader.id,
-    shader.locs,
-    locIndex,
-    value
-  )
-}
-raylib.SetShaderInt = SetShaderInt
+raylib.KEY_ESCAPE = 256
 
 /**
- * Set shader uniform value vector2
- * 
- * @param {Shader} shader
- * @param {number} locIndex
- * @param {Vector2} value
- * 
- * @returns {undefined}
+ * Key: Enter
+ *
+ * @type {number}
+ * @constant
  */
-function SetShaderVec2(shader, locIndex, value) {
-  return r.BindSetShaderVec2(
-    shader.id,
-    shader.locs,
-    locIndex,
-    value.x,
-    value.y
-  )
-}
-raylib.SetShaderVec2 = SetShaderVec2
+raylib.KEY_ENTER = 257
 
 /**
- * Set shader uniform value vector3
- * 
- * @param {Shader} shader
- * @param {number} locIndex
- * @param {Vector3} value
- * 
- * @returns {undefined}
+ * Key: Tab
+ *
+ * @type {number}
+ * @constant
  */
-function SetShaderVec3(shader, locIndex, value) {
-  return r.BindSetShaderVec3(
-    shader.id,
-    shader.locs,
-    locIndex,
-    value.x,
-    value.y,
-    value.z
-  )
-}
-raylib.SetShaderVec3 = SetShaderVec3
+raylib.KEY_TAB = 258
 
 /**
- * Set shader uniform value vector4
- * 
- * @param {Shader} shader
- * @param {number} locIndex
- * @param {Vector4} value
- * 
- * @returns {undefined}
+ * Key: Backspace
+ *
+ * @type {number}
+ * @constant
  */
-function SetShaderVec4(shader, locIndex, value) {
-  return r.BindSetShaderVec4(
-    shader.id,
-    shader.locs,
-    locIndex,
-    value.x,
-    value.y,
-    value.z,
-    value.w
-  )
-}
-raylib.SetShaderVec4 = SetShaderVec4
+raylib.KEY_BACKSPACE = 259
 
 /**
- * Set to try enabling V-Sync on GPU
+ * Key: Ins
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_VSYNC_HINT = 64
+raylib.KEY_INSERT = 260
 
 /**
- * Set to run program in fullscreen
+ * Key: Del
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_FULLSCREEN_MODE = 2
+raylib.KEY_DELETE = 261
 
 /**
- * Set to allow resizable window
+ * Key: Cursor right
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_RESIZABLE = 4
+raylib.KEY_RIGHT = 262
 
 /**
- * Set to disable window decoration (frame and buttons)
+ * Key: Cursor left
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_UNDECORATED = 8
+raylib.KEY_LEFT = 263
 
 /**
- * Set to hide window
+ * Key: Cursor down
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_HIDDEN = 128
+raylib.KEY_DOWN = 264
 
 /**
- * Set to minimize window (iconify)
+ * Key: Cursor up
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_MINIMIZED = 512
+raylib.KEY_UP = 265
 
 /**
- * Set to maximize window (expanded to monitor)
+ * Key: Page up
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_MAXIMIZED = 1024
+raylib.KEY_PAGE_UP = 266
 
 /**
- * Set to window non focused
+ * Key: Page down
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_UNFOCUSED = 2048
+raylib.KEY_PAGE_DOWN = 267
 
 /**
- * Set to window always on top
+ * Key: Home
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_TOPMOST = 4096
+raylib.KEY_HOME = 268
 
 /**
- * Set to allow windows running while minimized
+ * Key: End
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_ALWAYS_RUN = 256
+raylib.KEY_END = 269
 
 /**
- * Set to allow transparent framebuffer
+ * Key: Caps lock
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_TRANSPARENT = 16
+raylib.KEY_CAPS_LOCK = 280
 
 /**
- * Set to support HighDPI
+ * Key: Scroll down
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_WINDOW_HIGHDPI = 8192
+raylib.KEY_SCROLL_LOCK = 281
 
 /**
- * Set to try enabling MSAA 4X
+ * Key: Num lock
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_MSAA_4X_HINT = 32
+raylib.KEY_NUM_LOCK = 282
 
 /**
- * Set to try enabling interlaced video format (for V3D)
+ * Key: Print screen
  *
  * @type {number}
  * @constant
  */
-raylib.FLAG_INTERLACED_HINT = 65536
+raylib.KEY_PRINT_SCREEN = 283
 
 /**
- * Display all logs
+ * Key: Pause
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_ALL = 0
+raylib.KEY_PAUSE = 284
 
 /**
- * Trace logging, intended for internal use only
+ * Key: F1
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_TRACE = 1
+raylib.KEY_F1 = 290
 
 /**
- * Debug logging, used for internal debugging, it should be disabled on release builds
+ * Key: F2
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_DEBUG = 2
+raylib.KEY_F2 = 291
 
 /**
- * Info logging, used for program execution info
+ * Key: F3
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_INFO = 3
+raylib.KEY_F3 = 292
 
 /**
- * Warning logging, used on recoverable failures
+ * Key: F4
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_WARNING = 4
+raylib.KEY_F4 = 293
 
 /**
- * Error logging, used on unrecoverable failures
+ * Key: F5
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_ERROR = 5
+raylib.KEY_F5 = 294
 
 /**
- * Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ * Key: F6
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_FATAL = 6
+raylib.KEY_F6 = 295
 
 /**
- * Disable logging
+ * Key: F7
  *
  * @type {number}
  * @constant
  */
-raylib.LOG_NONE = 7
+raylib.KEY_F7 = 296
 
 /**
- * Key: NULL, used for no key pressed
+ * Key: F8
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_NULL = 0
+raylib.KEY_F8 = 297
 
 /**
- * Key: '
+ * Key: F9
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_APOSTROPHE = 39
+raylib.KEY_F9 = 298
 
 /**
- * Key: ,
+ * Key: F10
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_COMMA = 44
+raylib.KEY_F10 = 299
 
 /**
- * Key: -
+ * Key: F11
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_MINUS = 45
+raylib.KEY_F11 = 300
 
 /**
- * Key: .
+ * Key: F12
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_PERIOD = 46
+raylib.KEY_F12 = 301
 
 /**
- * Key: /
+ * Key: Shift left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SLASH = 47
+raylib.KEY_LEFT_SHIFT = 340
 
 /**
- * Key: 0
+ * Key: Control left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_ZERO = 48
+raylib.KEY_LEFT_CONTROL = 341
 
 /**
- * Key: 1
+ * Key: Alt left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_ONE = 49
+raylib.KEY_LEFT_ALT = 342
 
 /**
- * Key: 2
+ * Key: Super left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_TWO = 50
+raylib.KEY_LEFT_SUPER = 343
 
 /**
- * Key: 3
+ * Key: Shift right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_THREE = 51
+raylib.KEY_RIGHT_SHIFT = 344
 
 /**
- * Key: 4
+ * Key: Control right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_FOUR = 52
+raylib.KEY_RIGHT_CONTROL = 345
 
 /**
- * Key: 5
+ * Key: Alt right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_FIVE = 53
+raylib.KEY_RIGHT_ALT = 346
 
 /**
- * Key: 6
+ * Key: Super right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SIX = 54
+raylib.KEY_RIGHT_SUPER = 347
 
 /**
- * Key: 7
+ * Key: KB menu
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SEVEN = 55
+raylib.KEY_KB_MENU = 348
 
 /**
- * Key: 8
+ * Key: Keypad 0
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_EIGHT = 56
+raylib.KEY_KP_0 = 320
 
 /**
- * Key: 9
+ * Key: Keypad 1
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_NINE = 57
+raylib.KEY_KP_1 = 321
 
 /**
- * Key: ;
+ * Key: Keypad 2
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SEMICOLON = 59
+raylib.KEY_KP_2 = 322
 
 /**
- * Key: =
+ * Key: Keypad 3
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_EQUAL = 61
+raylib.KEY_KP_3 = 323
 
 /**
- * Key: A | a
+ * Key: Keypad 4
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_A = 65
+raylib.KEY_KP_4 = 324
 
 /**
- * Key: B | b
+ * Key: Keypad 5
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_B = 66
+raylib.KEY_KP_5 = 325
 
 /**
- * Key: C | c
+ * Key: Keypad 6
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_C = 67
+raylib.KEY_KP_6 = 326
 
 /**
- * Key: D | d
+ * Key: Keypad 7
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_D = 68
+raylib.KEY_KP_7 = 327
 
 /**
- * Key: E | e
+ * Key: Keypad 8
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_E = 69
+raylib.KEY_KP_8 = 328
 
 /**
- * Key: F | f
+ * Key: Keypad 9
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F = 70
+raylib.KEY_KP_9 = 329
 
 /**
- * Key: G | g
+ * Key: Keypad .
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_G = 71
+raylib.KEY_KP_DECIMAL = 330
 
 /**
- * Key: H | h
+ * Key: Keypad /
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_H = 72
+raylib.KEY_KP_DIVIDE = 331
 
 /**
- * Key: I | i
+ * Key: Keypad *
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_I = 73
+raylib.KEY_KP_MULTIPLY = 332
 
 /**
- * Key: J | j
+ * Key: Keypad -
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_J = 74
+raylib.KEY_KP_SUBTRACT = 333
 
 /**
- * Key: K | k
+ * Key: Keypad +
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_K = 75
+raylib.KEY_KP_ADD = 334
 
 /**
- * Key: L | l
+ * Key: Keypad Enter
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_L = 76
+raylib.KEY_KP_ENTER = 335
 
 /**
- * Key: M | m
+ * Key: Keypad =
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_M = 77
+raylib.KEY_KP_EQUAL = 336
 
 /**
- * Key: N | n
+ * Key: Android back button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_N = 78
+raylib.KEY_BACK = 4
 
 /**
- * Key: O | o
+ * Key: Android menu button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_O = 79
+raylib.KEY_MENU = 82
 
 /**
- * Key: P | p
+ * Key: Android volume up button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_P = 80
+raylib.KEY_VOLUME_UP = 24
 
 /**
- * Key: Q | q
+ * Key: Android volume down button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_Q = 81
+raylib.KEY_VOLUME_DOWN = 25
 
 /**
- * Key: R | r
+ * Mouse button left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_R = 82
+raylib.MOUSE_BUTTON_LEFT = 0
 
 /**
- * Key: S | s
+ * Mouse button right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_S = 83
+raylib.MOUSE_BUTTON_RIGHT = 1
 
 /**
- * Key: T | t
+ * Mouse button middle (pressed wheel)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_T = 84
+raylib.MOUSE_BUTTON_MIDDLE = 2
 
 /**
- * Key: U | u
+ * Mouse button side (advanced mouse device)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_U = 85
+raylib.MOUSE_BUTTON_SIDE = 3
 
 /**
- * Key: V | v
+ * Mouse button extra (advanced mouse device)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_V = 86
+raylib.MOUSE_BUTTON_EXTRA = 4
 
 /**
- * Key: W | w
+ * Mouse button fordward (advanced mouse device)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_W = 87
+raylib.MOUSE_BUTTON_FORWARD = 5
 
 /**
- * Key: X | x
+ * Mouse button back (advanced mouse device)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_X = 88
+raylib.MOUSE_BUTTON_BACK = 6
 
 /**
- * Key: Y | y
+ * Default pointer shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_Y = 89
+raylib.MOUSE_CURSOR_DEFAULT = 0
 
 /**
- * Key: Z | z
+ * Arrow shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_Z = 90
+raylib.MOUSE_CURSOR_ARROW = 1
 
 /**
- * Key: [
+ * Text writing cursor shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT_BRACKET = 91
+raylib.MOUSE_CURSOR_IBEAM = 2
 
 /**
- * Key: '\'
+ * Cross shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_BACKSLASH = 92
+raylib.MOUSE_CURSOR_CROSSHAIR = 3
 
 /**
- * Key: ]
+ * Pointing hand cursor
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT_BRACKET = 93
+raylib.MOUSE_CURSOR_POINTING_HAND = 4
 
 /**
- * Key: `
+ * Horizontal resize/move arrow shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_GRAVE = 96
+raylib.MOUSE_CURSOR_RESIZE_EW = 5
 
 /**
- * Key: Space
+ * Vertical resize/move arrow shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SPACE = 32
+raylib.MOUSE_CURSOR_RESIZE_NS = 6
 
 /**
- * Key: Esc
+ * Top-left to bottom-right diagonal resize/move arrow shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_ESCAPE = 256
+raylib.MOUSE_CURSOR_RESIZE_NWSE = 7
 
 /**
- * Key: Enter
+ * The top-right to bottom-left diagonal resize/move arrow shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_ENTER = 257
+raylib.MOUSE_CURSOR_RESIZE_NESW = 8
 
 /**
- * Key: Tab
+ * The omni-directional resize/move cursor shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_TAB = 258
+raylib.MOUSE_CURSOR_RESIZE_ALL = 9
 
 /**
- * Key: Backspace
+ * The operation-not-allowed shape
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_BACKSPACE = 259
+raylib.MOUSE_CURSOR_NOT_ALLOWED = 10
 
 /**
- * Key: Ins
+ * Unknown button, just for error checking
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_INSERT = 260
+raylib.GAMEPAD_BUTTON_UNKNOWN = 0
 
 /**
- * Key: Del
+ * Gamepad left DPAD up button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_DELETE = 261
+raylib.GAMEPAD_BUTTON_LEFT_FACE_UP = 1
 
 /**
- * Key: Cursor right
+ * Gamepad left DPAD right button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT = 262
+raylib.GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2
 
 /**
- * Key: Cursor left
+ * Gamepad left DPAD down button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT = 263
+raylib.GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3
 
 /**
- * Key: Cursor down
+ * Gamepad left DPAD left button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_DOWN = 264
+raylib.GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4
 
 /**
- * Key: Cursor up
+ * Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_UP = 265
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_UP = 5
 
 /**
- * Key: Page up
+ * Gamepad right button right (i.e. PS3: Square, Xbox: X)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_PAGE_UP = 266
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6
 
 /**
- * Key: Page down
+ * Gamepad right button down (i.e. PS3: Cross, Xbox: A)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_PAGE_DOWN = 267
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7
 
 /**
- * Key: Home
+ * Gamepad right button left (i.e. PS3: Circle, Xbox: B)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_HOME = 268
+raylib.GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8
 
 /**
- * Key: End
+ * Gamepad top/back trigger left (first), it could be a trailing button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_END = 269
+raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9
 
 /**
- * Key: Caps lock
+ * Gamepad top/back trigger left (second), it could be a trailing button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_CAPS_LOCK = 280
+raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10
 
 /**
- * Key: Scroll down
+ * Gamepad top/back trigger right (one), it could be a trailing button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_SCROLL_LOCK = 281
+raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11
 
 /**
- * Key: Num lock
+ * Gamepad top/back trigger right (second), it could be a trailing button
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_NUM_LOCK = 282
+raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12
 
 /**
- * Key: Print screen
+ * Gamepad center buttons, left one (i.e. PS3: Select)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_PRINT_SCREEN = 283
+raylib.GAMEPAD_BUTTON_MIDDLE_LEFT = 13
 
 /**
- * Key: Pause
+ * Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_PAUSE = 284
+raylib.GAMEPAD_BUTTON_MIDDLE = 14
 
 /**
- * Key: F1
+ * Gamepad center buttons, right one (i.e. PS3: Start)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F1 = 290
+raylib.GAMEPAD_BUTTON_MIDDLE_RIGHT = 15
 
 /**
- * Key: F2
+ * Gamepad joystick pressed button left
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F2 = 291
+raylib.GAMEPAD_BUTTON_LEFT_THUMB = 16
 
 /**
- * Key: F3
+ * Gamepad joystick pressed button right
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F3 = 292
+raylib.GAMEPAD_BUTTON_RIGHT_THUMB = 17
 
 /**
- * Key: F4
+ * Gamepad left stick X axis
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F4 = 293
+raylib.GAMEPAD_AXIS_LEFT_X = 0
 
 /**
- * Key: F5
+ * Gamepad left stick Y axis
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F5 = 294
+raylib.GAMEPAD_AXIS_LEFT_Y = 1
 
 /**
- * Key: F6
+ * Gamepad right stick X axis
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F6 = 295
+raylib.GAMEPAD_AXIS_RIGHT_X = 2
 
 /**
- * Key: F7
+ * Gamepad right stick Y axis
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F7 = 296
+raylib.GAMEPAD_AXIS_RIGHT_Y = 3
 
 /**
- * Key: F8
+ * Gamepad back trigger left, pressure level: [1..-1]
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F8 = 297
+raylib.GAMEPAD_AXIS_LEFT_TRIGGER = 4
 
 /**
- * Key: F9
+ * Gamepad back trigger right, pressure level: [1..-1]
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F9 = 298
+raylib.GAMEPAD_AXIS_RIGHT_TRIGGER = 5
 
 /**
- * Key: F10
+ * Albedo material (same as: MATERIAL_MAP_DIFFUSE)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F10 = 299
+raylib.MATERIAL_MAP_ALBEDO = 0
 
 /**
- * Key: F11
+ * Metalness material (same as: MATERIAL_MAP_SPECULAR)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F11 = 300
+raylib.MATERIAL_MAP_METALNESS = 1
 
 /**
- * Key: F12
+ * Normal material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_F12 = 301
+raylib.MATERIAL_MAP_NORMAL = 2
 
 /**
- * Key: Shift left
+ * Roughness material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT_SHIFT = 340
+raylib.MATERIAL_MAP_ROUGHNESS = 3
 
 /**
- * Key: Control left
+ * Ambient occlusion material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT_CONTROL = 341
+raylib.MATERIAL_MAP_OCCLUSION = 4
 
 /**
- * Key: Alt left
+ * Emission material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT_ALT = 342
+raylib.MATERIAL_MAP_EMISSION = 5
 
 /**
- * Key: Super left
+ * Heightmap material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_LEFT_SUPER = 343
+raylib.MATERIAL_MAP_HEIGHT = 6
 
 /**
- * Key: Shift right
+ * Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT_SHIFT = 344
+raylib.MATERIAL_MAP_CUBEMAP = 7
 
 /**
- * Key: Control right
+ * Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT_CONTROL = 345
+raylib.MATERIAL_MAP_IRRADIANCE = 8
 
 /**
- * Key: Alt right
+ * Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT_ALT = 346
+raylib.MATERIAL_MAP_PREFILTER = 9
 
 /**
- * Key: Super right
+ * Brdf material
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_RIGHT_SUPER = 347
+raylib.MATERIAL_MAP_BRDF = 10
 
 /**
- * Key: KB menu
+ * Shader location: vertex attribute: position
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KB_MENU = 348
+raylib.SHADER_LOC_VERTEX_POSITION = 0
 
 /**
- * Key: Keypad 0
+ * Shader location: vertex attribute: texcoord01
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_0 = 320
+raylib.SHADER_LOC_VERTEX_TEXCOORD01 = 1
 
 /**
- * Key: Keypad 1
+ * Shader location: vertex attribute: texcoord02
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_1 = 321
+raylib.SHADER_LOC_VERTEX_TEXCOORD02 = 2
 
 /**
- * Key: Keypad 2
+ * Shader location: vertex attribute: normal
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_2 = 322
+raylib.SHADER_LOC_VERTEX_NORMAL = 3
 
 /**
- * Key: Keypad 3
+ * Shader location: vertex attribute: tangent
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_3 = 323
+raylib.SHADER_LOC_VERTEX_TANGENT = 4
 
 /**
- * Key: Keypad 4
+ * Shader location: vertex attribute: color
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_4 = 324
+raylib.SHADER_LOC_VERTEX_COLOR = 5
 
 /**
- * Key: Keypad 5
+ * Shader location: matrix uniform: model-view-projection
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_5 = 325
+raylib.SHADER_LOC_MATRIX_MVP = 6
 
 /**
- * Key: Keypad 6
+ * Shader location: matrix uniform: view (camera transform)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_6 = 326
+raylib.SHADER_LOC_MATRIX_VIEW = 7
 
 /**
- * Key: Keypad 7
+ * Shader location: matrix uniform: projection
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_7 = 327
+raylib.SHADER_LOC_MATRIX_PROJECTION = 8
 
 /**
- * Key: Keypad 8
+ * Shader location: matrix uniform: model (transform)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_8 = 328
+raylib.SHADER_LOC_MATRIX_MODEL = 9
 
 /**
- * Key: Keypad 9
+ * Shader location: matrix uniform: normal
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_9 = 329
+raylib.SHADER_LOC_MATRIX_NORMAL = 10
 
 /**
- * Key: Keypad .
+ * Shader location: vector uniform: view
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_DECIMAL = 330
+raylib.SHADER_LOC_VECTOR_VIEW = 11
 
 /**
- * Key: Keypad /
+ * Shader location: vector uniform: diffuse color
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_DIVIDE = 331
+raylib.SHADER_LOC_COLOR_DIFFUSE = 12
 
 /**
- * Key: Keypad *
+ * Shader location: vector uniform: specular color
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_MULTIPLY = 332
+raylib.SHADER_LOC_COLOR_SPECULAR = 13
 
 /**
- * Key: Keypad -
+ * Shader location: vector uniform: ambient color
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_SUBTRACT = 333
+raylib.SHADER_LOC_COLOR_AMBIENT = 14
 
 /**
- * Key: Keypad +
+ * Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_ADD = 334
+raylib.SHADER_LOC_MAP_ALBEDO = 15
 
 /**
- * Key: Keypad Enter
+ * Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_ENTER = 335
+raylib.SHADER_LOC_MAP_METALNESS = 16
 
 /**
- * Key: Keypad =
+ * Shader location: sampler2d texture: normal
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_KP_EQUAL = 336
+raylib.SHADER_LOC_MAP_NORMAL = 17
 
 /**
- * Key: Android back button
+ * Shader location: sampler2d texture: roughness
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_BACK = 4
+raylib.SHADER_LOC_MAP_ROUGHNESS = 18
 
 /**
- * Key: Android menu button
+ * Shader location: sampler2d texture: occlusion
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_MENU = 82
+raylib.SHADER_LOC_MAP_OCCLUSION = 19
 
 /**
- * Key: Android volume up button
+ * Shader location: sampler2d texture: emission
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_VOLUME_UP = 24
+raylib.SHADER_LOC_MAP_EMISSION = 20
 
 /**
- * Key: Android volume down button
+ * Shader location: sampler2d texture: height
  *
  * @type {number}
  * @constant
  */
-raylib.KEY_VOLUME_DOWN = 25
+raylib.SHADER_LOC_MAP_HEIGHT = 21
 
 /**
- * Mouse button left
+ * Shader location: samplerCube texture: cubemap
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_LEFT = 0
+raylib.SHADER_LOC_MAP_CUBEMAP = 22
 
 /**
- * Mouse button right
+ * Shader location: samplerCube texture: irradiance
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_RIGHT = 1
+raylib.SHADER_LOC_MAP_IRRADIANCE = 23
 
 /**
- * Mouse button middle (pressed wheel)
+ * Shader location: samplerCube texture: prefilter
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_MIDDLE = 2
+raylib.SHADER_LOC_MAP_PREFILTER = 24
 
 /**
- * Mouse button side (advanced mouse device)
+ * Shader location: sampler2d texture: brdf
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_SIDE = 3
+raylib.SHADER_LOC_MAP_BRDF = 25
 
 /**
- * Mouse button extra (advanced mouse device)
+ * Shader uniform type: float
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_EXTRA = 4
+raylib.SHADER_UNIFORM_FLOAT = 0
 
 /**
- * Mouse button fordward (advanced mouse device)
+ * Shader uniform type: vec2 (2 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_FORWARD = 5
+raylib.SHADER_UNIFORM_VEC2 = 1
 
 /**
- * Mouse button back (advanced mouse device)
+ * Shader uniform type: vec3 (3 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_BUTTON_BACK = 6
+raylib.SHADER_UNIFORM_VEC3 = 2
 
 /**
- * Default pointer shape
+ * Shader uniform type: vec4 (4 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_DEFAULT = 0
+raylib.SHADER_UNIFORM_VEC4 = 3
 
 /**
- * Arrow shape
+ * Shader uniform type: int
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_ARROW = 1
+raylib.SHADER_UNIFORM_INT = 4
 
 /**
- * Text writing cursor shape
+ * Shader uniform type: ivec2 (2 int)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_IBEAM = 2
+raylib.SHADER_UNIFORM_IVEC2 = 5
 
 /**
- * Cross shape
+ * Shader uniform type: ivec3 (3 int)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_CROSSHAIR = 3
+raylib.SHADER_UNIFORM_IVEC3 = 6
 
 /**
- * Pointing hand cursor
+ * Shader uniform type: ivec4 (4 int)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_POINTING_HAND = 4
+raylib.SHADER_UNIFORM_IVEC4 = 7
 
 /**
- * Horizontal resize/move arrow shape
+ * Shader uniform type: sampler2d
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_RESIZE_EW = 5
+raylib.SHADER_UNIFORM_SAMPLER2D = 8
 
 /**
- * Vertical resize/move arrow shape
+ * Shader attribute type: float
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_RESIZE_NS = 6
+raylib.SHADER_ATTRIB_FLOAT = 0
 
 /**
- * Top-left to bottom-right diagonal resize/move arrow shape
+ * Shader attribute type: vec2 (2 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_RESIZE_NWSE = 7
+raylib.SHADER_ATTRIB_VEC2 = 1
 
 /**
- * The top-right to bottom-left diagonal resize/move arrow shape
+ * Shader attribute type: vec3 (3 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_RESIZE_NESW = 8
+raylib.SHADER_ATTRIB_VEC3 = 2
 
 /**
- * The omni-directional resize/move cursor shape
+ * Shader attribute type: vec4 (4 float)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_RESIZE_ALL = 9
+raylib.SHADER_ATTRIB_VEC4 = 3
 
 /**
- * The operation-not-allowed shape
+ * 8 bit per pixel (no alpha)
  *
  * @type {number}
  * @constant
  */
-raylib.MOUSE_CURSOR_NOT_ALLOWED = 10
+raylib.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1
 
 /**
- * Unknown button, just for error checking
+ * 8*2 bpp (2 channels)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_UNKNOWN = 0
+raylib.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2
 
 /**
- * Gamepad left DPAD up button
+ * 16 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_FACE_UP = 1
+raylib.PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3
 
 /**
- * Gamepad left DPAD right button
+ * 24 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2
+raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4
 
 /**
- * Gamepad left DPAD down button
+ * 16 bpp (1 bit alpha)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3
+raylib.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5
 
 /**
- * Gamepad left DPAD left button
+ * 16 bpp (4 bit alpha)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4
+raylib.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6
 
 /**
- * Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)
+ * 32 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_FACE_UP = 5
+raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7
 
 /**
- * Gamepad right button right (i.e. PS3: Square, Xbox: X)
+ * 32 bpp (1 channel - float)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6
+raylib.PIXELFORMAT_UNCOMPRESSED_R32 = 8
 
 /**
- * Gamepad right button down (i.e. PS3: Cross, Xbox: A)
+ * 32*3 bpp (3 channels - float)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7
+raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
 
 /**
- * Gamepad right button left (i.e. PS3: Circle, Xbox: B)
+ * 32*4 bpp (4 channels - float)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8
+raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
 
 /**
- * Gamepad top/back trigger left (first), it could be a trailing button
+ * 4 bpp (no alpha)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9
+raylib.PIXELFORMAT_COMPRESSED_DXT1_RGB = 11
 
 /**
- * Gamepad top/back trigger left (second), it could be a trailing button
+ * 4 bpp (1 bit alpha)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10
+raylib.PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12
 
 /**
- * Gamepad top/back trigger right (one), it could be a trailing button
+ * 8 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11
+raylib.PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13
 
 /**
- * Gamepad top/back trigger right (second), it could be a trailing button
+ * 8 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12
+raylib.PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14
 
 /**
- * Gamepad center buttons, left one (i.e. PS3: Select)
+ * 4 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_MIDDLE_LEFT = 13
+raylib.PIXELFORMAT_COMPRESSED_ETC1_RGB = 15
 
 /**
- * Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)
+ * 4 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_MIDDLE = 14
+raylib.PIXELFORMAT_COMPRESSED_ETC2_RGB = 16
 
 /**
- * Gamepad center buttons, right one (i.e. PS3: Start)
+ * 8 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_MIDDLE_RIGHT = 15
+raylib.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17
 
 /**
- * Gamepad joystick pressed button left
+ * 4 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_LEFT_THUMB = 16
+raylib.PIXELFORMAT_COMPRESSED_PVRT_RGB = 18
 
 /**
- * Gamepad joystick pressed button right
+ * 4 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_BUTTON_RIGHT_THUMB = 17
+raylib.PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19
 
 /**
- * Gamepad left stick X axis
+ * 8 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_LEFT_X = 0
+raylib.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20
 
 /**
- * Gamepad left stick Y axis
+ * 2 bpp
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_LEFT_Y = 1
+raylib.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21
 
 /**
- * Gamepad right stick X axis
+ * No filter, just pixel aproximation
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_RIGHT_X = 2
+raylib.TEXTURE_FILTER_POINT = 0
 
 /**
- * Gamepad right stick Y axis
+ * Linear filtering
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_RIGHT_Y = 3
+raylib.TEXTURE_FILTER_BILINEAR = 1
 
 /**
- * Gamepad back trigger left, pressure level: [1..-1]
+ * Trilinear filtering (linear with mipmaps)
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_LEFT_TRIGGER = 4
+raylib.TEXTURE_FILTER_TRILINEAR = 2
 
 /**
- * Gamepad back trigger right, pressure level: [1..-1]
+ * Anisotropic filtering 4x
  *
  * @type {number}
  * @constant
  */
-raylib.GAMEPAD_AXIS_RIGHT_TRIGGER = 5
+raylib.TEXTURE_FILTER_ANISOTROPIC_4X = 3
 
 /**
- * Albedo material (same as: MATERIAL_MAP_DIFFUSE)
+ * Anisotropic filtering 8x
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_ALBEDO = 0
+raylib.TEXTURE_FILTER_ANISOTROPIC_8X = 4
 
 /**
- * Metalness material (same as: MATERIAL_MAP_SPECULAR)
+ * Anisotropic filtering 16x
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_METALNESS = 1
+raylib.TEXTURE_FILTER_ANISOTROPIC_16X = 5
 
 /**
- * Normal material
+ * Repeats texture in tiled mode
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_NORMAL = 2
+raylib.TEXTURE_WRAP_REPEAT = 0
 
 /**
- * Roughness material
+ * Clamps texture to edge pixel in tiled mode
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_ROUGHNESS = 3
+raylib.TEXTURE_WRAP_CLAMP = 1
 
 /**
- * Ambient occlusion material
+ * Mirrors and repeats the texture in tiled mode
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_OCCLUSION = 4
+raylib.TEXTURE_WRAP_MIRROR_REPEAT = 2
 
 /**
- * Emission material
+ * Mirrors and clamps to border the texture in tiled mode
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_EMISSION = 5
+raylib.TEXTURE_WRAP_MIRROR_CLAMP = 3
 
 /**
- * Heightmap material
+ * Automatically detect layout type
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_HEIGHT = 6
+raylib.CUBEMAP_LAYOUT_AUTO_DETECT = 0
 
 /**
- * Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ * Layout is defined by a vertical line with faces
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_CUBEMAP = 7
+raylib.CUBEMAP_LAYOUT_LINE_VERTICAL = 1
 
 /**
- * Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ * Layout is defined by an horizontal line with faces
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_IRRADIANCE = 8
+raylib.CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2
 
 /**
- * Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ * Layout is defined by a 3x4 cross with cubemap faces
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_PREFILTER = 9
+raylib.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3
 
 /**
- * Brdf material
+ * Layout is defined by a 4x3 cross with cubemap faces
  *
  * @type {number}
  * @constant
  */
-raylib.MATERIAL_MAP_BRDF = 10
+raylib.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4
 
 /**
- * Shader location: vertex attribute: position
+ * Layout is defined by a panorama image (equirectangular map)
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_POSITION = 0
+raylib.CUBEMAP_LAYOUT_PANORAMA = 5
 
 /**
- * Shader location: vertex attribute: texcoord01
+ * Default font generation, anti-aliased
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_TEXCOORD01 = 1
+raylib.FONT_DEFAULT = 0
 
 /**
- * Shader location: vertex attribute: texcoord02
+ * Bitmap font generation, no anti-aliasing
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_TEXCOORD02 = 2
+raylib.FONT_BITMAP = 1
 
 /**
- * Shader location: vertex attribute: normal
+ * SDF font generation, requires external shader
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_NORMAL = 3
+raylib.FONT_SDF = 2
 
 /**
- * Shader location: vertex attribute: tangent
+ * Blend textures considering alpha (default)
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_TANGENT = 4
+raylib.BLEND_ALPHA = 0
 
 /**
- * Shader location: vertex attribute: color
+ * Blend textures adding colors
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VERTEX_COLOR = 5
+raylib.BLEND_ADDITIVE = 1
 
 /**
- * Shader location: matrix uniform: model-view-projection
+ * Blend textures multiplying colors
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MATRIX_MVP = 6
+raylib.BLEND_MULTIPLIED = 2
 
 /**
- * Shader location: matrix uniform: view (camera transform)
+ * Blend textures adding colors (alternative)
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MATRIX_VIEW = 7
+raylib.BLEND_ADD_COLORS = 3
 
 /**
- * Shader location: matrix uniform: projection
+ * Blend textures subtracting colors (alternative)
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MATRIX_PROJECTION = 8
+raylib.BLEND_SUBTRACT_COLORS = 4
 
 /**
- * Shader location: matrix uniform: model (transform)
+ * Belnd textures using custom src/dst factors (use rlSetBlendMode())
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MATRIX_MODEL = 9
+raylib.BLEND_CUSTOM = 5
 
 /**
- * Shader location: matrix uniform: normal
+ * No gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MATRIX_NORMAL = 10
+raylib.GESTURE_NONE = 0
 
 /**
- * Shader location: vector uniform: view
+ * Tap gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_VECTOR_VIEW = 11
+raylib.GESTURE_TAP = 1
 
 /**
- * Shader location: vector uniform: diffuse color
+ * Double tap gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_COLOR_DIFFUSE = 12
+raylib.GESTURE_DOUBLETAP = 2
 
 /**
- * Shader location: vector uniform: specular color
+ * Hold gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_COLOR_SPECULAR = 13
+raylib.GESTURE_HOLD = 4
 
 /**
- * Shader location: vector uniform: ambient color
+ * Drag gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_COLOR_AMBIENT = 14
+raylib.GESTURE_DRAG = 8
 
 /**
- * Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
+ * Swipe right gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_ALBEDO = 15
+raylib.GESTURE_SWIPE_RIGHT = 16
 
 /**
- * Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
+ * Swipe left gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_METALNESS = 16
+raylib.GESTURE_SWIPE_LEFT = 32
 
 /**
- * Shader location: sampler2d texture: normal
+ * Swipe up gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_NORMAL = 17
+raylib.GESTURE_SWIPE_UP = 64
 
 /**
- * Shader location: sampler2d texture: roughness
+ * Swipe down gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_ROUGHNESS = 18
+raylib.GESTURE_SWIPE_DOWN = 128
 
 /**
- * Shader location: sampler2d texture: occlusion
+ * Pinch in gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_OCCLUSION = 19
+raylib.GESTURE_PINCH_IN = 256
 
 /**
- * Shader location: sampler2d texture: emission
+ * Pinch out gesture
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_EMISSION = 20
+raylib.GESTURE_PINCH_OUT = 512
 
 /**
- * Shader location: sampler2d texture: height
+ * Custom camera
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_HEIGHT = 21
+raylib.CAMERA_CUSTOM = 0
 
 /**
- * Shader location: samplerCube texture: cubemap
+ * Free camera
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_CUBEMAP = 22
+raylib.CAMERA_FREE = 1
 
 /**
- * Shader location: samplerCube texture: irradiance
+ * Orbital camera
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_IRRADIANCE = 23
+raylib.CAMERA_ORBITAL = 2
 
 /**
- * Shader location: samplerCube texture: prefilter
+ * First person camera
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_PREFILTER = 24
+raylib.CAMERA_FIRST_PERSON = 3
 
 /**
- * Shader location: sampler2d texture: brdf
+ * Third person camera
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_LOC_MAP_BRDF = 25
+raylib.CAMERA_THIRD_PERSON = 4
 
 /**
- * Shader uniform type: float
+ * Perspective projection
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_FLOAT = 0
+raylib.CAMERA_PERSPECTIVE = 0
 
 /**
- * Shader uniform type: vec2 (2 float)
+ * Orthographic projection
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_VEC2 = 1
+raylib.CAMERA_ORTHOGRAPHIC = 1
 
 /**
- * Shader uniform type: vec3 (3 float)
+ * Npatch layout: 3x3 tiles
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_VEC3 = 2
+raylib.NPATCH_NINE_PATCH = 0
 
 /**
- * Shader uniform type: vec4 (4 float)
+ * Npatch layout: 1x3 tiles
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_VEC4 = 3
+raylib.NPATCH_THREE_PATCH_VERTICAL = 1
 
 /**
- * Shader uniform type: int
+ * Npatch layout: 3x1 tiles
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_INT = 4
+raylib.NPATCH_THREE_PATCH_HORIZONTAL = 2
 
 /**
- * Shader uniform type: ivec2 (2 int)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_IVEC2 = 5
+raylib.GUI_STATE_NORMAL = 0
 
 /**
- * Shader uniform type: ivec3 (3 int)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_IVEC3 = 6
+raylib.GUI_STATE_FOCUSED = 1
 
 /**
- * Shader uniform type: ivec4 (4 int)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_IVEC4 = 7
+raylib.GUI_STATE_PRESSED = 2
 
 /**
- * Shader uniform type: sampler2d
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_UNIFORM_SAMPLER2D = 8
+raylib.GUI_STATE_DISABLED = 3
 
 /**
- * Shader attribute type: float
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_ATTRIB_FLOAT = 0
+raylib.GUI_TEXT_ALIGN_LEFT = 0
 
 /**
- * Shader attribute type: vec2 (2 float)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_ATTRIB_VEC2 = 1
+raylib.GUI_TEXT_ALIGN_CENTER = 1
 
 /**
- * Shader attribute type: vec3 (3 float)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_ATTRIB_VEC3 = 2
+raylib.GUI_TEXT_ALIGN_RIGHT = 2
 
 /**
- * Shader attribute type: vec4 (4 float)
+ * Generic control -> populates to all controls when set
  *
  * @type {number}
  * @constant
  */
-raylib.SHADER_ATTRIB_VEC4 = 3
+raylib.DEFAULT = 0
 
 /**
- * 8 bit per pixel (no alpha)
+ * Used also for: LABELBUTTON
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1
+raylib.LABEL = 1
 
 /**
- * 8*2 bpp (2 channels)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2
+raylib.BUTTON = 2
 
 /**
- * 16 bpp
+ * Used also for: TOGGLEGROUP
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3
+raylib.TOGGLE = 3
 
 /**
- * 24 bpp
+ * Used also for: SLIDERBAR
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4
+raylib.SLIDER = 4
 
 /**
- * 16 bpp (1 bit alpha)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5
+raylib.PROGRESSBAR = 5
 
 /**
- * 16 bpp (4 bit alpha)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6
+raylib.CHECKBOX = 6
 
 /**
- * 32 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7
+raylib.COMBOBOX = 7
 
 /**
- * 32 bpp (1 channel - float)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R32 = 8
+raylib.DROPDOWNBOX = 8
 
 /**
- * 32*3 bpp (3 channels - float)
+ * Used also for: TEXTBOXMULTI
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9
+raylib.TEXTBOX = 9
 
 /**
- * 32*4 bpp (4 channels - float)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10
+raylib.VALUEBOX = 10
 
 /**
- * 4 bpp (no alpha)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_DXT1_RGB = 11
+raylib.SPINNER = 11
 
 /**
- * 4 bpp (1 bit alpha)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12
+raylib.LISTVIEW = 12
 
 /**
- * 8 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13
+raylib.COLORPICKER = 13
 
 /**
- * 8 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14
+raylib.SCROLLBAR = 14
 
 /**
- * 4 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_ETC1_RGB = 15
+raylib.STATUSBAR = 15
 
 /**
- * 4 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_ETC2_RGB = 16
+raylib.BORDER_COLOR_NORMAL = 0
 
 /**
- * 8 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17
+raylib.BASE_COLOR_NORMAL = 1
 
 /**
- * 4 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_PVRT_RGB = 18
+raylib.TEXT_COLOR_NORMAL = 2
 
 /**
- * 4 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19
+raylib.BORDER_COLOR_FOCUSED = 3
 
 /**
- * 8 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20
+raylib.BASE_COLOR_FOCUSED = 4
 
 /**
- * 2 bpp
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21
+raylib.TEXT_COLOR_FOCUSED = 5
 
 /**
- * No filter, just pixel approximation
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_POINT = 0
+raylib.BORDER_COLOR_PRESSED = 6
 
 /**
- * Linear filtering
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_BILINEAR = 1
+raylib.BASE_COLOR_PRESSED = 7
 
 /**
- * Trilinear filtering (linear with mipmaps)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_TRILINEAR = 2
+raylib.TEXT_COLOR_PRESSED = 8
 
 /**
- * Anisotropic filtering 4x
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_ANISOTROPIC_4X = 3
+raylib.BORDER_COLOR_DISABLED = 9
 
 /**
- * Anisotropic filtering 8x
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_ANISOTROPIC_8X = 4
+raylib.BASE_COLOR_DISABLED = 10
 
 /**
- * Anisotropic filtering 16x
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_FILTER_ANISOTROPIC_16X = 5
+raylib.TEXT_COLOR_DISABLED = 11
 
 /**
- * Repeats texture in tiled mode
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_WRAP_REPEAT = 0
+raylib.BORDER_WIDTH = 12
 
 /**
- * Clamps texture to edge pixel in tiled mode
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_WRAP_CLAMP = 1
+raylib.TEXT_PADDING = 13
 
 /**
- * Mirrors and repeats the texture in tiled mode
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_WRAP_MIRROR_REPEAT = 2
+raylib.TEXT_ALIGNMENT = 14
 
 /**
- * Mirrors and clamps to border the texture in tiled mode
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.TEXTURE_WRAP_MIRROR_CLAMP = 3
+raylib.RESERVED = 15
 
 /**
- * Automatically detect layout type
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_AUTO_DETECT = 0
+raylib.TEXT_SIZE = 16
 
 /**
- * Layout is defined by a vertical line with faces
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_LINE_VERTICAL = 1
+raylib.TEXT_SPACING = 17
 
 /**
- * Layout is defined by an horizontal line with faces
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2
+raylib.LINE_COLOR = 18
 
 /**
- * Layout is defined by a 3x4 cross with cubemap faces
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3
+raylib.BACKGROUND_COLOR = 19
 
 /**
- * Layout is defined by a 4x3 cross with cubemap faces
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4
+raylib.GROUP_PADDING = 16
 
 /**
- * Layout is defined by a panorama image (equirectangular map)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CUBEMAP_LAYOUT_PANORAMA = 5
+raylib.SLIDER_WIDTH = 16
 
 /**
- * Default font generation, anti-aliased
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.FONT_DEFAULT = 0
+raylib.SLIDER_PADDING = 17
 
 /**
- * Bitmap font generation, no anti-aliasing
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.FONT_BITMAP = 1
+raylib.PROGRESS_PADDING = 16
 
 /**
- * SDF font generation, requires external shader
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.FONT_SDF = 2
+raylib.CHECK_PADDING = 16
 
 /**
- * Blend textures considering alpha (default)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_ALPHA = 0
+raylib.COMBO_BUTTON_WIDTH = 16
 
 /**
- * Blend textures adding colors
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_ADDITIVE = 1
+raylib.COMBO_BUTTON_PADDING = 17
 
 /**
- * Blend textures multiplying colors
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_MULTIPLIED = 2
+raylib.ARROW_PADDING = 16
 
 /**
- * Blend textures adding colors (alternative)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_ADD_COLORS = 3
+raylib.DROPDOWN_ITEMS_PADDING = 17
 
 /**
- * Blend textures subtracting colors (alternative)
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_SUBTRACT_COLORS = 4
+raylib.TEXT_INNER_PADDING = 16
 
 /**
- * Belnd textures using custom src/dst factors (use rlSetBlendMode())
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.BLEND_CUSTOM = 5
+raylib.TEXT_LINES_PADDING = 17
 
 /**
- * No gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_NONE = 0
+raylib.COLOR_SELECTED_FG = 18
 
 /**
- * Tap gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_TAP = 1
+raylib.COLOR_SELECTED_BG = 19
 
 /**
- * Double tap gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_DOUBLETAP = 2
+raylib.SPIN_BUTTON_WIDTH = 16
 
 /**
- * Hold gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_HOLD = 4
+raylib.SPIN_BUTTON_PADDING = 17
 
 /**
- * Drag gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_DRAG = 8
+raylib.ARROWS_SIZE = 16
 
 /**
- * Swipe right gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_SWIPE_RIGHT = 16
+raylib.ARROWS_VISIBLE = 17
 
 /**
- * Swipe left gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_SWIPE_LEFT = 32
+raylib.SCROLL_SLIDER_PADDING = 18
 
 /**
- * Swipe up gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_SWIPE_UP = 64
+raylib.SCROLL_SLIDER_SIZE = 19
 
 /**
- * Swipe down gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_SWIPE_DOWN = 128
+raylib.SCROLL_PADDING = 20
 
 /**
- * Pinch in gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_PINCH_IN = 256
+raylib.SCROLL_SPEED = 21
 
 /**
- * Pinch out gesture
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.GESTURE_PINCH_OUT = 512
+raylib.SCROLLBAR_LEFT_SIDE = 0
 
 /**
- * Custom camera
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_CUSTOM = 0
+raylib.SCROLLBAR_RIGHT_SIDE = 1
 
 /**
- * Free camera
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_FREE = 1
+raylib.LIST_ITEMS_HEIGHT = 16
 
 /**
- * Orbital camera
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_ORBITAL = 2
+raylib.LIST_ITEMS_PADDING = 17
 
 /**
- * First person camera
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_FIRST_PERSON = 3
+raylib.SCROLLBAR_WIDTH = 18
 
 /**
- * Third person camera
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_THIRD_PERSON = 4
+raylib.SCROLLBAR_SIDE = 19
 
 /**
- * Perspective projection
+ * 
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_PERSPECTIVE = 0
+raylib.COLOR_SELECTOR_SIZE = 16
 
 /**
- * Orthographic projection
+ * Right hue bar width
  *
  * @type {number}
  * @constant
  */
-raylib.CAMERA_ORTHOGRAPHIC = 1
+raylib.HUEBAR_WIDTH = 17
 
 /**
- * Npatch layout: 3x3 tiles
+ * Right hue bar separation from panel
  *
  * @type {number}
  * @constant
  */
-raylib.NPATCH_NINE_PATCH = 0
+raylib.HUEBAR_PADDING = 18
 
 /**
- * Npatch layout: 1x3 tiles
+ * Right hue bar selector height
  *
  * @type {number}
  * @constant
  */
-raylib.NPATCH_THREE_PATCH_VERTICAL = 1
+raylib.HUEBAR_SELECTOR_HEIGHT = 19
 
 /**
- * Npatch layout: 3x1 tiles
+ * Right hue bar selector overflow
  *
  * @type {number}
  * @constant
  */
-raylib.NPATCH_THREE_PATCH_HORIZONTAL = 2
+raylib.HUEBAR_SELECTOR_OVERFLOW = 20
 
 raylib.LIGHTGRAY = { r: 200, g: 200, b: 200, a: 255 }
 raylib.GRAY = { r: 130, g: 130, b: 130, a: 255 }
diff --git a/tools/extras/easings.js b/tools/extras/easings.js
deleted file mode 100644
index 53d5281..0000000
--- a/tools/extras/easings.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Generates the function definitions for easings.h
- *
- * @see https://github.com/raysan5/raylib/blob/master/src/extras/easings.h
- */
-function getDefEasings () {
-  const functions = []
-  const easingsDefaults = {
-    name: 'FunctionName',
-    description: 'FuntionName',
-    returnType: 'float',
-    params: [
-      { type: 'float', name: 't' },
-      { type: 'float', name: 'b' },
-      { type: 'float', name: 'c' },
-      { type: 'float', name: 'd' }
-    ]
-  }
-  const functionNames = [
-    'EaseLinearNone',
-    'EaseLinearIn',
-    'EaseLinearOut',
-    'EaseLinearInOut',
-    'EaseSineIn',
-    'EaseSineOut',
-    'EaseSineInOut',
-    'EaseCircIn',
-    'EaseCircOut',
-    'EaseCircInOut',
-    'EaseCubicIn',
-    'EaseCubicOut',
-    'EaseCubicInOut',
-    'EaseQuadIn',
-    'EaseQuadOut',
-    'EaseQuadInOut',
-    'EaseExpoIn',
-    'EaseExpoOut',
-    'EaseExpoInOut',
-    'EaseBackIn',
-    'EaseBackOut',
-    'EaseBackInOut',
-    'EaseBounceOut',
-    'EaseBounceIn',
-    'EaseBounceInOut',
-    'EaseElasticIn',
-    'EaseElasticOut',
-    'EaseElasticInOut'
-  ]
-  for (const funcName of functionNames) {
-    const func = Object.assign({}, easingsDefaults)
-    func.name = funcName
-    func.description = `Easing: ${funcName}.`
-    functions.push(func)
-  }
-  return functions
-}
-
-module.exports = {
-  functions: getDefEasings()
-}
diff --git a/tools/generate.js b/tools/generate.js
index 9f8a791..f33d2c8 100644
--- a/tools/generate.js
+++ b/tools/generate.js
@@ -1,32 +1,40 @@
 // this will generate the wrappers & type-adapters in src/generated
 
 const { writeFileSync } = require('fs')
+const raylibApi = require('@raylib/api')
 const path = require('path')
-const fetch = require('cross-fetch')
 
 // use this to keep from wrapping things
 const blocklist = [
-  // error: invalid conversion from ‘void (*)(int, const char*, ...)’ to ‘void (*)()’ [-fpermissive]
+  // Error: invalid conversion from ‘void (*)(int, const char*, ...)’ to ‘void (*)()’ [-fpermissive]
   'TraceLog',
   'TextFormat',
 
-  // edge case: need additional wrapping to function
+  // Edge case: need additional wrapping to function
   'SetShaderValue',
   'SetShaderValueV',
 
-  // DataCallback types not implemented in JSON?
+  // Callbacks: Not supported yet
   'SetTraceLogCallback',
   'SetLoadFileDataCallback',
   'SetSaveFileDataCallback',
   'SetLoadFileTextCallback',
   'SetSaveFileTextCallback',
 
-  // these appear to not be defined, even though they are in JSON
-  'SetWindowOpacity',
-  'GetRenderWidth',
-  'GetRenderHeight',
-  'ExportFontAsCode'
+  // Structs
+  // @todo Verify Structs that have array properties
+  'VrStereoConfig', // Matrix[2], float[2]
+  'VrDeviceInfo', // float[4]
+  'Material', // float[4]
 
+  // raymath
+  // @todo Fix helper structs for float arrays
+  'Vector3ToFloatV', // float3
+  'MatrixToFloatV', // float16
+
+  // raygui
+  'UnloadGuiStyle', // Commented out
+  'LoadGuiStyle' // Commented out
 ]
 
 // these functions expect the first argument to be passed as a reference in C++
@@ -93,95 +101,98 @@ const rSize = /\[([0-9]+)\]/g
 
 // pre-process the data for later analysis
 function getDefs () {
-  console.log('Downloading definitions')
-
-  return fetch('https://raw.githubusercontent.com/raysan5/raylib/2e3cfdcc2f5c70e82536caa57d4aa72e3f00fd40/parser/raylib_api.json')
-    .then(r => r.json())
-    .then(defs => {
-      const { structs, enums, functions } = defs
-      for (const struct of structs) {
-        // take multi-fields (like in Matrix) and make them all distinct fields
-
-        // temporary fix for building on Mac/Win? Wonder why this is necessary
-        if (struct.name === 'BoneInfo') {
-          struct.fields[1].type = 'char'
-        }
-
-        let newfields = []
-        for (const i in struct.fields) {
-          const field = struct.fields[i]
-
-          if (field.name.includes(',')) {
-            newfields = [...newfields, ...field.name.split(',').map(n => {
-              return {
-                ...field,
-                name: n.trim()
-              }
-            })].sort((a, b) => a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0])
-          } else {
-            newfields.push(field)
-          }
-        }
-        struct.fields = newfields
-
-        // find all arrays in structs, and give all fields a size and stripped name for later
-        for (const field of struct.fields) {
-          const n = [...field.name.matchAll(rSize)]
-          if (n.length) {
-            field.size = parseInt(n[0][1])
-            field.name = field.name.replace(rSize, '')
-          } else {
-            field.size = 1
+  const { structs, enums, functions } = raylibApi.raylib
+  for (const struct of structs) {
+    // take multi-fields (like in Matrix) and make them all distinct fields
+
+    // temporary fix for building on Mac/Win? Wonder why this is necessary
+    if (struct.name === 'BoneInfo') {
+      struct.fields[0].type = 'char'
+      struct.fields[1].type = 'char'
+    }
+
+    let newfields = []
+    for (const i in struct.fields) {
+      const field = struct.fields[i]
+
+      if (field.name.includes(',')) {
+        newfields = [...newfields, ...field.name.split(',').map(n => {
+          return {
+            ...field,
+            name: n.trim()
           }
-          const type = field.type.replace(/[* ]+/g, '')
-          if (typeAliases[type]) {
-            field.type = typeAliases[type]
-          }
-        }
-
-        // TODO: should I also process *-refs to seperate name & the fact it's a ref?
+        })].sort((a, b) => a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0])
+      } else {
+        newfields.push(field)
       }
-
-      // aliases
-      // structs.push({ ...structs.find(s => s.name === 'Vector4'), name: 'Quaternion' })
-
-      // XXX: Since array support isn't complete, just filter out all structs & functions that use them,
-      // so we get an (incomplete) wrapper that will build.
-
-      for (const struct of structs) {
-        const usesArray = struct.fields.find(f => f.size !== 1)
-        if (usesArray) {
-          blocklist.push(struct.name)
-        }
+    }
+    struct.fields = newfields
+
+    // find all arrays in structs, and give all fields a size and stripped name for later
+    for (const field of struct.fields) {
+      const n = [...field.name.matchAll(rSize)]
+      if (n.length) {
+        field.size = parseInt(n[0][1])
+        field.name = field.name.replace(rSize, '')
+      } else {
+        field.size = 1
       }
-
-      // filter out all functions that use blocked types
-      for (const f of functions) {
-        if (blocklist.includes(f.returnType.replace(/[* ]/g, ''))) {
+      const type = field.type.replace(/[* ]+/g, '')
+      if (typeAliases[type]) {
+        field.type = typeAliases[type]
+      }
+    }
+
+    // TODO: should I also process *-refs to seperate name & the fact it's a ref?
+  }
+
+  // aliases
+  // structs.push({ ...structs.find(s => s.name === 'Vector4'), name: 'Quaternion' })
+
+  // XXX: Since array support isn't complete, just filter out all structs & functions that use them,
+  // so we get an (incomplete) wrapper that will build.
+
+  for (const struct of structs) {
+    const usesArray = struct.fields.find(f => f.size !== 1)
+    if (usesArray) {
+      blocklist.push(struct.name)
+    }
+  }
+
+  // filter out all functions that use blocked types
+  for (const f of functions) {
+    if (blocklist.includes(f.returnType.replace(/[* ]/g, ''))) {
+      blocklist.push(f.name)
+    } else {
+      for (const param of (f.params || [])) {
+        if (blocklist.includes(param.type.replace(/[* ]/g, ''))) {
           blocklist.push(f.name)
-        } else {
-          for (const param of (f.params || [])) {
-            if (blocklist.includes(param.type.replace(/[* ]/g, ''))) {
-              blocklist.push(f.name)
-              break
-            }
-          }
+          break
         }
       }
+    }
+  }
+
+  // Add the Easings API
+  const easings = raylibApi.easings
+  functions.push(...easings.functions)
+
+  // Add Raymath
+  const raymath = raylibApi.raymath
+  functions.push(...raymath.functions)
 
-      // Add the Easings API
-      const easings = require('./extras/easings')
-      functions.push(...easings.functions)
+  // Add Raygui
+  const raygui = raylibApi.raygui
+  functions.push(...raygui.functions)
+  enums.push(...raygui.enums)
 
-      return { structs, enums, functions }
-    })
+  return { structs, enums, functions }
 }
 
-getDefs().then(({ structs, enums, functions }) => {
-  const GenBindings = require('./generate_templates/node-raylib-bindings.js')
-  const GenWrapper = require('./generate_templates/node-raylib-wrapper.js')
-  const GenTSDefs = require('./generate_templates/node-raylib-definitions.js')
-  writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.cc'), GenBindings({ enums, blocklist, functions, structs, byreflist }))
-  writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.js'), GenWrapper({ enums, blocklist, functions, structs, byreflist }))
-  writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.d.ts'), GenTSDefs({ enums, blocklist, functions, structs, byreflist }))
-})
+const { structs, enums, functions } = getDefs()
+const GenBindings = require('./generate_templates/node-raylib-bindings.js')
+const GenWrapper = require('./generate_templates/node-raylib-wrapper.js')
+const GenTSDefs = require('./generate_templates/node-raylib-definitions.js')
+writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.cc'), GenBindings({ enums, blocklist, functions, structs, byreflist }))
+writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.js'), GenWrapper({ enums, blocklist, functions, structs, byreflist }))
+writeFileSync(path.join(__dirname, '..', 'src', 'generated', 'node-raylib.d.ts'), GenTSDefs({ enums, blocklist, functions, structs, byreflist }))
diff --git a/tools/generate_templates/ArgumentTypeConversion.js b/tools/generate_templates/ArgumentTypeConversion.js
index cc0fcc3..d8f828c 100644
--- a/tools/generate_templates/ArgumentTypeConversion.js
+++ b/tools/generate_templates/ArgumentTypeConversion.js
@@ -5,6 +5,7 @@ function ArgumentTypeConversion (arg) {
   if (arg === 'char') { return 'string' }
   if (arg === 'char *') { return 'string' }
   if (arg === 'const char *') { return 'string' }
+  if (arg === 'char[32]') { return 'string' }
 
   if (arg === 'int') { return 'number' }
   if (arg === 'float') { return 'number' }
diff --git a/tools/generate_templates/node-raylib-bindings.js b/tools/generate_templates/node-raylib-bindings.js
index 181a688..42312a0 100644
--- a/tools/generate_templates/node-raylib-bindings.js
+++ b/tools/generate_templates/node-raylib-bindings.js
@@ -5,6 +5,21 @@
  * @returns
  */
 const SanitizeTypeName = name => {
+  if (name === 'const Vector3') {
+    return 'Vector3'
+  }
+  if (name === 'float[2]') {
+    return 'pointer'
+  }
+  if (name === 'char[32]') {
+    return 'pointer'
+  }
+  if (name === 'float[4]') {
+    return 'pointer'
+  }
+  if (name === 'Matrix[2]') {
+    return 'pointer'
+  }
   if (name === 'const char *') {
     return 'string'
   }
@@ -17,6 +32,9 @@ const SanitizeTypeName = name => {
   if (name === 'Camera') {
     return 'Camera3D'
   }
+  if (name === 'Quaternion') {
+    return 'Vector4'
+  }
   if (name === 'Texture2D') {
     return 'Texture'
   }
@@ -165,6 +183,11 @@ module.exports = ({ functions, structs, enums, blocklist, byreflist }) => `
 #include <cstring>
 #include "raylib.h"
 #include "extras/easings.h"
+#include "raymath.h"
+
+#define RAYGUI_IMPLEMENTATION
+#include "extras/raygui.h"
+
 using namespace Napi;
 
 inline Napi::Value ToValue(Napi::Env env, bool value) {
@@ -199,10 +222,13 @@ inline Napi::Value ToValue(Napi::Env env, void * value) {
 }
 
 inline float floatFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().FloatValue();
 }
 inline int intFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().Int32Value();
+}
+inline double doubleFromValue(const Napi::CallbackInfo& info, int index) {
+  return info[index].As<Napi::Number>().DoubleValue();
 }
 uintptr_t pointerFromValue(const Napi::CallbackInfo& info, int index) {
   return (uintptr_t) info[index].As<Napi::Number>().Int64Value();
@@ -211,7 +237,7 @@ inline unsigned char unsignedcharFromValue(const Napi::CallbackInfo& info, int i
   return info[index].As<Napi::Number>().Uint32Value();
 }
 inline unsigned int unsignedintFromValue(const Napi::CallbackInfo& info, int index) {
-  return info[index].As<Napi::Number>();
+  return info[index].As<Napi::Number>().Uint32Value();
 }
 inline bool boolFromValue(const Napi::CallbackInfo& info, int index) {
   return info[index].As<Napi::Boolean>();
@@ -229,11 +255,13 @@ inline char charFromValue(const Napi::CallbackInfo& info, int index) {
 
 // Convert structs from Napi::Values in info[] arguments
 ${structs
+    .filter(({ name }) => !blocklist.includes(name))
     .map(struct => { return FromValue(structs, struct) })
     .join('\n')
   }
 // Convert structs to Napi::Objects for output to JS
 ${structs
+    .filter(({ name }) => !blocklist.includes(name))
     .map(ToValue)
     .join('\n')
   }
