diff --git a/lib/libesp32/berry_animation/README.md b/lib/libesp32/berry_animation/README.md
index 70f074d0a..6a44f344e 100644
--- a/lib/libesp32/berry_animation/README.md
+++ b/lib/libesp32/berry_animation/README.md
@@ -1,226 +1,179 @@
# Berry Animation Framework
-A powerful, lightweight animation framework for controlling addressable LED strips in Tasmota using a simple Domain-Specific Language (DSL).
+!!! note "Requires `#define USE_BERRY_ANIMATION`, included in Tasmota32"
-## ✨ Features
+A lightweight animation framework for controlling addressable LED strips (WS2812, SK6812, etc.) on Tasmota-based ESP32 devices.
-- **🎨 Rich Animation Effects** - Pulse, breathe, fire, comet, sparkle, wave, and more
-- **🌈 Advanced Color System** - Predefined palettes, custom gradients, smooth color cycling
-- **📝 Simple DSL Syntax** - Write animations in intuitive, declarative language
-- **⚡ High Performance** - Optimized for embedded systems with minimal memory usage
-- **🔧 Extensible** - Create custom animations and effects
-- **🎯 Position-Based Effects** - Precise control over individual LED positions
-- **📊 Dynamic Parameters** - Animate colors, positions, sizes with oscillating values
-- **🎭 Sequences** - Create complex shows with timing and loops
+## Why a DSL?
-## 🚀 Quick Start
+Writing LED animations in pure Berry code requires understanding the animation engine internals, managing timing loops, and handling frame buffers manually. Animations are inherently asynchronous - they run over time while other code executes - making them difficult to manage with traditional state machines. The Animation DSL (Domain-Specific Language) simplifies this dramatically:
-### Simple Pulsing Animation
+- **Declarative, not imperative** - Just specify *what* you want and *how long* it should take; the framework handles all intermediate states and timing
+- **No state machines** - Forget about tracking animation phases, transitions, and timing manually
+- **Readable syntax** - Write `animation pulse = pulsating_animation(color=red, period=2s)` instead of dozens of lines of Berry code
+- **Automatic engine management** - No need to create engines, manage frame buffers, or handle timing
+- **Built-in effects** - Access to pulse, breathe, fire, comet, sparkle, wave, and many more effects
+- **Dynamic parameters** - Oscillating values (sine, triangle, smooth) without manual math
+- **Sequences and templates** - Orchestrate complex shows with simple syntax
+
+The DSL **transpiles to standard Berry code**, so you get the best of both worlds: easy authoring and full Berry compatibility. You can inspect the generated code, learn from it, or use it directly on devices without DSL support.
+
+## Online Emulator
+
+Test and create animations without a Tasmota device using the online emulator:
+
+**[https://tasmota.github.io/docs/Tasmota-Berry-emulator/](https://tasmota.github.io/docs/Tasmota-Berry-emulator/index.html)**
+
+The emulator runs **entirely in your browser** with no server required. It includes:
+
+- A complete Berry interpreter compiled to WebAssembly
+- Minimal Tasmota device emulation (LED strips, GPIO, timing)
+- Real-time LED strip visualization
+- DSL editor with syntax highlighting
+
+Once your animation works in the emulator, copy the transpiled Berry code to your Tasmota device - it runs identically.
+
+## Firmware Options
+
+Option|Description
+:---|:---
+`#define USE_BERRY_ANIMATION`|Core animation framework (required)
+`#define USE_BERRY_ANIMATION_DSL`|Optional: DSL compiler with simplified Web UI for on-device animation editing
+
+Without `USE_BERRY_ANIMATION_DSL`, use the online emulator to create animations and deploy the compiled Berry code.
+
+## Quick Start
+
+### Simple Breathing Animation
```berry
-# Define colors
-color bordeaux = 0x6F2C4F
-
-# Create pulsing animation
-animation pulse_bordeaux = pulsating_animation(color=bordeaux, period=3s)
-
-# Run it
-run pulse_bordeaux
+animation pulse = breathe_animation(color=red, period=2s)
+run pulse
```
-### Rainbow Color Cycling
+### Rainbow Smooth Color Cycling
```berry
-# Use predefined rainbow palette
-animation rainbow_cycle = rich_palette(
- palette=PALETTE_RAINBOW
- cycle_period=5s
- transition_type=1
-)
-
-run rainbow_cycle
+animation rainbow = rich_palette_animation(palette=PALETTE_RAINBOW)
+run rainbow
```
-### Custom Color Palette
+### Animation Sequence
```berry
-# Define a sunset palette
+animation red_pulse = breathe_animation(color=red, period=2s)
+animation blue_pulse = breathe_animation(color=blue, period=1.5s)
+
+sequence show repeat forever {
+ play red_pulse for 4s
+ wait 200ms
+ play blue_pulse for 3s
+ wait 300ms
+}
+run show
+```
+
+## DSL Syntax Overview
+
+### Numbers
+
+#### Time Values
+
+Time values require a unit suffix and are converted to milliseconds:
+
+```berry
+500ms # Milliseconds (stays 500)
+2s # Seconds (converted to 2000ms)
+1m # Minutes (converted to 60000ms)
+```
+
+#### Percentages
+
+Percentages are converted to 0-255 range:
+
+```berry
+0% # Converted to 0
+50% # Converted to 128
+100% # Converted to 255
+```
+
+### Colors and Palettes
+
+```berry
+# Hex colors
+color my_red = 0xFF0000
+
+# Predefined: red, green, blue, white, yellow, orange, purple, cyan...
+
+# Palettes for gradients
palette sunset = [
- (0, 0x191970) # Midnight blue
- (64, purple) # Purple
- (128, 0xFF69B4) # Hot pink
- (192, orange) # Orange
- (255, yellow) # Yellow
+ (0, navy), (128, purple), (255, orange)
]
-# Create palette animation
-animation sunset_glow = rich_palette(
- palette=sunset
- cycle_period=8s
- transition_type=1
-)
-
-run sunset_glow
+# Built-in palettes: PALETTE_RAINBOW, PALETTE_FIRE...
```
-### Reusable Templates
+### Value Providers (Oscillators)
-Create parameterized animation patterns that can be reused with different settings:
+Create dynamic values that change over time:
```berry
-# Define a reusable template
-template pulse_effect {
- param color type color
+set breathing = smooth(min_value=50, max_value=255, duration=3s)
+animation pulse = solid(color=red)
+pulse.opacity = breathing
+```
+
+Available: `smooth`, `triangle`, `sine_osc`, `linear`, `square`, `ease_in`, `ease_out`, `elastic`, `bounce`
+
+### Template Animations
+
+Create reusable, parameterized animation patterns:
+
+```berry
+template animation pulse_effect {
+ param pulse_color type color
param speed
- param brightness
-
- animation pulse = pulsating_animation(
- color=color
- period=speed
- opacity=brightness
- )
+ animation pulse = pulsating_animation(color=pulse_color, period=speed)
run pulse
}
-# Use the template with different parameters
-pulse_effect(red, 2s, 255) # Bright red pulse
-pulse_effect(blue, 1s, 150) # Dimmer blue pulse
-pulse_effect(0xFF69B4, 3s, 200) # Hot pink pulse
-```
+animation red_pulse = pulse_effect(color=red, speed=2s)
+animation blue_pulse = pulse_effect(color=blue, speed=1s)
-### Animation Sequences
-
-```berry
-animation red_pulse = pulsating_animation(color=red, period=2s)
-animation green_pulse = pulsating_animation(color=green, period=2s)
-animation blue_pulse = pulsating_animation(color=blue, period=2s)
-
-sequence rgb_show {
- play red_pulse for 3s
- wait 500ms
- play green_pulse for 3s
- wait 500ms
- play blue_pulse for 3s
-
- repeat 2 times {
- play red_pulse for 1s
- play green_pulse for 1s
- play blue_pulse for 1s
- }
+sequence show repeat forever {
+ play red_pulse for 5s
+ play blue_pulse for 5s
}
-
-run rgb_show
+run show
```
-## 📚 Documentation
+## Animation Reference
-### Getting Started
-- **[Quick Start Guide](docs/QUICK_START.md)** - Get up and running in 5 minutes
-- **[DSL Reference](docs/DSL_REFERENCE.md)** - Complete DSL syntax and features
-- **[Examples](docs/EXAMPLES.md)** - Comprehensive examples and tutorials
+Animation|Description
+:---|:---
+`solid`|Solid color fill
+`pulsating_animation`|Breathing/pulsing effect with smooth transitions
+`breathe_animation`|Natural breathing effect with customizable curve
+`beacon_animation`|Pulse/highlight at specific position with optional slew
+`crenel_position_animation`|Crenel/square wave pattern
+`comet_animation`|Moving comet with fading tail
+`twinkle_animation`|Twinkling stars effect
+`fire_animation`|Realistic fire simulation
+`rich_palette`|Smooth palette color transitions
+`gradient_animation`|Linear or radial color gradients
+`palette_gradient_animation`|Gradient patterns with palette colors
+`palette_meter_animation`|Meter/bar patterns
+`gradient_meter_animation`|VU meter with gradient and peak hold
+`noise_animation`|Perlin noise patterns
+`wave_animation`|Wave motion effects
-### Reference
-- **[Animation Class Hierarchy](docs/ANIMATION_CLASS_HIERARCHY.md)** - All available animations and parameters
-- **[Oscillation Patterns](docs/OSCILLATION_PATTERNS.md)** - Dynamic value patterns and waveforms
-- **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Common issues and solutions
+## Documentation
-### Advanced
-- **[User Functions](docs/USER_FUNCTIONS.md)** - Create custom animation functions
-- **[Animation Development](docs/ANIMATION_DEVELOPMENT.md)** - Create custom animations
-- **[Transpiler Architecture](docs/TRANSPILER_ARCHITECTURE.md)** - DSL transpiler internals and processing flow
-
-## 🎯 Core Concepts
-
-### DSL-First Design
-Write animations using simple, declarative syntax:
-```berry
-animation fire_effect = fire_animation(intensity=200, cooling_rate=55, sparking_rate=120)
-run fire_effect
-```
-
-### Dynamic Parameters
-Use oscillating values to create complex effects:
-```berry
-animation pulsing_comet = comet_animation(
- color=red
- tail_length = smooth(min_value=5, max_value=15, duration=3s)
- speed=2
-)
-```
-
-### Color Palettes
-Rich color transitions with predefined or custom palettes:
-```berry
-palette custom_palette = [(0, blue), (128, purple), (255, pink)]
-animation palette_cycle = rich_palette(palette=custom_palette, cycle_period=4s)
-```
-
-## 🎨 Animation Types
-
-### Basic Effects
-- **Pulse** - Breathing/pulsing effects with smooth transitions
-- **Sparkle** - Random twinkling and starfield effects
-- **Fire** - Realistic fire simulation with warm colors
-- **Comet** - Moving comet with customizable tail
-
-### Color Animations
-- **Rich Palette** - Smooth color transitions using predefined palettes
-- **Color Cycling** - Custom color sequences with smooth blending
-- **Gradient** - Linear and radial color gradients
-- **Plasma** - Classic plasma effects with sine wave interference
-
-### Pattern Effects
-- **Wave** - Mathematical waveforms (sine, triangle, square, sawtooth)
-- **Noise** - Organic patterns using Perlin noise
-- **Position-Based** - Precise control over individual LED positions
-
-### Motion Effects
-- **Bounce** - Physics-based bouncing with gravity and damping
-- **Shift** - Scrolling and translation effects
-- **Scale** - Size transformation and breathing effects
-- **Jitter** - Add random variations to any animation
-
-## 🔧 Installation
-
-### Prerequisites
-- Tasmota firmware with Berry support
-- Addressable LED strip (WS2812, SK6812, etc.)
-
-### Setup
-1. **Enable Berry** in Tasmota configuration
-2. **Configure LED strip** using Tasmota's LED configuration
-3. **Import the framework**:
- ```berry
- import animation
- ```
-4. **Create your first animation** using the DSL
-
-## 🌈 Predefined Palettes
-
-The framework includes several built-in color palettes:
-
-- **PALETTE_RAINBOW** - Standard 7-color rainbow (Red → Orange → Yellow → Green → Blue → Indigo → Violet)
-- **PALETTE_RGB** - Simple RGB cycle (Red → Green → Blue)
-- **PALETTE_FIRE** - Warm fire colors (Black → Dark Red → Red → Orange → Yellow)
-- **PALETTE_SUNSET_TICKS** - Sunset colors (Orange Red → Dark Orange → Gold → Hot Pink → Purple → Midnight Blue)
-- **PALETTE_OCEAN** - Blue and green ocean tones (Navy → Blue → Cyan → Spring Green → Green)
-- **PALETTE_FOREST** - Various green forest tones (Dark Green → Forest Green → Lime Green → Mint Green → Light Green)
-
-```berry
-# Use any predefined palette
-animation ocean_waves = rich_palette(
- palette=PALETTE_OCEAN
- cycle_period=8s
- transition_type=1
-)
-run ocean_waves
-```
-
-## 📄 License
-
-This project is licensed under the MIT License.
-
----
-
-**Happy Animating!** 🎨✨
+- **[Quick Start Guide](berry_animation_docs/QUICK_START.md)** - Get running in 5 minutes
+- **[DSL Reference](berry_animation_docs/DSL_REFERENCE.md)** - Complete syntax reference
+- **[Examples](berry_animation_docs/EXAMPLES.md)** - Comprehensive examples
+- **[Animation Classes](berry_animation_docs/ANIMATION_CLASS_HIERARCHY.md)** - All animations and parameters
+- **[Oscillation Patterns](berry_animation_docs/OSCILLATION_PATTERNS.md)** - Dynamic value waveforms
+- **[User Functions](berry_animation_docs/USER_FUNCTIONS.md)** - Extend with custom Berry functions
+- **[Troubleshooting](berry_animation_docs/TROUBLESHOOTING.md)** - Common issues and solutions
diff --git a/lib/libesp32/berry_animation/anim_examples/compiled/compilation_summary.md b/lib/libesp32/berry_animation/anim_examples/compiled/compilation_summary.md
index d044933e8..1e3b0d482 100644
--- a/lib/libesp32/berry_animation/anim_examples/compiled/compilation_summary.md
+++ b/lib/libesp32/berry_animation/anim_examples/compiled/compilation_summary.md
@@ -694,10 +694,8 @@ SUCCESS
| Symbol | Type | Builtin | Dangerous | Takes Args |
|--------------------------|-----------------------|---------|-----------|------------|
-| `PALETTE_FOREST` | palette_constant | ✓ | | |
| `fire_anim` | animation | | | |
| `fire_colors` | palette | | | |
-| `forest_anim` | animation | | | |
| `ocean_anim` | animation | | | |
| `ocean_colors` | palette | | | |
| `palette_demo` | sequence | | | |
diff --git a/lib/libesp32/berry_animation/anim_examples/compiled/palette_demo.be b/lib/libesp32/berry_animation/anim_examples/compiled/palette_demo.be
index c7efa50e8..2cb8d7382 100644
--- a/lib/libesp32/berry_animation/anim_examples/compiled/palette_demo.be
+++ b/lib/libesp32/berry_animation/anim_examples/compiled/palette_demo.be
@@ -29,9 +29,6 @@ fire_anim_.cycle_period = 5000
var ocean_anim_ = animation.rich_palette_animation(engine)
ocean_anim_.palette = ocean_colors_
ocean_anim_.cycle_period = 8000
-var forest_anim_ = animation.rich_palette_animation(engine)
-forest_anim_.palette = animation.PALETTE_FOREST
-forest_anim_.cycle_period = 8000
# Sequence to show both palettes
var palette_demo_ = animation.sequence_manager(engine)
.push_play_step(fire_anim_, 10000)
@@ -41,7 +38,6 @@ var palette_demo_ = animation.sequence_manager(engine)
.push_repeat_subsequence(animation.sequence_manager(engine, 2)
.push_play_step(fire_anim_, 3000)
.push_play_step(ocean_anim_, 3000)
- .push_play_step(forest_anim_, 3000)
)
engine.add(palette_demo_)
engine.run()
@@ -70,8 +66,6 @@ animation fire_anim = rich_palette_animation(palette=fire_colors, cycle_period=5
animation ocean_anim = rich_palette_animation(palette=ocean_colors, cycle_period=8s)
-animation forest_anim = rich_palette_animation(palette=PALETTE_FOREST, cycle_period=8s)
-
# Sequence to show both palettes
sequence palette_demo {
play fire_anim for 10s
@@ -81,7 +75,6 @@ sequence palette_demo {
repeat 2 times {
play fire_anim for 3s
play ocean_anim for 3s
- play forest_anim for 3s
}
}
diff --git a/lib/libesp32/berry_animation/anim_examples/palette_demo.anim b/lib/libesp32/berry_animation/anim_examples/palette_demo.anim
index 53d38bc34..36a17a488 100644
--- a/lib/libesp32/berry_animation/anim_examples/palette_demo.anim
+++ b/lib/libesp32/berry_animation/anim_examples/palette_demo.anim
@@ -20,8 +20,6 @@ animation fire_anim = rich_palette_animation(palette=fire_colors, cycle_period=5
animation ocean_anim = rich_palette_animation(palette=ocean_colors, cycle_period=8s)
-animation forest_anim = rich_palette_animation(palette=PALETTE_FOREST, cycle_period=8s)
-
# Sequence to show both palettes
sequence palette_demo {
play fire_anim for 10s
@@ -31,7 +29,6 @@ sequence palette_demo {
repeat 2 times {
play fire_anim for 3s
play ocean_anim for 3s
- play forest_anim for 3s
}
}
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_00_plain.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_00_plain.anim
index d00090fe5..6a3a78ba2 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_00_plain.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_00_plain.anim
@@ -1,4 +1,4 @@
-# Plain background
+# @desc Solid red background - the simplest animation
animation back = solid(color=red)
run back
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_10_palette_rotation.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_10_palette_rotation.anim
index c48fde45d..c891d09e4 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_10_palette_rotation.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_10_palette_rotation.anim
@@ -1,4 +1,4 @@
-# Rotation of colors in the background based on palette
+# @desc Rainbow colors cycling through the entire strip over time
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_20_color_transition.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_20_color_transition.anim
index 74658f380..b22c4cb9a 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_20_color_transition.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_20_color_transition.anim
@@ -1,4 +1,4 @@
-# Transition of colors in the background based on palette
+# @desc Smooth color transitions using rich_palette with sine interpolation
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_30_color_pattern.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_30_color_pattern.anim
index 6949eb496..31c3ccfa6 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_30_color_pattern.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_30_color_pattern.anim
@@ -1,4 +1,4 @@
-# Pattern of colors in the background based on palette
+# @desc Rainbow gradient pattern across the LED strip
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_31_color_pattern_spatial_2.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_31_color_pattern_spatial_2.anim
index dfe607f9f..7c58b9475 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_31_color_pattern_spatial_2.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_31_color_pattern_spatial_2.anim
@@ -1,4 +1,4 @@
-# Pattern of colors in the background based on palette, spatial period = 1/2 strip
+# @desc Rainbow gradient with 2 repetitions across the strip
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_32_color_pattern_spatial_osc.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_32_color_pattern_spatial_osc.anim
index 76249f477..73f0f51ae 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_32_color_pattern_spatial_osc.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_32_color_pattern_spatial_osc.anim
@@ -1,4 +1,4 @@
-# Pattern of colors in the background based on palette, spatial period oscillating
+# @desc Rainbow gradient with oscillating spatial period (breathing effect)
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_33_color_pattern_spatial_rotate.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_33_color_pattern_spatial_rotate.anim
index f81cce903..6665725a5 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_33_color_pattern_spatial_rotate.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_33_color_pattern_spatial_rotate.anim
@@ -1,4 +1,4 @@
-# Pattern of colors in the background based on palette, rotating over 5 s
+# @desc Rainbow gradient rotating along the strip over 5 seconds
# define a palette of rainbow colors including white with constant brightness
palette rainbow_with_white = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_40_color_pattern_meter.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_40_color_pattern_meter.anim
index 1b9cfc65a..5b7def77e 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_40_color_pattern_meter.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_40_color_pattern_meter.anim
@@ -1,4 +1,4 @@
-# Vue-meter based on random data
+# @desc VU-meter style animation with green-yellow-red gradient at 85%
# define a palette of rainbow colors including white with constant brightness
palette vue_meter_palette = [
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_1_41_color_pattern_meter_random.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_1_41_color_pattern_meter_random.anim
index 3e4233070..a8fd63a7a 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_1_41_color_pattern_meter_random.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_1_41_color_pattern_meter_random.anim
@@ -1,4 +1,4 @@
-# Vue-meter based on random data
+# @desc VU-meter with random level using custom Berry function
berry """
# define a pseudo-random generator, returns value in range 0..255
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_2_10_sky.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_2_10_sky.anim
index 0226d3bba..3dd728c94 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_2_10_sky.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_2_10_sky.anim
@@ -1,4 +1,4 @@
-# Sky
+# @desc Night sky with twinkling stars on dark blue background
# Dark blue background
color space_blue = 0x000066 # Note: opaque 0xFF alpha channel is implicitly added
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_5_10_template_cylon_simple.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_5_10_template_cylon_simple.anim
index b34482a3e..ed51f8ef9 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_5_10_template_cylon_simple.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_5_10_template_cylon_simple.anim
@@ -1,4 +1,4 @@
-# Template animation for Cylon like eye
+# @desc Cylon-style scanning eye using template with customizable color
template animation cylon_eye {
param eye_color type color default red
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_5_21_template_shutter_bidir_flags.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_5_21_template_shutter_bidir_flags.anim
index 4df8448df..c9a781c2c 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_5_21_template_shutter_bidir_flags.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_5_21_template_shutter_bidir_flags.anim
@@ -1,4 +1,4 @@
-# Template animation for Cylon like eye
+# @desc Bidirectional shutter effect with rainbow colors
template animation shutter_bidir {
param colors type palette
diff --git a/lib/libesp32/berry_animation/anim_tutorials/chap_5_22_template_shutter_bidir.anim b/lib/libesp32/berry_animation/anim_tutorials/chap_5_22_template_shutter_bidir.anim
index 9a8666112..725c1c591 100644
--- a/lib/libesp32/berry_animation/anim_tutorials/chap_5_22_template_shutter_bidir.anim
+++ b/lib/libesp32/berry_animation/anim_tutorials/chap_5_22_template_shutter_bidir.anim
@@ -1,4 +1,4 @@
-# Template animation with flags
+# @desc Advanced shutter template with ascending/descending flags
template animation shutter_bidir {
param colors type palette
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_CLASS_HIERARCHY.md b/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_CLASS_HIERARCHY.md
new file mode 100644
index 000000000..f4b085590
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_CLASS_HIERARCHY.md
@@ -0,0 +1,1197 @@
+# Berry Animation Framework - Class Hierarchy and Parameters Reference
+
+This document provides a comprehensive reference for all classes in the Berry Animation Framework that extend `ParameterizedObject`, including their parameters and factory functions.
+
+## Table of Contents
+
+1. [Class Hierarchy](#class-hierarchy)
+2. [Base Classes](#base-classes)
+3. [Value Providers](#value-providers)
+4. [Color Providers](#color-providers)
+5. [Animation Classes](#animation-classes)
+6. [Parameter Constraints](#parameter-constraints)
+
+## Class Hierarchy
+
+```
+ParameterizedObject (base class with parameter management and playable interface)
+├── Animation (unified base class for all visual elements)
+│ ├── EngineProxy (combines rendering and orchestration)
+│ │ └── (user-defined template animations)
+│ ├── SolidAnimation (solid color fill)
+│ ├── BeaconAnimation (pulse at specific position)
+│ ├── CrenelPositionAnimation (crenel/square wave pattern)
+│ ├── BreatheAnimation (breathing effect)
+│ ├── PaletteGradientAnimation (gradient patterns with palette colors)
+│ │ ├── PaletteMeterAnimation (meter/bar patterns)
+│ │ └── GradientMeterAnimation (VU meter with gradient colors and peak hold)
+│ ├── CometAnimation (moving comet with tail)
+│ ├── FireAnimation (realistic fire effect)
+│ ├── TwinkleAnimation (twinkling stars effect)
+│ ├── GradientAnimation (color gradients)
+│ ├── NoiseAnimation (Perlin noise patterns)
+│ ├── WaveAnimation (wave motion effects)
+│ └── RichPaletteAnimation (smooth palette transitions)
+├── SequenceManager (orchestrates animation sequences)
+└── ValueProvider (dynamic value generation)
+ ├── StaticValueProvider (wraps static values)
+ ├── StripLengthProvider (provides LED strip length)
+ ├── IterationNumberProvider (provides sequence iteration number)
+ ├── OscillatorValueProvider (oscillating values with waveforms)
+ ├── ClosureValueProvider (computed values, internal use only)
+ └── ColorProvider (dynamic color generation)
+ ├── StaticColorProvider (solid color)
+ ├── ColorCycleColorProvider (cycles through palette)
+ ├── RichPaletteColorProvider (smooth palette transitions)
+ ├── BreatheColorProvider (breathing color effect)
+ └── CompositeColorProvider (blends multiple colors)
+```
+
+## Base Classes
+
+### ParameterizedObject
+
+Base class for all parameterized objects in the framework. Provides parameter management with validation, storage, and retrieval, as well as the playable interface for lifecycle management (start/stop/update).
+
+This unified base class enables:
+- Consistent parameter handling across all framework objects
+- Unified engine management (animations and sequences treated uniformly)
+- Hybrid objects that combine rendering and orchestration
+- Consistent lifecycle management (start/stop/update)
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `is_running` | bool | false | - | Whether the object is active |
+
+**Key Methods**:
+- `start(time_ms)` - Start the object at a specific time
+- `stop()` - Stop the object
+- `update(time_ms)` - Update object state based on current time (no return value)
+
+**Factory**: N/A (base class)
+
+### Animation
+
+Unified base class for all visual elements. Inherits from `ParameterizedObject`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `id` | string | "animation" | - | Optional name for the animation |
+| `is_running` | bool | false | - | Whether the animation is active |
+| `priority` | int | 10 | 0-255 | Rendering priority (higher = on top) |
+| `duration` | int | 0 | min: 0 | Animation duration in ms (0 = infinite) |
+| `loop` | bool | false | - | Whether to loop when duration is reached |
+| `opacity` | any | 255 | - | Animation opacity (number, FrameBuffer, or Animation) |
+| `color` | int | 0xFFFFFFFF | - | Base color in ARGB format |
+
+**Special Behavior**: Setting `is_running = true/false` starts/stops the animation.
+
+**Timing Behavior**: The `start()` method only resets the time origin if the animation was already started previously (i.e., `self.start_time` is not nil). The first actual rendering tick occurs in `update()` or `render()` methods, which initialize `start_time` on first call.
+
+**Factory**: `animation.animation(engine)`
+
+### EngineProxy
+
+A specialized animation class that combines rendering and orchestration capabilities. Extends `Animation` and can contain child animations and sequences. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| *(inherits all Animation parameters)* | | | | |
+
+**Key Features**:
+- Can render visual content like a regular animation
+- Can orchestrate sub-animations and sequences using `add()`
+- Enables complex composite effects
+- Used as base class for template animations
+
+**Child Management**:
+- `add(obj)` - Adds a child animation or sequence
+- `remove(obj)` - Removes a child
+- Children are automatically started/stopped with parent
+- Children are rendered in priority order (higher priority on top)
+
+**Use Cases**:
+- Composite effects combining multiple animations
+- Template animations with parameters
+- Complex patterns with timing control
+- Reusable animation components
+
+**Factory**: `animation.engine_proxy(engine)`
+
+### Template Animations
+
+Template animations are user-defined classes that extend `EngineProxy`, created using the DSL's `template animation` syntax. They provide reusable, parameterized animation patterns.
+
+**DSL Definition**:
+```berry
+template animation shutter_effect {
+ param colors type palette nillable true
+ param duration type time min 0 max 3600 default 5 nillable false
+
+ # Animation definition with sequences, colors, etc.
+ # Parameters accessed as self.colors, self.duration
+}
+```
+
+**Generated Class Structure**:
+```berry
+class shutter_effect_animation : animation.engine_proxy
+ static var PARAMS = animation.enc_params({
+ "colors": {"type": "palette", "nillable": true},
+ "duration": {"type": "time", "min": 0, "max": 3600, "default": 5, "nillable": false}
+ })
+
+ def init(engine)
+ super(self).init(engine)
+ # Generated code with self.colors and self.duration references
+ # Uses self.add() for sub-animations and sequences
+ end
+end
+```
+
+**Parameter Constraints**:
+Template animation parameters support all standard constraints:
+- `type` - Parameter type (palette, time, int, color, etc.)
+- `min` - Minimum value (for numeric types)
+- `max` - Maximum value (for numeric types)
+- `default` - Default value
+- `nillable` - Whether parameter can be nil (true/false)
+
+**Implicit Parameters**:
+Template animations automatically inherit parameters from the `EngineProxy` class hierarchy without explicit declaration:
+- `id` (string, default: "animation") - Animation name
+- `priority` (int, default: 10) - Rendering priority
+- `duration` (int, default: 0) - Animation duration in milliseconds
+- `loop` (bool, default: false) - Whether animation loops
+- `opacity` (int, default: 255) - Animation opacity (0-255)
+- `color` (int, default: 0) - Base color value
+- `is_running` (bool, default: false) - Running state
+
+These parameters can be used directly in template animation bodies without declaration:
+```berry
+template animation fade_effect {
+ param colors type palette
+
+ # 'duration' is implicit - no need to declare
+ set oscillator = sawtooth(min_value=0, max_value=255, duration=duration)
+
+ color col = color_cycle(palette=colors, cycle_period=0)
+ animation test = solid(color=col)
+ test.opacity = oscillator # 'opacity' is also implicit
+
+ run test
+}
+```
+
+**Usage**:
+```berry
+# Create instance with parameters
+palette rainbow = [red, orange, yellow, green, blue]
+animation my_shutter = shutter_effect(colors=rainbow, duration=2s)
+run my_shutter
+```
+
+**Key Differences from Regular Animations**:
+- Defined in DSL, not Berry code
+- Parameters accessed as `self.` instead of direct variables
+- Uses `self.add()` for composition
+- Can be instantiated multiple times with different parameters
+- Automatically registered as animation constructors
+
+**Factory**: User-defined (e.g., `shutter_effect(engine)`)
+
+## Value Providers
+
+Value providers generate dynamic values over time for use as animation parameters.
+
+### ValueProvider
+
+Base interface for all value providers. Inherits from `ParameterizedObject`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| *(none)* | - | - | - | Base interface has no parameters |
+
+**Timing Behavior**: For value providers, `start()` is typically not called because instances can be embedded in closures. Value providers consider the first call to `produce_value()` as the start of their internal time reference. The `start()` method only resets the time origin if the provider was already started previously (i.e., `self.start_time` is not nil).
+
+**Update Method**: The `update(time_ms)` method does not return any value. Subclasses should check `self.is_running` to determine if the object is still active.
+
+**Factory**: N/A (base interface)
+
+### StaticValueProvider
+
+Wraps static values to provide ValueProvider interface. Inherits from `ValueProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `value` | any | nil | - | The static value to return |
+
+**Factory**: `animation.static_value(engine)`
+
+### StripLengthProvider
+
+Provides access to the LED strip length as a dynamic value. Inherits from `ValueProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| *(none)* | - | - | - | No parameters - strip length obtained from engine |
+
+**Usage**: Returns the 1D length of the LED strip in pixels. Useful for animations that need to know the strip dimensions for positioning, scaling, or boundary calculations.
+
+**Factory**: `animation.strip_length(engine)`
+
+### OscillatorValueProvider
+
+Generates oscillating values using various waveforms. Inherits from `ValueProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `min_value` | int | 0 | - | Minimum oscillation value |
+| `max_value` | int | 255 | - | Maximum oscillation value |
+| `duration` | int | 1000 | min: 1 | Oscillation period in milliseconds |
+| `form` | int | 1 | enum: [1,2,3,4,5,6,7,8,9] | Waveform type |
+| `phase` | int | 0 | 0-255 | Phase shift in 0-255 range (mapped to duration) |
+| `duty_cycle` | int | 127 | 0-255 | Duty cycle for square/triangle waves in 0-255 range |
+
+**Waveform Constants**:
+- `1` (SAWTOOTH) - Linear ramp from min to max
+- `2` (TRIANGLE) - Linear ramp from min to max and back
+- `3` (SQUARE) - Square wave alternating between min and max
+- `4` (COSINE) - Smooth cosine wave
+- `5` (SINE) - Pure sine wave
+- `6` (EASE_IN) - Quadratic acceleration
+- `7` (EASE_OUT) - Quadratic deceleration
+- `8` (ELASTIC) - Spring-like overshoot and oscillation
+- `9` (BOUNCE) - Ball-like bouncing with decreasing amplitude
+
+**Timing Behavior**: The `start_time` is initialized on the first call to `produce_value()`. The `start()` method only resets the time origin if the oscillator was already started previously (i.e., `self.start_time` is not nil).
+
+**Factories**: `animation.ramp(engine)`, `animation.sawtooth(engine)`, `animation.linear(engine)`, `animation.triangle(engine)`, `animation.smooth(engine)`, `animation.sine_osc(engine)`, `animation.cosine_osc(engine)`, `animation.square(engine)`, `animation.ease_in(engine)`, `animation.ease_out(engine)`, `animation.elastic(engine)`, `animation.bounce(engine)`, `animation.oscillator_value(engine)`
+
+**See Also**: [Oscillation Patterns](OSCILLATION_PATTERNS.md) - Visual examples and usage patterns for oscillation waveforms
+
+### ClosureValueProvider
+
+**⚠️ INTERNAL USE ONLY - NOT FOR DIRECT USE**
+
+Wraps a closure/function as a value provider for internal transpiler use. This class is used internally by the DSL transpiler to handle computed values and should not be used directly by users.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `closure` | function | nil | - | The closure function to call for value generation |
+
+**Internal Usage**: This provider is automatically created by the DSL transpiler when it encounters computed expressions or arithmetic operations involving value providers. The closure is called with `(self, param_name, time_ms)` parameters.
+
+#### Mathematical Helper Methods
+
+The ClosureValueProvider includes built-in mathematical helper methods that can be used within closures for computed values:
+
+| Method | Description | Parameters | Return Type | Example |
+|--------|-------------|------------|-------------|---------|
+| `min(a, b, ...)` | Minimum of two or more values | `a, b, *args: number` | `number` | `animation._math.min(5, 3, 8)` → `3` |
+| `max(a, b, ...)` | Maximum of two or more values | `a, b, *args: number` | `number` | `animation._math.max(5, 3, 8)` → `8` |
+| `abs(x)` | Absolute value | `x: number` | `number` | `animation._math.abs(-5)` → `5` |
+| `round(x)` | Round to nearest integer | `x: number` | `int` | `animation._math.round(3.7)` → `4` |
+| `sqrt(x)` | Square root with integer handling | `x: number` | `number` | `animation._math.sqrt(64)` → `128` (for 0-255 range) |
+| `scale(v, from_min, from_max, to_min, to_max)` | Scale value between ranges | `v, from_min, from_max, to_min, to_max: number` | `int` | `animation._math.scale(50, 0, 100, 0, 255)` → `127` |
+| `sin(angle)` | Sine function (0-255 input range) | `angle: number` | `int` | `animation._math.sin(64)` → `255` (90°) |
+| `cos(angle)` | Cosine function (0-255 input range) | `angle: number` | `int` | `animation._math.cos(0)` → `-255` (matches oscillator behavior) |
+
+**Mathematical Method Notes:**
+
+- **Integer Handling**: `sqrt()` treats integers in 0-255 range as normalized values (255 = 1.0)
+- **Angle Range**: `sin()` and `cos()` use 0-255 input range (0-360 degrees)
+- **Output Range**: Trigonometric functions return -255 to 255 (mapped from -1.0 to 1.0)
+- **Cosine Behavior**: Matches oscillator COSINE waveform (starts at minimum, not maximum)
+- **Scale Function**: Uses `tasmota.scale_int()` for efficient integer scaling
+
+#### Closure Signature
+
+Closures used with ClosureValueProvider must follow this signature:
+```berry
+def closure_func(engine, param_name, time_ms)
+ # engine: AnimationEngine reference
+ # param_name: Name of the parameter being computed
+ # time_ms: Current time in milliseconds
+ return computed_value
+end
+```
+
+#### Usage in Computed Values
+
+These methods are automatically available in DSL computed expressions:
+
+```berry
+# Example: Dynamic brightness based on strip position
+set strip_len = strip_length()
+animation pulse = pulsating_animation(
+ color=red
+ brightness=strip_len / 4 + 50 # Uses built-in arithmetic
+)
+
+# Complex mathematical expressions are automatically wrapped in closures
+# that have access to all mathematical helper methods
+```
+
+**Factory**: `animation.closure_value(engine)` (internal use only)
+
+**Note**: Users should not create ClosureValueProvider instances directly. Instead, use the DSL's computed value syntax which automatically creates these providers as needed.
+
+## Color Providers
+
+Color providers generate dynamic colors over time, extending ValueProvider for color-specific functionality.
+
+### ColorProvider
+
+Base interface for all color providers. Inherits from `ValueProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `brightness` | int | 255 | 0-255 | Overall brightness scaling for all colors |
+
+**Static Methods**:
+- `apply_brightness(color, brightness)` - Applies brightness scaling to a color (ARGB format). Only performs scaling if brightness is not 255 (full brightness). This is a static utility method that can be called without an instance.
+
+**Factory**: N/A (base interface)
+
+### StaticColorProvider
+
+Returns a single, static color. Inherits from `ColorProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | The solid color to return |
+| *(inherits brightness from ColorProvider)* | | | | |
+
+#### Usage Examples
+
+```berry
+# Using predefined colors
+color static_red = solid(color=red)
+color static_blue = solid(color=blue)
+
+# Using hex colors
+color static_orange = solid(color=0xFF8C00)
+
+# Using custom defined colors
+color accent = 0xFF6B35
+color static_accent = solid(color=accent)
+```
+
+**Note**: The `solid()` function is the recommended shorthand for `static_color()`.
+
+### ColorCycleColorProvider
+
+Cycles through a palette of colors with brutal switching. Inherits from `ColorProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `palette` | bytes | default palette | - | Palette bytes in AARRGGBB format |
+| `cycle_period` | int | 5000 | min: 0 | Cycle time in ms (0 = manual only) |
+| `next` | int | 0 | - | Write 1 to move to next color manually, or any number to go forward or backwards by `n` colors |
+| `palette_size` | int | 3 | read-only | Number of colors in the palette (automatically updated when palette changes) |
+| *(inherits brightness from ColorProvider)* | | | | |
+
+**Note**: The `get_color_for_value()` method accepts values in the 0-255 range for value-based color mapping.
+
+**Modes**: Auto-cycle (`cycle_period > 0`) or Manual-only (`cycle_period = 0`)
+
+#### Usage Examples
+
+```berry
+# RGB cycle with brutal switching
+color rgb_cycle = color_cycle(
+ palette=bytes("FF0000FF" "FF00FF00" "FFFF0000"),
+ cycle_period=4s
+)
+
+# Custom warm colors
+color warm_cycle = color_cycle(
+ palette=bytes("FF4500FF" "FF8C00FF" "FFFF00"),
+ cycle_period=3s
+)
+
+# Mixed colors in AARRGGBB format
+color mixed_cycle = color_cycle(
+ palette=bytes("FFFF0000" "FF00FF00" "FF0000FF"),
+ cycle_period=2s
+)
+```
+
+### RichPaletteColorProvider
+
+Generates colors from predefined palettes with smooth transitions and professional color schemes. Inherits from `ColorProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `palette` | bytes | rainbow palette | - | Palette bytes or predefined palette constant |
+| `cycle_period` | int | 5000 | min: 0 | Cycle time in ms (0 = value-based only) |
+| `transition_type` | int | animation.LINEAR | enum: [animation.LINEAR, animation.SINE] | LINEAR=constant speed, SINE=smooth ease-in/ease-out |
+| *(inherits brightness from ColorProvider)* | | | | |
+
+#### Available Predefined Palettes
+
+| Palette | Description | Colors |
+|---------|-------------|---------|
+| `PALETTE_RAINBOW` | Standard 7-color rainbow | Red → Orange → Yellow → Green → Blue → Indigo → Violet |
+| `PALETTE_RGB` | Simple RGB cycle | Red → Green → Blue |
+| `PALETTE_FIRE` | Warm fire colors | Black → Dark Red → Red → Orange → Yellow |
+
+#### Usage Examples
+
+```berry
+# Rainbow palette with smooth ease-in/ease-out transitions
+color rainbow_colors = rich_palette(
+ palette=PALETTE_RAINBOW,
+ cycle_period=5s,
+ transition_type=SINE,
+ brightness=255
+)
+
+# Fire effect with linear (constant speed) transitions
+color fire_colors = rich_palette(
+ palette=PALETTE_FIRE,
+ cycle_period=3s,
+ transition_type=LINEAR,
+ brightness=200
+)
+```
+
+### BreatheColorProvider
+
+Creates breathing/pulsing color effects by modulating the brightness of a base color over time. Inherits from `ColorProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `base_color` | int | 0xFFFFFFFF | - | The base color to modulate (32-bit ARGB value) |
+| `min_brightness` | int | 0 | 0-255 | Minimum brightness level (breathing effect) |
+| `max_brightness` | int | 255 | 0-255 | Maximum brightness level (breathing effect) |
+| `duration` | int | 3000 | min: 1 | Time for one complete breathing cycle in ms |
+| `curve_factor` | int | 2 | 1-5 | Breathing curve shape (1=cosine wave, 2-5=curved breathing with pauses) |
+| *(inherits brightness from ColorProvider)* | | | | Overall brightness scaling applied after breathing effect |
+| *(inherits all OscillatorValueProvider parameters)* | | | | |
+
+**Curve Factor Effects:**
+- `1`: Pure cosine wave (smooth pulsing, equivalent to pulsating_color)
+- `2`: Natural breathing with slight pauses at peaks
+- `3`: More pronounced breathing with longer pauses
+- `4`: Deep breathing with extended pauses
+- `5`: Most pronounced pauses at peaks (dramatic breathing effect)
+
+#### Usage Examples
+
+```berry
+# Natural breathing effect
+color breathing_red = breathe_color(
+ base_color=red,
+ min_brightness=20,
+ max_brightness=255,
+ duration=4s,
+ curve_factor=3
+)
+
+# Fast pulsing effect (equivalent to pulsating_color)
+color pulse_blue = breathe_color(
+ base_color=blue,
+ min_brightness=50,
+ max_brightness=200,
+ duration=1s,
+ curve_factor=1
+)
+
+# Slow, deep breathing
+color deep_breath = breathe_color(
+ base_color=purple,
+ min_brightness=5,
+ max_brightness=255,
+ duration=6s,
+ curve_factor=4
+)
+
+# Using dynamic base color
+color rainbow_cycle = color_cycle(palette=bytes("FF0000FF" "FF00FF00" "FFFF0000"), cycle_period=5s)
+color breathing_rainbow = breathe_color(
+ base_color=rainbow_cycle,
+ min_brightness=30,
+ max_brightness=255,
+ duration=3s,
+ curve_factor=2
+)
+```
+
+**Factories**: `animation.breathe_color(engine)`, `animation.pulsating_color(engine)`
+
+**Note**: The `pulsating_color()` factory creates a BreatheColorProvider with `curve_factor=1` and `duration=1000ms` for fast pulsing effects.
+
+### CompositeColorProvider
+
+Combines multiple color providers with blending. Inherits from `ColorProvider`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `blend_mode` | int | 0 | enum: [0,1,2] | 0=overlay, 1=add, 2=multiply |
+| *(inherits brightness from ColorProvider)* | | | | Overall brightness scaling applied to final composite color |
+
+**Factory**: `animation.composite_color(engine)`
+
+## Animation Classes
+
+All animation classes extend the base `Animation` class and inherit its parameters.
+
+### BreatheAnimation
+
+Creates a smooth breathing effect with natural breathing curves. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | The color to breathe |
+| `min_brightness` | int | 0 | 0-255 | Minimum brightness level |
+| `max_brightness` | int | 255 | 0-255 | Maximum brightness level |
+| `period` | int | 3000 | min: 100 | Breathing cycle time in ms |
+| `curve_factor` | int | 2 | 1-5 | Breathing curve shape (higher = sharper) |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factory**: `animation.breathe_animation(engine)`
+
+### CometAnimation
+
+Creates a comet effect with a bright head and fading tail. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | Color for the comet head |
+| `tail_length` | int | 5 | 1-50 | Length of the comet tail in pixels |
+| `speed` | int | 2560 | 1-25600 | Movement speed in 1/256th pixels per second |
+| `direction` | int | 1 | enum: [-1,1] | Direction of movement (1=forward, -1=backward) |
+| `wrap_around` | int | 1 | 0-1 | Whether comet wraps around the strip |
+| `fade_factor` | int | 179 | 0-255 | How quickly the tail fades |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factory**: `animation.comet_animation(engine)`
+
+
+
+
+### FireAnimation
+
+Creates a realistic fire effect with flickering flames. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | instance | nil | - | Color provider for fire palette (nil = default fire palette) |
+| `intensity` | int | 180 | 0-255 | Overall fire intensity |
+| `flicker_speed` | int | 8 | 1-20 | Flicker update frequency in Hz |
+| `flicker_amount` | int | 100 | 0-255 | Amount of random flicker |
+| `cooling_rate` | int | 55 | 0-255 | How quickly flames cool down |
+| `sparking_rate` | int | 120 | 0-255 | Rate of new spark generation |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factory**: `animation.fire_animation(engine)`
+
+### GradientAnimation
+
+Creates smooth color gradients that can be linear or radial. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | instance | nil | nillable | Color provider (nil = rainbow gradient) |
+| `gradient_type` | int | 0 | 0-1 | 0=linear, 1=radial |
+| `direction` | int | 0 | 0-255 | Gradient direction/orientation |
+| `center_pos` | int | 128 | 0-255 | Center position for radial gradients |
+| `spread` | int | 255 | 1-255 | Gradient spread/compression |
+| `movement_speed` | int | 0 | 0-255 | Speed of gradient movement |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factories**: `animation.gradient_animation(engine)`, `animation.gradient_rainbow_linear(engine)`, `animation.gradient_rainbow_radial(engine)`, `animation.gradient_two_color_linear(engine)`
+
+### GradientMeterAnimation
+
+VU meter style animation that displays a gradient-colored bar from the start of the strip up to a configurable level. Includes optional peak hold indicator. Inherits from `PaletteGradientAnimation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `level` | int | 255 | 0-255 | Current meter level (0=empty, 255=full) |
+| `peak_hold` | int | 1000 | min: 0 | Peak hold time in ms (0=disabled) |
+| *(inherits all PaletteGradientAnimation parameters)* | | | | |
+
+#### Visual Representation
+
+```
+level=128 (50%), peak at 200
+[████████████████--------•-------]
+^ ^
+| peak indicator (single pixel)
+filled gradient area
+```
+
+#### Usage Examples
+
+```berry
+# Simple meter with rainbow gradient
+color rainbow = rich_palette()
+animation meter = gradient_meter_animation()
+meter.color_source = rainbow
+meter.level = 128
+
+# Meter with peak hold (1 second)
+color fire_colors = rich_palette(palette=PALETTE_FIRE)
+animation vu_meter = gradient_meter_animation(peak_hold=1000)
+vu_meter.color_source = fire_colors
+
+# Dynamic level from value provider
+set audio_level = triangle(min_value=0, max_value=255, period=2s)
+animation audio_meter = gradient_meter_animation(peak_hold=500)
+audio_meter.color_source = rainbow
+audio_meter.level = audio_level
+```
+
+**Factory**: `animation.gradient_meter_animation(engine)`
+
+### NoiseAnimation
+
+Creates pseudo-random noise patterns with configurable scale, speed, and fractal complexity. Perfect for organic, natural-looking effects like clouds, fire textures, or abstract patterns. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | instance | nil | - | Color provider for noise mapping (nil = rainbow) |
+| `scale` | int | 50 | 1-255 | Noise scale/frequency (lower = larger patterns) |
+| `speed` | int | 30 | 0-255 | Animation speed (0 = static pattern) |
+| `octaves` | int | 1 | 1-4 | Number of noise octaves for fractal complexity |
+| `persistence` | int | 128 | 0-255 | How much each octave contributes to final pattern |
+| `seed` | int | 12345 | 0-65535 | Random seed for reproducible patterns |
+| *(inherits all Animation parameters)* | | | | |
+
+#### Noise Characteristics
+
+**Scale Effects:**
+- **Low scale (10-30)**: Large, flowing patterns
+- **Medium scale (40-80)**: Balanced detail and flow
+- **High scale (100-200)**: Fine, detailed textures
+
+**Octave Effects:**
+- **1 octave**: Smooth, simple patterns
+- **2 octaves**: Added medium-frequency detail
+- **3+ octaves**: Complex, natural-looking textures
+
+**Speed Effects:**
+- **Static (0)**: Fixed pattern for backgrounds
+- **Slow (10-40)**: Gentle, organic movement
+- **Fast (80-200)**: Dynamic, energetic patterns
+
+#### Usage Examples
+
+```berry
+# Rainbow noise with medium detail
+animation rainbow_noise = noise_animation(
+ scale=60,
+ speed=40,
+ octaves=1
+)
+
+# Blue fire texture with fractal detail
+color blue_fire = 0xFF0066FF
+animation blue_texture = noise_animation(
+ color=blue_fire,
+ scale=120,
+ speed=60,
+ octaves=3,
+ persistence=100
+)
+
+# Static cloud pattern
+animation cloud_pattern = noise_animation(
+ color=white,
+ scale=30,
+ speed=0,
+ octaves=2
+)
+```
+
+#### Common Use Cases
+
+- **Ambient Lighting**: Slow, low-scale noise for background ambiance
+- **Fire Effects**: Orange/red colors with medium scale and speed
+- **Water Effects**: Blue/cyan colors with flowing movement
+- **Cloud Simulation**: White/gray colors with large-scale patterns
+- **Abstract Art**: Rainbow colors with high detail and multiple octaves
+
+
+
+### PulseAnimation
+
+Creates a pulsing effect oscillating between min and max brightness. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | Pulse color |
+| `min_brightness` | int | 0 | 0-255 | Minimum brightness level |
+| `max_brightness` | int | 255 | 0-255 | Maximum brightness level |
+| `period` | int | 1000 | min: 100 | Pulse period in milliseconds |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factory**: `animation.pulsating_animation(engine)`
+
+### BeaconAnimation
+
+Creates a pulse effect at a specific position with optional fade regions. Inherits from `Animation`.
+
+#### Visual Pattern
+
+```
+ pos (1)
+ |
+ v
+ _______
+ / \
+ _______/ \____________
+ | | | |
+ |2| 3 |2|
+```
+
+Where:
+1. `pos` - Start of the pulse (in pixels)
+2. `slew_size` - Number of pixels to fade from back to fore color (can be 0)
+3. `beacon_size` - Number of pixels of the pulse
+
+The pulse consists of:
+- **Core pulse**: Full brightness region of `beacon_size` pixels
+- **Fade regions**: Optional `slew_size` pixels on each side with gradual fade
+- **Total width**: `beacon_size + (2 * slew_size)` pixels
+
+#### Parameters
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | Pulse color in ARGB format |
+| `back_color` | int | 0xFF000000 | - | Background color in ARGB format |
+| `pos` | int | 0 | - | Pulse start position in pixels |
+| `beacon_size` | int | 1 | min: 0 | Size of core pulse in pixels |
+| `slew_size` | int | 0 | min: 0 | Fade region size on each side in pixels |
+| *(inherits all Animation parameters)* | | | | |
+
+#### Pattern Behavior
+
+- **Sharp Pulse** (`slew_size = 0`): Rectangular pulse with hard edges
+- **Soft Pulse** (`slew_size > 0`): Pulse with smooth fade-in/fade-out regions
+- **Positioning**: `pos` defines the start of the core pulse region
+- **Fade Calculation**: Linear fade from full brightness to background color
+- **Boundary Handling**: Fade regions are clipped to frame boundaries
+
+#### Usage Examples
+
+```berry
+# Sharp pulse at center
+animation sharp_pulse = beacon_animation(
+ color=red,
+ pos=10,
+ beacon_size=3,
+ slew_size=0
+)
+
+# Soft pulse with fade regions
+animation soft_pulse = beacon_animation(
+ color=green,
+ pos=5,
+ beacon_size=2,
+ slew_size=3
+)
+# Total width: 2 + (2 * 3) = 8 pixels
+
+# Spotlight effect
+color dark_blue = 0xFF000040
+animation spotlight = beacon_animation(
+ color=white,
+ back_color=dark_blue,
+ pos=15,
+ beacon_size=1,
+ slew_size=5
+)
+
+run spotlight
+```
+
+#### Common Use Cases
+
+**Spotlight Effects:**
+```berry
+# Moving spotlight with soft edges
+animation moving_spotlight = beacon_animation(
+ color=white,
+ back_color=0xFF000040,
+ beacon_size=1,
+ slew_size=5
+)
+moving_spotlight.pos = triangle(min_value=0, max_value=29, period=3s)
+```
+
+**Position Markers:**
+```berry
+# Sharp position marker
+animation position_marker = beacon_animation(
+ color=red,
+ pos=15,
+ beacon_size=1,
+ slew_size=0
+)
+```
+
+**Breathing Spots:**
+```berry
+# Breathing effect at specific position
+animation breathing_spot = beacon_animation(
+ color=blue,
+ pos=10,
+ beacon_size=3,
+ slew_size=2
+)
+breathing_spot.opacity = smooth(min_value=50, max_value=255, period=2s)
+```
+
+**Factory**: `animation.beacon_animation(engine)`
+
+### CrenelPositionAnimation
+
+Creates a crenel (square wave) pattern with repeating rectangular pulses. Inherits from `Animation`.
+
+#### Visual Pattern
+
+```
+ pos (1)
+ |
+ v (*4)
+ ______ ____
+ | | |
+ _________| |_________|
+
+ | 2 | 3 |
+```
+
+Where:
+1. `pos` - Starting position of the first pulse (in pixels)
+2. `pulse_size` - Width of each pulse (in pixels)
+3. `low_size` - Gap between pulses (in pixels)
+4. `nb_pulse` - Number of pulses (-1 for infinite)
+
+The full period of the pattern is `pulse_size + low_size` pixels.
+
+#### Parameters
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | Pulse color in ARGB format |
+| `back_color` | int | 0xFF000000 | - | Background color in ARGB format |
+| `pos` | int | 0 | - | Starting position of first pulse in pixels |
+| `pulse_size` | int | 1 | min: 0 | Width of each pulse in pixels |
+| `low_size` | int | 3 | min: 0 | Gap between pulses in pixels |
+| `nb_pulse` | int | -1 | - | Number of pulses (-1 = infinite) |
+| *(inherits all Animation parameters)* | | | | |
+
+#### Pattern Behavior
+
+- **Infinite Mode** (`nb_pulse = -1`): Pattern repeats continuously across the strip
+- **Finite Mode** (`nb_pulse > 0`): Shows exactly the specified number of pulses
+- **Period**: Each pattern cycle spans `pulse_size + low_size` pixels
+- **Boundary Handling**: Pulses are clipped to frame boundaries
+- **Zero Sizes**: `pulse_size = 0` produces no output; `low_size = 0` creates continuous pulses
+
+#### Pattern Calculations
+
+- **Period and Positioning**: The pattern repeats every `pulse_size + low_size` pixels
+- **Optimization**: For infinite pulses, the algorithm calculates optimal starting position for efficient rendering
+- **Boundary Clipping**: Pulses are automatically clipped to frame boundaries
+- **Modulo Arithmetic**: Negative positions are handled correctly with modulo arithmetic
+
+#### Common Use Cases
+
+**Status Indicators:**
+```berry
+# Slow blinking pattern for status indication
+animation status_indicator = crenel_position_animation(
+ color=green,
+ pulse_size=1,
+ low_size=9
+)
+```
+
+**Rhythmic Effects:**
+```berry
+# Fast rhythmic pattern
+animation rhythm_pattern = crenel_position_animation(
+ color=red,
+ pulse_size=2,
+ low_size=2
+)
+```
+
+**Decorative Borders:**
+```berry
+# Decorative border pattern
+color gold = 0xFFFFD700
+animation border_pattern = crenel_position_animation(
+ color=gold,
+ pulse_size=3,
+ low_size=1,
+ nb_pulse=10
+)
+```
+
+**Progress Indicators:**
+```berry
+# Progress bar with limited pulses
+animation progress_bar = crenel_position_animation(
+ color=0xFF0080FF,
+ pulse_size=2,
+ low_size=1,
+ nb_pulse=5
+)
+```
+
+#### Integration Features
+
+- **Parameter System**: All parameters support dynamic updates with validation
+- **Method Chaining**: Fluent API for configuration (in Berry code)
+- **Animation Lifecycle**: Inherits standard animation lifecycle methods
+- **Framework Integration**: Seamless integration with animation engine
+- **Testing**: Comprehensive test suite covering edge cases and performance
+
+**Factory**: `animation.crenel_position_animation(engine)`
+
+### RichPaletteAnimation
+
+Creates smooth color transitions using rich palette data with direct parameter access. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `palette` | bytes | rainbow palette | - | Palette bytes or predefined palette |
+| `cycle_period` | int | 5000 | min: 0 | Cycle time in ms (0 = value-based only) |
+| `transition_type` | int | animation.LINEAR | enum: [animation.LINEAR, animation.SINE] | LINEAR=constant speed, SINE=smooth ease-in/ease-out |
+| `brightness` | int | 255 | 0-255 | Overall brightness scaling |
+| *(inherits all Animation parameters)* | | | | |
+
+**Special Features**:
+- Direct parameter access (set `anim.palette` instead of `anim.color.palette`)
+- Parameters are automatically forwarded to internal `RichPaletteColorProvider`
+- Access to specialized methods via `anim.color_provider.method_name()`
+
+**Factory**: `animation.rich_palette_animation(engine)`
+
+### TwinkleAnimation
+
+Creates a twinkling stars effect with random lights appearing and fading. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFFFFFF | - | Twinkle color |
+| `density` | int | 128 | 0-255 | Twinkle density/probability |
+| `twinkle_speed` | int | 6 | 1-5000 | Update frequency in Hz (or period in ms if ≥50) |
+| `fade_speed` | int | 180 | 0-255 | How quickly twinkles fade |
+| `min_brightness` | int | 32 | 0-255 | Minimum twinkle brightness |
+| `max_brightness` | int | 255 | 0-255 | Maximum twinkle brightness |
+| *(inherits all Animation parameters)* | | | | |
+
+**Factories**: `animation.twinkle_animation(engine)`, `animation.twinkle_classic(engine)`, `animation.twinkle_solid(engine)`, `animation.twinkle_rainbow(engine)`, `animation.twinkle_gentle(engine)`, `animation.twinkle_intense(engine)`
+
+### WaveAnimation
+
+Creates mathematical waveforms that can move along the LED strip. Perfect for rhythmic patterns, breathing effects, or mathematical visualizations. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color` | int | 0xFFFF0000 | - | Wave color |
+| `back_color` | int | 0xFF000000 | - | Background color shown in wave valleys |
+| `wave_type` | int | 0 | 0-3 | 0=sine, 1=triangle, 2=square, 3=sawtooth |
+| `amplitude` | int | 128 | 0-255 | Wave height/intensity range |
+| `frequency` | int | 32 | 0-255 | How many wave cycles fit on the strip |
+| `phase` | int | 0 | 0-255 | Horizontal wave pattern shift |
+| `wave_speed` | int | 50 | 0-255 | Movement speed (0 = static wave) |
+| `center_level` | int | 128 | 0-255 | Baseline intensity around which wave oscillates |
+| *(inherits all Animation parameters)* | | | | |
+
+#### Wave Types
+
+**Sine Wave (0):**
+- **Characteristics**: Smooth, natural oscillation
+- **Best for**: Breathing effects, natural rhythms, ambient lighting
+
+**Triangle Wave (1):**
+- **Characteristics**: Linear ramps up and down with sharp peaks
+- **Best for**: Scanning effects, linear fades
+
+**Square Wave (2):**
+- **Characteristics**: Sharp on/off transitions
+- **Best for**: Strobing, digital effects, alerts
+
+**Sawtooth Wave (3):**
+- **Characteristics**: Gradual rise, instant drop
+- **Best for**: Scanning beams, ramp effects
+
+#### Wave Characteristics
+
+**Frequency Effects:**
+- **Low frequency (10-30)**: Long, flowing waves
+- **Medium frequency (40-80)**: Balanced wave patterns
+- **High frequency (100-200)**: Dense, detailed patterns
+
+**Amplitude Effects:**
+- **Low amplitude (50-100)**: Subtle intensity variation
+- **Medium amplitude (100-180)**: Noticeable wave pattern
+- **High amplitude (200-255)**: Dramatic intensity swings
+
+#### Usage Examples
+
+```berry
+# Rainbow sine wave
+animation rainbow_wave = wave_animation(
+ wave_type=0,
+ frequency=40,
+ wave_speed=80,
+ amplitude=150
+)
+
+# Green breathing effect
+animation breathing = wave_animation(
+ color=green,
+ wave_type=0,
+ amplitude=150,
+ frequency=20,
+ wave_speed=30
+)
+
+# Fast square wave strobe
+animation strobe = wave_animation(
+ color=white,
+ wave_type=2,
+ frequency=80,
+ wave_speed=150
+)
+```
+
+#### Common Use Cases
+
+- **Breathing Effects**: Slow sine waves for calming ambiance
+- **Scanning Beams**: Sawtooth waves for radar-like effects
+- **Strobing**: Square waves for attention-getting flashes
+- **Color Cycling**: Rainbow waves for spectrum effects
+- **Pulse Patterns**: Triangle waves for rhythmic pulses
+
+
+
+### PaletteGradientAnimation
+
+Creates shifting gradient patterns with palette colors. Inherits from `Animation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `color_source` | instance | nil | - | Color provider for pattern mapping |
+| `shift_period` | int | 0 | min: 0 | Time for one complete shift cycle in ms (0 = static gradient) |
+| `spatial_period` | int | 0 | min: 0 | Spatial period in pixels (0 = full strip length) |
+| `phase_shift` | int | 0 | 0-255 | Phase shift in 0-255 range (mapped to spatial period) |
+| *(inherits all Animation parameters)* | | | | |
+
+**Implementation Details:**
+- Uses `bytes()` buffer for efficient storage of per-pixel values
+- Color source receives values in 0-255 range via `get_color_for_value(value, time_ms)`
+- Buffer automatically resizes when strip length changes
+- Optimized LUT (Lookup Table) support for color providers
+
+**Pattern Generation:**
+- Generates linear gradient values in 0-255 range across the specified spatial period
+- **shift_period**: Controls temporal movement - how long it takes for the gradient to shift one full spatial period
+ - `0`: Static gradient (no movement)
+ - `> 0`: Moving gradient with specified period in milliseconds
+- **spatial_period**: Controls spatial repetition - how many pixels before the gradient pattern repeats
+ - `0`: Gradient spans the full strip length (single gradient across entire strip)
+ - `> 0`: Gradient repeats every N pixels
+- **phase_shift**: Shifts the gradient pattern spatially by a percentage of the spatial period
+- Each pixel's value calculated using optimized fixed-point arithmetic
+
+**Factory**: `animation.palette_gradient_animation(engine)`
+
+### PaletteMeterAnimation
+
+Creates meter/bar patterns based on a value function. Inherits from `PaletteGradientAnimation`.
+
+| Parameter | Type | Default | Constraints | Description |
+|-----------|------|---------|-------------|-------------|
+| `value_func` | function | nil | - | Function that provides meter values (0-255 range) |
+| *(inherits all PaletteGradientAnimation parameters)* | | | | |
+
+**Pattern Generation:**
+- Value function signature: `value_func(engine, time_ms, self)` where:
+ - `engine`: AnimationEngine reference
+ - `time_ms`: Elapsed time since animation start
+ - `self`: Reference to the animation instance
+- Value function returns value in 0-255 range representing meter level
+- Pixels within meter range get value 255, others get value 0
+- Meter position calculated as: `position = tasmota.scale_uint(value, 0, 255, 0, strip_length)`
+
+**Factory**: `animation.palette_meter_animation(engine)`
+
+## Motion Effects
+
+Motion effects are transformation animations that apply movement, scaling, and distortion to existing animations. They accept any animation as a source and can be chained together for complex effects.
+
+### Combining Motion Effects
+
+Motion effects can be chained to create sophisticated transformations:
+
+```berry
+# Base animation
+animation base_pulse = pulsating_animation(color=blue, period=3s)
+
+# Simple animation composition
+animation fire_effect = fire_animation(
+ color=fire_colors,
+ intensity=180,
+ flicker_speed=8
+)
+
+animation gradient_wave = gradient_animation(
+ color=rainbow_cycle,
+ gradient_type=0,
+ movement_speed=50
+)
+
+# Result: Multiple independent animations
+run base_pulse
+run fire_effect
+run gradient_wave
+```
+
+### Performance Considerations
+
+- Each animation uses approximately 4 bytes per pixel for color storage
+- Fire animation includes additional flicker calculations
+- Gradient animation requires color interpolation calculations
+- Noise animation includes pseudo-random pattern generation
+- Consider strip length impact on transformation calculations
+
+## Parameter Constraints
+
+### Constraint Types
+
+| Constraint | Type | Description | Example |
+|------------|------|-------------|---------|
+| `default` | any | Default value used during initialization | `"default": 50` |
+| `min` | int | Minimum allowed value for integers | `"min": 0` |
+| `max` | int | Maximum allowed value for integers | `"max": 100` |
+| `enum` | list | List of valid values | `"enum": [1, 2, 3]` |
+| `type` | string | Expected value type | `"type": "string"` |
+| `nillable` | bool | Whether nil values are allowed | `"nillable": true` |
+
+### Supported Types
+
+| Type | Description |
+|------|-------------|
+| `"int"` | Integer values (default if not specified) |
+| `"string"` | String values |
+| `"bool"` | Boolean values (true/false) |
+| `"instance"` | Object instances |
+| `"any"` | Any type (no type validation) |
+
+### Factory Function Rules
+
+1. **Engine-Only Parameters**: All factory functions take ONLY the `engine` parameter
+2. **No Redundant Factories**: If a factory only calls the constructor, export the class directly
+3. **Preset Factories**: Factory functions should provide useful presets or complex configurations
+4. **Parameter Assignment**: Set parameters via virtual member assignment after creation
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_DEVELOPMENT.md b/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_DEVELOPMENT.md
new file mode 100644
index 000000000..fbae87a28
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_DEVELOPMENT.md
@@ -0,0 +1,695 @@
+# Animation Development Guide
+
+Guide for developers creating custom animation classes in the Berry Animation Framework.
+
+## Overview
+
+**Note**: This guide is for developers who want to extend the framework by creating new animation classes. For using existing animations, see the [DSL Reference](DSL_REFERENCE.md) which provides a declarative way to create animations without programming.
+
+The Berry Animation Framework uses a unified architecture where all visual elements inherit from the base `Animation` class. This guide explains how to create custom animation classes that integrate seamlessly with the framework's parameter system, value providers, and rendering pipeline.
+
+## Animation Class Structure
+
+### Basic Class Template
+
+```berry
+#@ solidify:MyAnimation,weak
+class MyAnimation : animation.animation
+ # NO instance variables for parameters - they are handled by the virtual parameter system
+
+ # Parameter definitions following the new specification
+ static var PARAMS = {
+ "my_param1": {"default": "default_value", "type": "string"},
+ "my_param2": {"min": 0, "max": 255, "default": 100, "type": "int"}
+ # Do NOT include inherited Animation parameters here
+ }
+
+ def init(engine)
+ # Engine parameter is MANDATORY and cannot be nil
+ super(self).init(engine)
+
+ # Only initialize non-parameter instance variables (none in this example)
+ # Parameters are handled by the virtual parameter system
+ end
+
+ # Handle parameter changes (optional)
+ def on_param_changed(name, value)
+ # Add custom logic for parameter changes if needed
+ # Parameter validation is handled automatically by the framework
+ end
+
+ # Update animation state (no return value needed)
+ def update(time_ms)
+ super(self).update(time_ms)
+ # Your update logic here
+ end
+
+ def render(frame, time_ms, strip_length)
+ if !self.is_running || frame == nil
+ return false
+ end
+
+ # Use virtual parameter access - automatically resolves ValueProviders
+ var param1 = self.my_param1
+ var param2 = self.my_param2
+
+ # Use strip_length parameter instead of self.engine.strip_length for performance
+ # Your rendering logic here
+ # ...
+
+ return true
+ end
+
+ # NO setter methods needed - use direct virtual parameter assignment:
+ # obj.my_param1 = value
+ # obj.my_param2 = value
+
+ def tostring()
+ return f"MyAnimation(param1={self.my_param1}, param2={self.my_param2}, running={self.is_running})"
+ end
+end
+```
+
+## PARAMS System
+
+### Static Parameter Definition
+
+The `PARAMS` static variable defines all parameters specific to your animation class. This system provides:
+
+- **Parameter validation** with min/max constraints and type checking
+- **Default value handling** for initialization
+- **Virtual parameter access** through getmember/setmember
+- **Automatic ValueProvider resolution**
+
+#### Parameter Definition Format
+
+```berry
+static var PARAMS = {
+ "parameter_name": {
+ "default": default_value, # Default value (optional)
+ "min": minimum_value, # Minimum value for integers (optional)
+ "max": maximum_value, # Maximum value for integers (optional)
+ "enum": [val1, val2, val3], # Valid enum values (optional)
+ "type": "parameter_type", # Expected type (optional)
+ "nillable": true # Whether nil values are allowed (optional)
+ }
+}
+```
+
+#### Supported Types
+
+- **`"int"`** - Integer values (default if not specified)
+- **`"string"`** - String values
+- **`"bool"`** - Boolean values (true/false)
+- **`"bytes"`** - Bytes objects (validated using isinstance())
+- **`"instance"`** - Object instances
+- **`"any"`** - Any type (no type validation)
+
+#### Important Rules
+
+- **Do NOT include inherited parameters** - Animation base class parameters are handled automatically
+- **Only define class-specific parameters** in your PARAMS
+- **No constructor parameter mapping** - the new system uses engine-only constructors
+- **Parameters are accessed via virtual members**: `obj.param_name`
+
+## Constructor Implementation
+
+### Engine-Only Constructor Pattern
+
+```berry
+def init(engine)
+ # 1. ALWAYS call super with engine (engine is the ONLY parameter)
+ super(self).init(engine)
+
+ # 2. Initialize non-parameter instance variables only
+ self.internal_state = initial_value
+ self.buffer = nil
+ # Do NOT initialize parameters here - they are handled by the virtual system
+end
+```
+
+### Parameter Change Handling
+
+```berry
+def on_param_changed(name, value)
+ # Optional method to handle parameter changes
+ if name == "scale"
+ # Recalculate internal state when scale changes
+ self._update_internal_buffers()
+ elif name == "color"
+ # Handle color changes
+ self._invalidate_color_cache()
+ end
+end
+```
+
+### Key Changes from Old System
+
+- **Engine-only constructor**: Constructor takes ONLY the engine parameter
+- **No parameter initialization**: Parameters are set by caller using virtual member assignment
+- **No instance variables for parameters**: Parameters are handled by the virtual system
+- **Automatic validation**: Parameter validation happens automatically based on PARAMS constraints
+
+## Value Provider Integration
+
+### Automatic ValueProvider Resolution
+
+The virtual parameter system automatically resolves ValueProviders when you access parameters:
+
+```berry
+def render(frame, time_ms, strip_length)
+ # Virtual parameter access automatically resolves ValueProviders
+ var color = self.color # Returns current color value, not the provider
+ var position = self.pos # Returns current position value
+ var size = self.size # Returns current size value
+
+ # Use strip_length parameter (computed once by engine_proxy) instead of self.engine.strip_length
+ # Use resolved values in rendering logic
+ for i: position..(position + size - 1)
+ if i >= 0 && i < strip_length
+ frame.set_pixel_color(i, color)
+ end
+ end
+
+ return true
+end
+```
+
+### Setting Dynamic Parameters
+
+Users can set both static values and ValueProviders using the same syntax:
+
+```berry
+# Create animation
+var anim = animation.my_animation(engine)
+
+# Static values
+anim.color = 0xFFFF0000
+anim.pos = 5
+anim.size = 3
+
+# Dynamic values
+anim.color = animation.smooth(0xFF000000, 0xFFFFFFFF, 2000)
+anim.pos = animation.triangle(0, 29, 3000)
+```
+
+### Performance Optimization
+
+For performance-critical code, cache parameter values:
+
+```berry
+def render(frame, time_ms, strip_length)
+ # Cache parameter values to avoid multiple virtual member access
+ var current_color = self.color
+ var current_pos = self.pos
+ var current_size = self.size
+
+ # Use cached values in loops
+ for i: current_pos..(current_pos + current_size - 1)
+ if i >= 0 && i < strip_length
+ frame.set_pixel_color(i, current_color)
+ end
+ end
+
+ return true
+end
+```
+
+### Color Provider LUT Optimization
+
+For color providers that perform expensive color calculations (like palette interpolation), the base `ColorProvider` class provides a Lookup Table (LUT) mechanism for caching pre-computed colors:
+
+```berry
+#@ solidify:MyColorProvider,weak
+class MyColorProvider : animation.color_provider
+ # Instance variables (all should start with underscore)
+ var _cached_data # Your custom cached data
+
+ def init(engine)
+ super(self).init(engine) # Initializes _color_lut and _lut_dirty
+ self._cached_data = nil
+ end
+
+ # Mark LUT as dirty when parameters change
+ def on_param_changed(name, value)
+ super(self).on_param_changed(name, value)
+ if name == "palette" || name == "transition_type"
+ self._lut_dirty = true # Inherited from ColorProvider
+ end
+ end
+
+ # Rebuild LUT when needed
+ def _rebuild_color_lut()
+ # Allocate LUT (e.g., 129 entries * 4 bytes = 516 bytes)
+ if self._color_lut == nil
+ self._color_lut = bytes()
+ self._color_lut.resize(129 * 4)
+ end
+
+ # Pre-compute colors for values 0, 2, 4, ..., 254, 255
+ var i = 0
+ while i < 128
+ var value = i * 2
+ var color = self._compute_color_expensive(value)
+ self._color_lut.set(i * 4, color, 4)
+ i += 1
+ end
+
+ # Add final entry for value 255
+ var color_255 = self._compute_color_expensive(255)
+ self._color_lut.set(128 * 4, color_255, 4)
+
+ self._lut_dirty = false
+ end
+
+ # Update method checks if LUT needs rebuilding
+ def update(time_ms)
+ if self._lut_dirty || self._color_lut == nil
+ self._rebuild_color_lut()
+ end
+ return self.is_running
+ end
+
+ # Fast color lookup using LUT
+ def get_color_for_value(value, time_ms)
+ # Build LUT if needed (lazy initialization)
+ if self._lut_dirty || self._color_lut == nil
+ self._rebuild_color_lut()
+ end
+
+ # Map value to LUT index (divide by 2, special case for 255)
+ var lut_index = value >> 1
+ if value >= 255
+ lut_index = 128
+ end
+
+ # Retrieve pre-computed color from LUT
+ var color = self._color_lut.get(lut_index * 4, 4)
+
+ # Apply brightness scaling using static method (only if not 255)
+ var brightness = self.brightness
+ if brightness != 255
+ return animation.color_provider.apply_brightness(color, brightness)
+ end
+
+ return color
+ end
+
+ # Access LUT from outside (returns bytes() or nil)
+ # Inherited from ColorProvider: get_lut()
+end
+```
+
+**LUT Benefits:**
+- **5-10x speedup** for expensive color calculations
+- **Reduced CPU usage** during rendering
+- **Smooth animations** even with complex color logic
+- **Memory efficient** (typically 516 bytes for 129 entries)
+
+**When to use LUT:**
+- Palette interpolation with binary search
+- Complex color transformations
+- Brightness calculations
+- Any expensive per-pixel color computation
+
+**LUT Guidelines:**
+- Store colors at maximum brightness, apply scaling after lookup
+- Use 2-step resolution (0, 2, 4, ..., 254, 255) to save memory
+- Invalidate LUT when parameters affecting color calculation change
+- Don't invalidate for brightness changes if brightness is applied post-lookup
+
+**Brightness Handling:**
+
+The `ColorProvider` base class includes a `brightness` parameter (0-255, default 255) and a static method for applying brightness scaling:
+
+```berry
+# Static method for brightness scaling (only scales if brightness != 255)
+animation.color_provider.apply_brightness(color, brightness)
+```
+
+**Best Practices:**
+- Store LUT colors at maximum brightness (255)
+- Apply brightness scaling after LUT lookup using the static method
+- Only call the static method if `brightness != 255` to avoid unnecessary overhead
+- For inline performance-critical code, you can inline the brightness calculation instead of calling the static method
+- Brightness changes do NOT invalidate the LUT since brightness is applied after lookup
+
+## Parameter Access
+
+### Direct Virtual Member Assignment
+
+The new system uses direct parameter assignment instead of setter methods:
+
+```berry
+# Create animation
+var anim = animation.my_animation(engine)
+
+# Direct parameter assignment (recommended)
+anim.color = 0xFF00FF00
+anim.pos = 10
+anim.size = 5
+
+# Method chaining is not needed - just set parameters directly
+```
+
+### Parameter Validation
+
+The parameter system handles validation automatically based on PARAMS constraints:
+
+```berry
+# This will raise an exception due to min: 0 constraint
+anim.size = -1 # Raises value_error
+
+# This will be accepted
+anim.size = 5 # Parameter updated successfully
+
+# Method-based setting returns true/false for validation
+var success = anim.set_param("size", -1) # Returns false, no exception
+```
+
+### Accessing Raw Parameters
+
+```berry
+# Get current parameter value (resolved if ValueProvider)
+var current_color = anim.color
+
+# Get raw parameter (returns ValueProvider if set)
+var raw_color = anim.get_param("color")
+
+# Check if parameter is a ValueProvider
+if animation.is_value_provider(raw_color)
+ print("Color is dynamic")
+else
+ print("Color is static")
+end
+```
+
+## Rendering Implementation
+
+### Frame Buffer Operations
+
+```berry
+def render(frame, time_ms, strip_length)
+ if !self.is_running || frame == nil
+ return false
+ end
+
+ # Resolve dynamic parameters
+ var color = self.resolve_value(self.color, "color", time_ms)
+ var opacity = self.resolve_value(self.opacity, "opacity", time_ms)
+
+ # Render your effect using strip_length parameter
+ for i: 0..(strip_length-1)
+ var pixel_color = calculate_pixel_color(i, time_ms)
+ frame.set_pixel_color(i, pixel_color)
+ end
+
+ # Apply opacity if not full (supports numbers, animations)
+ if opacity < 255
+ frame.apply_opacity(opacity)
+ end
+
+ return true # Frame was modified
+end
+```
+
+### Common Rendering Patterns
+
+#### Fill Pattern
+```berry
+# Fill entire frame with color
+frame.fill_pixels(color)
+```
+
+#### Position-Based Effects
+```berry
+# Render at specific positions
+var start_pos = self.resolve_value(self.pos, "pos", time_ms)
+var size = self.resolve_value(self.size, "size", time_ms)
+
+for i: 0..(size-1)
+ var pixel_pos = start_pos + i
+ if pixel_pos >= 0 && pixel_pos < frame.width
+ frame.set_pixel_color(pixel_pos, color)
+ end
+end
+```
+
+#### Gradient Effects
+```berry
+# Create gradient across frame
+for i: 0..(frame.width-1)
+ var progress = i / (frame.width - 1.0) # 0.0 to 1.0
+ var interpolated_color = interpolate_color(start_color, end_color, progress)
+ frame.set_pixel_color(i, interpolated_color)
+end
+```
+
+## Complete Example: BeaconAnimation
+
+Here's a complete example showing all concepts:
+
+```berry
+#@ solidify:BeaconAnimation,weak
+class BeaconAnimation : animation.animation
+ # NO instance variables for parameters - they are handled by the virtual parameter system
+
+ # Parameter definitions following the new specification
+ static var PARAMS = {
+ "color": {"default": 0xFFFFFFFF},
+ "back_color": {"default": 0xFF000000},
+ "pos": {"default": 0},
+ "beacon_size": {"min": 0, "default": 1},
+ "slew_size": {"min": 0, "default": 0}
+ }
+
+ # Initialize a new Pulse Position animation
+ # Engine parameter is MANDATORY and cannot be nil
+ def init(engine)
+ # Call parent constructor with engine (engine is the ONLY parameter)
+ super(self).init(engine)
+
+ # Only initialize non-parameter instance variables (none in this case)
+ # Parameters are handled by the virtual parameter system
+ end
+
+ # Handle parameter changes (optional - can be removed if no special handling needed)
+ def on_param_changed(name, value)
+ # No special handling needed for this animation
+ # Parameter validation is handled automatically by the framework
+ end
+
+ # Render the pulse to the provided frame buffer
+ def render(frame, time_ms, strip_length)
+ if frame == nil
+ return false
+ end
+
+ var pixel_size = strip_length
+ # Use virtual parameter access - automatically resolves ValueProviders
+ var back_color = self.back_color
+ var pos = self.pos
+ var slew_size = self.slew_size
+ var beacon_size = self.beacon_size
+ var color = self.color
+
+ # Fill background if not transparent
+ if back_color != 0xFF000000
+ frame.fill_pixels(back_color)
+ end
+
+ # Calculate pulse boundaries
+ var pulse_min = pos
+ var pulse_max = pos + beacon_size
+
+ # Clamp to frame boundaries
+ if pulse_min < 0
+ pulse_min = 0
+ end
+ if pulse_max >= pixel_size
+ pulse_max = pixel_size
+ end
+
+ # Draw the main pulse
+ var i = pulse_min
+ while i < pulse_max
+ frame.set_pixel_color(i, color)
+ i += 1
+ end
+
+ # Draw slew regions if slew_size > 0
+ if slew_size > 0
+ # Left slew (fade from background to pulse color)
+ var left_slew_min = pos - slew_size
+ var left_slew_max = pos
+
+ if left_slew_min < 0
+ left_slew_min = 0
+ end
+ if left_slew_max >= pixel_size
+ left_slew_max = pixel_size
+ end
+
+ i = left_slew_min
+ while i < left_slew_max
+ # Calculate blend factor
+ var blend_factor = tasmota.scale_uint(i, pos - slew_size, pos - 1, 255, 0)
+ var alpha = 255 - blend_factor
+ var blend_color = (alpha << 24) | (color & 0x00FFFFFF)
+ var blended_color = frame.blend(back_color, blend_color)
+ frame.set_pixel_color(i, blended_color)
+ i += 1
+ end
+
+ # Right slew (fade from pulse color to background)
+ var right_slew_min = pos + beacon_size
+ var right_slew_max = pos + beacon_size + slew_size
+
+ if right_slew_min < 0
+ right_slew_min = 0
+ end
+ if right_slew_max >= pixel_size
+ right_slew_max = pixel_size
+ end
+
+ i = right_slew_min
+ while i < right_slew_max
+ # Calculate blend factor
+ var blend_factor = tasmota.scale_uint(i, pos + beacon_size, pos + beacon_size + slew_size - 1, 0, 255)
+ var alpha = 255 - blend_factor
+ var blend_color = (alpha << 24) | (color & 0x00FFFFFF)
+ var blended_color = frame.blend(back_color, blend_color)
+ frame.set_pixel_color(i, blended_color)
+ i += 1
+ end
+ end
+
+ return true
+ end
+
+ # NO setter methods - use direct virtual parameter assignment instead:
+ # obj.color = value
+ # obj.pos = value
+ # obj.beacon_size = value
+ # obj.slew_size = value
+
+ # String representation of the animation
+ def tostring()
+ return f"BeaconAnimation(color=0x{self.color :08x}, pos={self.pos}, beacon_size={self.beacon_size}, slew_size={self.slew_size})"
+ end
+end
+
+# Export class directly - no redundant factory function needed
+return {'beacon_animation': BeaconAnimation}
+```
+
+## Testing Your Animation
+
+### Unit Tests
+
+Create comprehensive tests for your animation:
+
+```berry
+import animation
+
+def test_my_animation()
+ # Create LED strip and engine for testing
+ var strip = global.Leds(10) # Use built-in LED strip for testing
+ var engine = animation.create_engine(strip)
+
+ # Test basic construction
+ var anim = animation.my_animation(engine)
+ assert(anim != nil, "Animation should be created")
+
+ # Test parameter setting
+ anim.color = 0xFFFF0000
+ assert(anim.color == 0xFFFF0000, "Color should be set")
+
+ # Test parameter updates
+ anim.color = 0xFF00FF00
+ assert(anim.color == 0xFF00FF00, "Color should be updated")
+
+ # Test value providers
+ var dynamic_color = animation.smooth(engine)
+ dynamic_color.min_value = 0xFF000000
+ dynamic_color.max_value = 0xFFFFFFFF
+ dynamic_color.duration = 2000
+
+ anim.color = dynamic_color
+ var raw_color = anim.get_param("color")
+ assert(animation.is_value_provider(raw_color), "Should accept value provider")
+
+ # Test rendering
+ var frame = animation.frame_buffer(10)
+ anim.start()
+ var result = anim.render(frame, 1000, engine.strip_length)
+ assert(result == true, "Should render successfully")
+
+ print("✓ All tests passed")
+end
+
+test_my_animation()
+```
+
+### Integration Testing
+
+Test with the animation engine:
+
+```berry
+var strip = global.Leds(30) # Use built-in LED strip
+var engine = animation.create_engine(strip)
+var anim = animation.my_animation(engine)
+
+# Set parameters
+anim.color = 0xFFFF0000
+anim.pos = 5
+anim.beacon_size = 3
+
+engine.add(anim) # Unified method for animations and sequence managers
+engine.run()
+
+# Let it run for a few seconds
+tasmota.delay(3000)
+
+engine.stop()
+print("Integration test completed")
+```
+
+## Best Practices
+
+### Performance
+- **Minimize calculations** in render() method
+- **Cache resolved values** when possible
+- **Use integer math** instead of floating point
+- **Avoid memory allocation** in render loops
+
+### Memory Management
+- **Reuse objects** when possible
+- **Clear references** to large objects when done
+- **Use static variables** for constants
+
+### Code Organization
+- **Group related parameters** together
+- **Use descriptive variable names**
+- **Comment complex algorithms**
+- **Follow Berry naming conventions**
+
+### Error Handling
+- **Validate parameters** in constructor
+- **Handle edge cases** gracefully
+- **Return false** from render() on errors
+- **Use meaningful error messages**
+
+## Publishing Your Animation Class
+
+Once you've created a new animation class:
+
+1. **Add it to the animation module** by importing it in `animation.be`
+2. **Create a factory function** following the engine-first pattern
+3. **Add DSL support** by ensuring the transpiler recognizes your factory function
+4. **Document parameters** in the class hierarchy documentation
+5. **Test with DSL** to ensure users can access your animation declaratively
+
+**Remember**: Users should primarily interact with animations through the DSL. The programmatic API is mainly for framework development and advanced integrations.
+
+This guide provides everything needed to create professional-quality animation classes that integrate seamlessly with the Berry Animation Framework's parameter system and rendering pipeline.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/DSL_REFERENCE.md b/lib/libesp32/berry_animation/berry_animation_docs/DSL_REFERENCE.md
new file mode 100644
index 000000000..ab430e906
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/DSL_REFERENCE.md
@@ -0,0 +1,1695 @@
+# DSL Reference - Animation DSL Language Specification
+
+This document provides a comprehensive reference for the Animation DSL syntax, keywords, and grammar. It focuses purely on the language specification without implementation details.
+
+For detailed information about the DSL transpiler's internal architecture and processing flow, see [TRANSPILER_ARCHITECTURE.md](TRANSPILER_ARCHITECTURE.md).
+
+## Language Overview
+
+The Animation DSL is a declarative language for defining LED strip animations. It uses natural, readable syntax with named parameters and supports colors, animations, sequences, and property assignments.
+
+## Comments
+
+Comments use the `#` character and extend to the end of the line:
+
+```berry
+# This is a full-line comment
+# strip length 30 # This is an inline comment (TEMPORARILY DISABLED)
+color bordeaux = 0x6F2C4F # This is an inline comment
+```
+
+Comments are preserved in the generated code and can appear anywhere in the DSL.
+
+## Program Structure
+
+A DSL program consists of statements that can appear in any order:
+
+```berry
+# Strip configuration is handled automatically
+# strip length 60 # TEMPORARILY DISABLED
+
+# Color definitions
+color bordeaux = 0x6F2C4F
+color majorelle = 0x6050DC
+
+# Animation definitions
+animation pulse_bordeaux = pulsating_animation(color=bordeaux, period=2s)
+
+# Property assignments
+pulse_red.priority = 10
+
+# Sequences
+sequence demo {
+ play pulse_bordeaux for 5s
+ wait 1s
+}
+
+# Execution
+run demo
+```
+
+## Keywords
+
+### Reserved Keywords
+
+The following keywords are reserved and cannot be used as identifiers:
+
+**Configuration Keywords:**
+- `strip` - Strip configuration (temporarily disabled, reserved keyword)
+- `set` - Variable assignment
+- `import` - Import Berry modules
+- `berry` - Embed arbitrary Berry code
+- `extern` - Declare external Berry functions for DSL use
+
+**Definition Keywords:**
+- `color` - Color definition
+- `palette` - Palette definition
+- `animation` - Animation definition
+- `sequence` - Sequence definition
+- `template` - Template definition
+- `param` - Template parameter declaration
+- `type` - Parameter type annotation
+
+**Control Flow Keywords:**
+- `play` - Play animation in sequence
+- `wait` - Wait/pause in sequence
+- `repeat` - Repeat loop
+- `times` - Loop count specifier
+- `for` - Duration specifier
+- `run` - Execute animation or sequence
+- `restart` - Restart value provider or animation from beginning
+
+**Easing Keywords:**
+- `linear` - Linear/triangle wave easing
+- `triangle` - Triangle wave easing (alias for linear)
+- `smooth` - Smooth cosine easing
+- `sine` - Pure sine wave easing
+- `ease_in` - Ease in transition (quadratic acceleration)
+- `ease_out` - Ease out transition (quadratic deceleration)
+- `ramp` - Ramp/sawtooth easing
+- `sawtooth` - Sawtooth easing (alias for ramp)
+- `square` - Square wave easing
+- `elastic` - Elastic easing with spring-like overshoot
+- `bounce` - Bounce easing like a ball with decreasing amplitude
+
+**Value Keywords:**
+- `true` - Boolean true
+- `false` - Boolean false
+- `nil` - Null value
+- `transparent` - Transparent color
+
+### Predefined Colors
+
+The following color names are predefined and cannot be redefined:
+
+**Primary Colors:**
+- `red`, `green`, `blue`
+- `white`, `black`
+
+**Extended Colors:**
+- `yellow`, `orange`, `purple`, `pink`
+- `cyan`, `magenta`, `gray`, `grey`
+- `silver`, `gold`, `brown`
+- `lime`, `navy`, `olive`
+- `maroon`, `teal`, `aqua`
+- `fuchsia`, `indigo`, `violet`
+- `crimson`, `coral`, `salmon`
+- `khaki`, `plum`, `orchid`
+- `turquoise`, `tan`, `beige`
+- `ivory`, `snow`
+- `transparent`
+
+## Data Types
+
+### Numbers
+
+```berry
+42 # Integer
+3.14 # Floating point
+-5 # Negative number
+```
+
+### Time Values
+
+Time values require a unit suffix and are automatically converted to milliseconds:
+
+```berry
+500ms # Milliseconds (stays 500)
+2s # Seconds (converted to 2000ms)
+1m # Minutes (converted to 60000ms)
+1h # Hours (converted to 3600000ms)
+```
+
+### Percentages
+
+Percentages use the `%` suffix and are automatically converted to 0-255 range with possible over-shooting:
+
+```berry
+0% # 0 percent (converted to 0)
+50% # 50 percent (converted to 128)
+100% # 100 percent (converted to 255)
+120% # 120 percent (converted to 306)
+```
+
+### Colors
+
+#### Hexadecimal Colors
+
+```berry
+0xFF0000 # Red (RGB format)
+0x80FF0000 # Semi-transparent red (ARGB format)
+```
+
+#### Named Colors
+
+```berry
+red # Predefined color name
+blue # Predefined color name
+transparent # Transparent color
+```
+
+### Strings
+
+```berry
+"hello" # Double-quoted string
+'world' # Single-quoted string
+```
+
+### Identifiers
+
+Identifiers must start with a letter or underscore, followed by letters, digits, or underscores:
+
+```berry
+my_color # Valid identifier
+_private_var # Valid identifier
+Color123 # Valid identifier
+```
+
+## Configuration Statements
+
+### Strip Configuration
+
+**Note: The `strip` directive is temporarily disabled.** Strip configuration is handled automatically by the host system.
+
+~~The `strip` statement configures the LED strip and must be the first statement if present:~~
+
+```berry
+# strip length 60 # TEMPORARILY DISABLED
+```
+
+~~If omitted,~~ The system uses the configured strip length from the host system.
+
+### Variable Assignment
+
+The `set` keyword assigns static values or value providers to global variables:
+
+```berry
+set brightness = 200 # Static integer value
+set cycle_time = 5s # Static time value (converted to 5000ms)
+set opacity_level = 80% # Static percentage (converted to 204)
+
+# Value providers for dynamic values
+set brightness_osc = smooth(min_value=50, max_value=255, period=3s)
+set position_sweep = triangle(min_value=0, max_value=29, period=5s)
+
+# Computed values using strip length
+set strip_len = strip_length() # Get current strip length
+```
+
+### Import Statements
+
+The `import` keyword imports Berry modules for use in animations:
+
+```berry
+import user_functions # Import user-defined functions
+import my_custom_module # Import custom animation libraries
+import math # Import standard Berry modules
+import string # Import utility modules
+```
+
+**Import Behavior:**
+- Module names should be valid identifiers (no quotes needed in DSL)
+- Import statements are typically placed at the beginning of DSL files
+- Transpiles to standard Berry `import "module_name"` statements
+- Imported modules become available for the entire animation
+
+**Common Use Cases:**
+```berry
+# Import user functions for computed parameters
+import user_functions
+
+animation dynamic = solid(color=blue)
+dynamic.opacity = my_custom_function()
+
+# Import custom animation libraries
+import fire_effects
+
+animation campfire = fire_effects.create_fire(intensity=200)
+```
+
+**Transpilation Example:**
+```berry
+# DSL Code
+import user_functions
+
+# Transpiles to Berry Code
+import "user_functions"
+```
+
+### Berry Code Blocks
+
+The `berry` keyword allows embedding arbitrary Berry code within DSL files using triple-quoted strings:
+
+```berry
+berry """
+import math
+var custom_value = math.pi * 2
+print("Custom calculation:", custom_value)
+"""
+
+berry '''
+# Alternative syntax with single quotes
+def helper_function(x)
+ return x * 1.5
+end
+'''
+```
+
+**Berry Code Block Features:**
+- Code is copied verbatim to the generated Berry code
+- Supports both `"""` and `'''` triple-quote syntax
+- Can span multiple lines and include complex Berry syntax
+- Variables and functions defined in one block are available in subsequent blocks
+- Can interact with DSL-generated objects (e.g., `animation_name_.property = value`)
+
+**Example with DSL Integration:**
+```berry
+animation pulse = pulsating_animation(color=red, period=2s)
+
+berry """
+# Modify animation using Berry code
+pulse_.opacity = 200
+pulse_.priority = 10
+print("Animation configured")
+"""
+
+run pulse
+```
+
+### External Function Declarations
+
+The `extern` keyword declares Berry functions defined in `berry` code blocks so they can be used in DSL expressions and computed parameters:
+
+```berry
+# Define the function in a berry block
+berry """
+def rand_meter(time_ms, self)
+ import math
+ var r = math.rand() % 101
+ return r
+end
+
+def breathing_effect(base_value, amplitude)
+ import math
+ var time_factor = (tasmota.millis() / 1000) % 4 # 4-second cycle
+ var breath = math.sin(time_factor * math.pi / 2)
+ return int(base_value + breath * amplitude)
+end
+"""
+
+# Declare functions as external so DSL knows about them
+extern function rand_meter
+extern function breathing_effect
+
+# Now they can be used in DSL expressions
+animation back_pattern = palette_meter_animation(value_func = rand_meter)
+animation breathing_light = solid(color=blue)
+breathing_light.opacity = breathing_effect
+
+run back_pattern
+```
+
+**External Function Features:**
+- Functions must be declared with `extern function function_name` after being defined in `berry` blocks
+- Can be used with or without parentheses: `rand_meter` or `rand_meter()`
+- Automatically receive `engine` as the first parameter when called from DSL
+- Can be used in computed parameters and property assignments
+- Support the same signature pattern as registered user functions
+
+**Function Signature Requirements:**
+External functions should follow the user function pattern where the first parameter is the engine:
+
+```berry
+berry """
+def my_external_func(engine, param1, param2)
+ # engine is automatically provided by DSL
+ # param1, param2 are user-provided parameters
+ return computed_value
+end
+"""
+
+extern function my_external_func
+
+# Usage in DSL (engine parameter is automatic)
+animation test = solid(color=red)
+test.opacity = my_external_func # Called as my_external_func(engine)
+```
+
+**Comparison with User Functions:**
+- **External functions**: Defined in `berry` blocks within the same DSL file, declared with `extern function`
+- **User functions**: Defined in separate Berry modules, imported with `import`, registered with `animation.register_user_function()`
+- Both use the same calling convention and can be used interchangeably in DSL expressions
+
+## Color Definitions
+
+The `color` keyword defines static colors or color providers:
+
+```berry
+# Static colors
+color bordeaux = 0x6F2C4F # Static hex color
+color majorelle = 0x6050DC # Static hex color
+color semi_red = 0x80FF0000 # Static color with alpha channel
+color my_white = white # Reference to predefined color
+
+# Color providers for dynamic colors
+color rainbow_cycle = color_cycle(
+ palette=bytes("FFFF0000" "FF00FF00" "FF0000FF")
+ cycle_period=5s
+)
+color breathing_red = breathe_color(
+ base_color=red
+ min_brightness=5%
+ max_brightness=100%
+ duration=3s
+ curve_factor=2
+)
+color pulsing_blue = pulsating_color(
+ base_color=blue
+ min_brightness=20%
+ max_brightness=80%
+ duration=1s
+)
+```
+
+## Palette Definitions
+
+Palettes define color gradients using position-color pairs and support two encoding formats with flexible syntax:
+
+### Value-Based Palettes (Recommended)
+
+Standard palettes use value positions from 0-255:
+
+```berry
+# Traditional syntax with commas
+palette fire_colors = [
+ (0, 0x000000) # Position 0: Black
+ (128, 0xFF0000) # Position 128: Red
+ (255, 0xFFFF00) # Position 255: Yellow
+]
+
+# New syntax without commas (when entries are on separate lines)
+palette ocean_palette = [
+ (0, navy) # Using named colors
+ (128, cyan)
+ (255, green)
+]
+
+# Mixed syntax also works
+palette matrix_greens = [
+ (0, 0x000000), (64, 0x003300) # Multiple entries on one line
+ (128, 0x006600) # Single entry on separate line
+ (192, 0x00AA00)
+ (255, 0x00FF00)
+]
+```
+
+### Tick-Based Palettes (Advanced)
+
+Palettes can also use tick counts for timing-based transitions:
+
+```berry
+palette timed_colors = [
+ (10, 0xFF0000) # Red for 10 ticks
+ (20, 0x00FF00) # Green for 20 ticks
+ (15, 0x0000FF) # Blue for 15 ticks
+]
+```
+
+**Palette Rules:**
+- **Value-based**: Positions range from 0 to 255, represent intensity/brightness levels
+- **Tick-based**: Positions represent duration in arbitrary time units
+- **Colors**: Only hex values (0xRRGGBB) or predefined color names (red, blue, green, etc.)
+- **Custom colors**: Previously defined custom colors are NOT allowed in palettes
+- **Dynamic palettes**: For palettes with custom colors, use user functions instead
+- Entries are automatically sorted by position
+- Comments are preserved
+- Automatically converted to efficient VRGB bytes format
+
+### Palette Color Restrictions
+
+Palettes have strict color validation to ensure compile-time safety:
+
+**✅ Allowed:**
+```berry
+palette valid_colors = [
+ (0, 0xFF0000) # Hex colors
+ (128, red) # Predefined color names
+ (255, blue) # More predefined colors
+]
+```
+
+**❌ Not Allowed:**
+```berry
+color custom_red = 0xFF0000
+palette invalid_colors = [
+ (0, custom_red) # ERROR: Custom colors not allowed
+ (128, my_color) # ERROR: Undefined color
+]
+```
+
+**Alternative for Dynamic Palettes:**
+For palettes that need custom or computed colors, use user functions:
+
+```berry
+# Define a user function that creates dynamic palettes
+def create_custom_palette(engine, base_color, intensity)
+ # Create palette with custom logic
+ var palette_data = create_dynamic_palette_bytes(base_color, intensity)
+ return palette_data
+end
+
+# Register for DSL use
+animation.register_user_function("custom_palette", create_custom_palette)
+```
+
+```berry
+# Use in DSL
+animation dynamic_anim = rich_palette(
+ palette=custom_palette(0xFF0000, 200)
+ cycle_period=3s
+)
+```
+
+## Animation Definitions
+
+The `animation` keyword defines instances of animation classes (subclasses of Animation):
+
+```berry
+animation red_solid = solid(color=red)
+
+animation pulse_effect = pulsating_animation(
+ color=blue
+ period=2s
+)
+
+animation comet_trail = comet_animation(
+ color=white
+ tail_length=10
+ speed=1500
+ direction=1
+)
+```
+
+**Parameter Syntax:**
+- All parameters use `name=value` format
+- Parameters can reference colors, other animations, or literal values
+- Nested function calls are supported
+
+## Property Assignments
+
+Animation properties can be modified after creation:
+
+```berry
+animation pulse_red = pulsating_animation(color=red, period=2s)
+
+# Set properties
+pulse_red.priority = 10
+pulse_red.opacity = 200
+pulse_red.position = 15
+
+# Dynamic properties using value providers
+pulse_red.position = triangle(min_value=0, max_value=29, period=5s)
+pulse_red.opacity = smooth(min_value=100, max_value=255, period=2s)
+
+# Computed properties using arithmetic expressions
+set strip_len = strip_length()
+pulse_red.position = strip_len / 2 # Center position
+pulse_red.opacity = strip_len * 4 # Scale with strip size
+
+# Animation opacity (using another animation as opacity mask)
+animation opacity_mask = pulsating_animation(period=2s)
+pulse_red.opacity = opacity_mask # Dynamic opacity from animation
+```
+
+**Common Properties:**
+- `priority` - Animation priority (higher numbers have precedence)
+- `opacity` - Opacity level (number, value provider, or animation)
+- `position` - Position on strip
+- `speed` - Speed multiplier
+- `phase` - Phase offset
+
+## Computed Values
+
+The DSL supports computed values using arithmetic expressions with value providers and mathematical functions:
+
+### Safe Patterns
+
+```berry
+# ✅ RECOMMENDED: Single value provider assignment
+set strip_len = strip_length()
+
+# ✅ RECOMMENDED: Computation with existing values
+set strip_len2 = (strip_len + 1) / 2
+
+# Use computed values in animation parameters
+animation stream1 = comet_animation(
+ color=red
+ tail_length=strip_len / 4 # Computed: quarter of strip length
+ speed=1.5
+ priority=10
+)
+```
+
+### ⚠️ Dangerous Patterns (Prevented by Transpiler)
+
+The transpiler prevents dangerous patterns that would create new value provider instances at each evaluation:
+
+```berry
+# ❌ DANGEROUS: Function creation in computed expression
+# This would create a new strip_length() instance at each evaluation
+set strip_len3 = (strip_length() + 1) / 2
+
+# ❌ ERROR: Transpiler will reject this with:
+# "Function 'strip_length()' cannot be used in computed expressions.
+# This creates a new instance at each evaluation."
+```
+
+**Why This Is Dangerous:**
+- Creates a new function instance every time the expression is evaluated
+- Causes memory leaks and performance degradation
+- Each new instance has its own timing and state, leading to inconsistent behavior
+
+**Safe Alternative:**
+```berry
+# ✅ CORRECT: Separate the value provider creation from computation
+set strip_len = strip_length() # Single value provider
+set strip_len3 = (strip_len + 1) / 2 # Computation with existing value
+```
+
+**Functions That Are Restricted in Computed Expressions:**
+- Any function that creates instances (value providers, animations, etc.) when called
+- Examples: `strip_length()`, `triangle()`, `smooth()`, `solid()`, etc.
+
+**Note:** These functions are allowed in `set` statements as they create the instance once, but they cannot be used inside arithmetic expressions that get wrapped in closures, as this would create new instances at each evaluation.
+
+### Advanced Computed Values
+
+```berry
+# Complex expressions with multiple operations
+set base_speed = 2.0
+animation stream2 = comet_animation(
+ color=blue
+ tail_length=strip_len / 8 + 2 # Computed: eighth of strip + 2
+ speed=base_speed * 1.5 # Computed: base speed × 1.5
+)
+
+# Computed values in property assignments
+stream1.position = strip_len / 2 # Center of strip
+stream2.opacity = strip_len * 4 # Scale opacity with strip size
+
+# Using mathematical functions in computed values
+animation pulse = pulsating_animation(
+ color=red
+ period=2s
+)
+pulse.opacity = abs(sine(strip_len) * 128 + 127) # Sine wave opacity
+pulse.position = max(0, min(strip_len - 1, round(strip_len / 2))) # Clamped center position
+```
+
+**Supported Operations:**
+- Addition: `+`
+- Subtraction: `-`
+- Multiplication: `*`
+- Division: `/`
+- Parentheses for grouping: `(expression)`
+
+**Mathematical Functions:**
+The following mathematical functions are available in computed parameters and are automatically detected by the transpiler:
+
+| Function | Description | Parameters | Return Value |
+|----------|-------------|------------|--------------|
+| `min(a, b, ...)` | Returns the minimum value | Two or more numbers | Minimum value |
+| `max(a, b, ...)` | Returns the maximum value | Two or more numbers | Maximum value |
+| `abs(x)` | Returns the absolute value | One number | Absolute value |
+| `round(x)` | Rounds to nearest integer | One number | Rounded integer |
+| `sqrt(x)` | Returns the square root | One number | Square root (scaled for integers) |
+| `scale(v, from_min, from_max, to_min, to_max)` | Scales value from one range to another | Value and range parameters | Scaled integer |
+| `sin(angle)` | Returns sine of angle | Angle in 0-255 range (0-360°) | Sine value in -255 to 255 range |
+| `cos(angle)` | Returns cosine of angle | Angle in 0-255 range (0-360°) | Cosine value in -255 to 255 range |
+
+**Mathematical Function Examples:**
+```berry
+# Basic math functions
+set strip_len = strip_length()
+animation test = pulsating_animation(color=red, period=2s)
+
+# Absolute value for ensuring positive results
+test.opacity = abs(strip_len - 200)
+
+# Min/max for clamping values
+test.position = max(0, min(strip_len - 1, 15)) # Clamp position to valid range
+
+# Rounding for integer positions
+test.position = round(strip_len / 2.5)
+
+# Square root for non-linear scaling
+test.brightness = sqrt(strip_len * 4) # Non-linear brightness based on strip size
+
+# Scaling values between ranges
+test.opacity = scale(strip_len, 10, 60, 50, 255) # Scale strip length to opacity range
+
+# Trigonometric functions for wave patterns
+set angle = 128 # 180 degrees in 0-255 range
+test.opacity = sin(angle) + 128 # Mathematical sine function (not oscillator)
+test.brightness = cos(angle) + 128 # Mathematical cosine function (not oscillator)
+
+# Complex expressions combining multiple functions
+test.position = max(0, round(abs(sin(strip_len * 2)) * (strip_len - 1) / 255))
+test.opacity = min(255, max(50, scale(sqrt(strip_len), 0, 16, 100, 255)))
+```
+
+**Special Notes:**
+- **Integer Optimization**: `sqrt()` function automatically handles integer scaling for 0-255 range values
+- **Trigonometric Range**: `sin()` and `cos()` use 0-255 input range (mapped to 0-360°) and return -255 to 255 output range
+- **Automatic Detection**: Mathematical functions are automatically detected at transpile time using dynamic introspection
+- **Closure Context**: In computed parameters, mathematical functions are called as `animation._math.()` in the generated closure context
+
+**How It Works:**
+When the DSL detects arithmetic expressions containing value providers, variable references, or mathematical functions, it automatically creates closure functions that capture the computation. These closures are called with `(self, param_name, time_ms)` parameters, allowing the computation to be re-evaluated dynamically as needed. Mathematical functions are automatically prefixed with `animation._math.` in the closure context to access the ClosureValueProvider's mathematical methods.
+
+**User Functions in Computed Parameters:**
+User-defined functions can also be used in computed parameter expressions, providing powerful custom effects:
+
+```berry
+# Simple user function in computed parameter
+animation base = solid(color=blue)
+base.opacity = rand_demo()
+
+# User functions mixed with math operations
+animation dynamic = solid(
+ color=purple
+ opacity=max(50, min(255, rand_demo() + 100))
+)
+```
+
+### User Functions
+
+User functions are custom Berry functions that can be called from computed parameters. They provide dynamic values that change over time.
+
+**Available User Functions:**
+- `rand_demo()` - Returns random values for demonstration purposes
+
+**Usage in Computed Parameters:**
+```berry
+# Simple user function
+animation.opacity = rand_demo()
+
+# User function with math operations
+animation.opacity = max(100, rand_demo())
+
+# User function in arithmetic expressions
+animation.opacity = abs(rand_demo() - 128) + 64
+```
+
+**Available User Functions:**
+The following user functions are available by default (see [User Functions Guide](USER_FUNCTIONS.md) for details):
+
+| Function | Parameters | Description |
+|----------|------------|-------------|
+| `rand_demo()` | none | Returns a random value (0-255) for demonstration |
+
+**User Function Behavior:**
+- User functions are automatically detected by the transpiler
+- They receive `self.engine` as the first parameter in closure context
+- They can be mixed with mathematical functions and arithmetic operations
+- The entire expression is wrapped in a single efficient closure
+
+## Sequences
+
+Sequences orchestrate multiple animations with timing control. The DSL supports two syntaxes for sequences with repeat functionality:
+
+### Basic Sequence Syntax
+
+```berry
+sequence demo {
+ play red_animation for 3s
+ wait 1s
+ play blue_animation for 2s
+
+ repeat 3 times {
+ play flash_effect for 200ms
+ wait 300ms
+ }
+
+ play final_animation
+}
+```
+
+### Repeat Sequence Syntax
+
+For sequences that are primarily repeating patterns, you can use the alternative syntax:
+
+```berry
+# Option 1: Traditional syntax with repeat sub-sequence
+sequence cylon_eye {
+ repeat forever {
+ play red_eye for 3s
+ red_eye.pos = triangle_val
+ play red_eye for 3s
+ red_eye.pos = cosine_val
+ eye_color.next = 1
+ }
+}
+
+# Option 2: Alternative syntax - sequence with repeat modifier
+sequence cylon_eye repeat forever {
+ play red_eye for 3s
+ red_eye.pos = triangle_val
+ play red_eye for 3s
+ red_eye.pos = cosine_val
+ eye_color.next = 1
+}
+
+# Option 3: Parametric repeat count
+sequence rainbow_cycle repeat palette.size times {
+ play animation for 1s
+ palette.next = 1
+}
+```
+
+**Note**: All syntaxes are functionally equivalent. The repeat count can be a literal number, variable, or dynamic expression that evaluates at runtime.
+
+### Sequence Statements
+
+#### Play Statement
+
+```berry
+play animation_name # Play indefinitely
+play animation_name for 5s # Play for specific duration
+play animation_name for duration_var # Play for variable duration
+```
+
+#### Wait Statement
+
+```berry
+wait 1s # Wait for 1 second
+wait 500ms # Wait for 500 milliseconds
+wait duration_var # Wait for variable duration
+```
+
+#### Duration Support
+
+Both `play` and `wait` statements support flexible duration specifications:
+
+**Literal Time Values:**
+```berry
+play animation for 5s # 5 seconds
+play animation for 2000ms # 2000 milliseconds
+play animation for 1m # 1 minute
+```
+
+**Variable References:**
+```berry
+set short_time = 2s
+set long_time = 10s
+
+sequence demo {
+ play animation for short_time # Use variable duration
+ wait long_time # Variables work in wait too
+}
+```
+
+**Value Providers (Dynamic Duration):**
+```berry
+set dynamic_duration = triangle(min_value=1000, max_value=5000, period=10s)
+
+sequence demo {
+ play animation for dynamic_duration # Duration changes over time
+}
+```
+
+**Examples:**
+```berry
+# Cylon eye with variable duration
+set eye_duration = 5s
+
+sequence cylon_eye forever {
+ play red_eye for eye_duration # Use variable for consistent timing
+ red_eye.pos = triangle_val
+ play red_eye for eye_duration # Same duration for both phases
+ red_eye.pos = cosine_val
+ eye_color.next = 1
+}
+```
+
+#### Repeat Statement
+
+Repeat statements create runtime sub-sequences that execute repeatedly:
+
+```berry
+repeat 3 times { # Repeat exactly 3 times
+ play animation for 1s
+ wait 500ms
+}
+
+repeat forever { # Repeat indefinitely until parent sequence stops
+ play animation for 1s
+ wait 500ms
+}
+
+repeat col1.palette_size times { # Parametric repeat count using property access
+ play animation for 1s
+ col1.next = 1
+}
+```
+
+**Repeat Count Types:**
+- **Literal numbers**: `repeat 5 times` - fixed repeat count
+- **Variables**: `repeat count_var times` - using previously defined variables
+- **Property access**: `repeat color_provider.palette_size times` - dynamic values from object properties
+- **Computed expressions**: `repeat strip_length() / 2 times` - calculated repeat counts
+
+**Repeat Behavior:**
+- **Runtime Execution**: Repeats are executed at runtime, not expanded at compile time
+- **Dynamic Evaluation**: Parametric repeat counts are evaluated when the sequence starts
+- **Sub-sequences**: Each repeat block creates a sub-sequence that manages its own iteration state
+- **Nested Repeats**: Supports nested repeats with multiplication (e.g., `repeat 3 times { repeat 2 times { ... } }` executes 6 times total)
+- **Forever Loops**: `repeat forever` continues until the parent sequence is stopped
+- **Efficient**: No memory overhead for large repeat counts
+
+#### Assignment Statement
+
+Property assignments can be performed within sequences to dynamically modify animation parameters during playback:
+
+```berry
+sequence demo {
+ play red_eye for 3s
+ red_eye.pos = triangle_val # Change position to triangle oscillator
+ play red_eye for 3s
+ red_eye.pos = cosine_val # Change position to cosine oscillator
+ eye_color.next = 1 # Advance color cycle to next color
+}
+```
+
+**Assignment Semantics:**
+- Assignments in sequences have exactly the same semantics as assignments outside sequences
+- They can assign static values, value providers, or computed expressions
+- Assignments are executed instantly when the sequence step is reached
+- The assignment is wrapped in a closure: `def (engine) end`
+
+**Examples:**
+```berry
+sequence dynamic_show {
+ play pulse_anim for 2s
+ pulse_anim.opacity = 128 # Set static opacity
+ play pulse_anim for 2s
+ pulse_anim.opacity = brightness # Use value provider
+ play pulse_anim for 2s
+ pulse_anim.color = next_color # Change color provider
+ play pulse_anim for 2s
+}
+
+# Assignments work in repeat blocks too
+sequence cylon_eye {
+ repeat 3 times {
+ play red_eye for 1s
+ red_eye.pos = triangle_val # Change oscillator pattern
+ play red_eye for 1s
+ red_eye.pos = cosine_val # Change back
+ eye_color.next = 1 # Advance color
+ }
+}
+```
+
+#### If Statement
+
+Conditional execution statements that run their body 0 or 1 times based on a boolean condition:
+
+```berry
+if condition { # Execute if condition is true (non-zero)
+ play animation for 1s
+ wait 500ms
+}
+```
+
+**Condition Types:**
+- **Static values**: `if true { ... }`, `if false { ... }`, `if 5 { ... }`
+- **Variables**: `if flag { ... }` - using previously defined variables
+- **Template parameters**: `if self.enabled { ... }` - dynamic values from template parameters
+- **Computed expressions**: `if strip_length() > 30 { ... }` - calculated conditions
+
+**If Behavior:**
+- **Boolean Coercion**: All conditions are wrapped with `bool()` to ensure 0 or 1 iterations
+- **Static Optimization**: Static conditions (literals) are evaluated at compile time without closures
+- **Dynamic Evaluation**: Dynamic conditions (variables, parameters) are wrapped in closures
+- **Conditional Gate**: Useful for enabling/disabling parts of sequences based on flags
+
+**Examples:**
+```berry
+# Static condition
+sequence demo {
+ if true {
+ play animation for 1s
+ }
+}
+
+# Template parameter condition
+template animation configurable {
+ param enable_effect type bool default true
+
+ color my_red = 0xFF0000
+ animation solid_red = solid(color=my_red)
+
+ sequence main repeat forever {
+ if enable_effect {
+ play solid_red for 1s
+ }
+ }
+
+ run main
+}
+
+# Variable condition
+set flag = true
+sequence conditional {
+ if flag {
+ play animation for 2s
+ }
+}
+
+# Bidirectional animation with flags
+template animation shutter_bidir {
+ param ascending type bool default true
+ param descending type bool default true
+
+ sequence shutter_seq repeat forever {
+ if ascending {
+ play shutter_lr for 2s
+ }
+ if descending {
+ play shutter_rl for 2s
+ }
+ }
+
+ run shutter_seq
+}
+```
+
+**Comparison with Repeat:**
+- `if condition { ... }` - Runs 0 or 1 times (boolean gate)
+- `repeat count times { ... }` - Runs exactly `count` times (iteration)
+
+#### Restart Statements
+
+Restart statements allow you to restart value providers and animations from their initial state during sequence execution:
+
+```berry
+restart value_provider_name # Restart value provider from beginning
+restart animation_name # Restart animation from beginning
+```
+
+**Restart Statement:**
+- Restarts value providers (oscillators, color cycles, etc.) from their initial state
+- Restarts animations from their beginning state
+- Calls the `start()` method on the value provider or animation, which resets the time origin only if the object was already started previously
+- Useful for synchronizing oscillators, restarting color cycles, or restarting complex animations
+
+**Timing Behavior:**
+- The `start()` method only resets the time origin if `self.start_time` is not nil (i.e., the object was already started)
+- For fresh objects, the first call to `update()`, `render()`, or `produce_value()` initializes the time reference
+- This prevents premature time initialization and ensures proper timing behavior
+
+**Examples:**
+```berry
+# Restart oscillators for synchronized movement
+sequence sync_demo {
+ play wave_anim for 3s
+ restart position_osc # Restart oscillator time origin
+ play wave_anim for 3s
+}
+
+# Restart animations for clean transitions
+sequence clean_transitions {
+ play comet_anim for 5s
+ restart comet_anim # Restart from beginning position
+ play comet_anim for 5s
+}
+```
+
+## Template Animations
+
+Template animations provide a powerful way to create reusable, parameterized animation classes. They allow you to define animation blueprints that can be instantiated multiple times with different parameters, promoting code reuse and maintainability.
+
+**Template-Only Files**: DSL files containing only template animation definitions transpile to pure Berry classes without engine initialization or execution code. This allows template animations to be used as reusable animation libraries.
+
+### Template Animation Definition
+
+Template animations are defined using the `template animation` keywords followed by a parameter block and body:
+
+```berry
+template animation shutter_effect {
+ param colors type palette nillable true
+ param duration type time min 0 max 3600 default 5 nillable false
+
+ set strip_len = strip_length()
+ set shutter_size = sawtooth(min_value = 0, max_value = strip_len, duration = duration)
+
+ color col = color_cycle(palette=colors, cycle_period=0)
+
+ animation shutter = beacon_animation(
+ color = col
+ pos = strip_len / 2
+ beacon_size = shutter_size
+ priority = 5
+ )
+
+ sequence seq repeat forever {
+ restart shutter_size
+ play shutter for duration
+ col.next = 1
+ }
+
+ run seq
+}
+
+# Use the template animation
+palette rainbow = [red, orange, yellow, green, blue, indigo, white]
+animation my_shutter = shutter_effect(colors=rainbow, duration=2s)
+run my_shutter
+```
+
+**Code Generation:**
+Template animations generate Berry classes extending `engine_proxy`:
+
+```berry
+class shutter_effect_animation : animation.engine_proxy
+ static var PARAMS = animation.enc_params({
+ "colors": {"type": "palette"},
+ "duration": {"type": "time", "min": 0, "max": 3600, "default": 5}
+ })
+
+ def init(engine)
+ super(self).init(engine)
+ # Generated code with self.colors and self.duration references
+ self.add(seq_)
+ end
+end
+```
+
+**Parameter Constraints:**
+Template animation parameters support constraints:
+- `type` - Parameter type (palette, time, int, color, etc.)
+- `min` - Minimum value (for numeric types)
+- `max` - Maximum value (for numeric types)
+- `default` - Default value
+- `nillable` - Whether parameter can be nil (true/false)
+
+**Implicit Parameters:**
+Template animations automatically inherit parameters from the `engine_proxy` class hierarchy. These parameters are available without explicit declaration and can be used directly in your template animation body:
+
+```berry
+# These parameters are implicitly available in all template animations:
+param id type string default "animation"
+param priority type int default 10
+param duration type int default 0
+param loop type bool default false
+param opacity type int default 255
+param color type int default 0
+param is_running type bool default false
+```
+
+**Example using implicit parameters:**
+```berry
+template animation fade_effect {
+ param colors type palette
+
+ # 'duration' is an implicit parameter - no need to declare it
+ set oscillator = sawtooth(min_value=0, max_value=255, duration=duration)
+
+ color col = color_cycle(palette=colors, cycle_period=0)
+ animation test = solid(color=col)
+
+ # 'opacity' is also implicit
+ test.opacity = oscillator
+
+ run test
+}
+
+# When instantiating, you can set implicit parameters
+animation my_fade = fade_effect(colors=rainbow)
+my_fade.duration = 5000 # Set the implicit duration parameter
+my_fade.opacity = 200 # Set the implicit opacity parameter
+```
+
+**Notes on Implicit Parameters:**
+- Implicit parameters can be overridden by explicit declarations if needed
+- They follow the same constraint rules as explicit parameters
+- They are accessed as `self.` within the template body
+- All implicit parameters come from the `Animation` and `ParameterizedObject` base classes
+
+**Key Features:**
+- Generates reusable animation classes extending `engine_proxy`
+- Parameters accessed as `self.` within the template body
+- Uses `self.add()` to add child animations
+- Can be instantiated multiple times with different parameters
+- Supports parameter constraints (type, min, max, default, nillable)
+
+### Template Parameter Validation
+
+The DSL transpiler provides comprehensive validation for template parameters to ensure code quality and catch errors early:
+
+**Parameter Name Validation:**
+- **Duplicate Detection**: Prevents using the same parameter name twice
+- **Reserved Keywords**: Prevents conflicts with Berry keywords (`animation`, `color`, `def`, etc.)
+- **Built-in Colors**: Prevents conflicts with predefined color names (`red`, `blue`, etc.)
+
+```berry
+template bad_example {
+ param color type color # ❌ Error: conflicts with built-in color
+ param animation type number # ❌ Error: conflicts with reserved keyword
+ param my_param type color
+ param my_param type number # ❌ Error: duplicate parameter name
+}
+```
+
+**Type Annotation Validation:**
+
+Valid parameter types for `static var PARAMS` and template parameters:
+
+| Type | Description | Synonym For | Example |
+|------|-------------|-------------|---------|
+| `int` | Integer values | - | `{"type": "int", "default": 100}` |
+| `bool` | Boolean values | - | `{"type": "bool", "default": false}` |
+| `string` | String values | - | `{"type": "string", "default": "name"}` |
+| `bytes` | Byte buffers (palettes) | - | `{"type": "bytes", "default": bytes("FF0000")}` |
+| `function` | Functions/closures | - | `{"type": "function", "default": nil}` |
+| `animation` | Animation instances | - | Symbol table tracking |
+| `value_provider` | Value provider instances | - | Symbol table tracking |
+| `number` | Generic numeric type | - | Numeric constraints only |
+| `any` | Any type (no validation) | - | `{"type": "any", "default": nil}` |
+| `color` | Color values | `int` | `{"type": "color", "default": 0xFFFF0000}` |
+| `palette` | Palette definitions | `bytes` | `{"type": "palette", "default": bytes(...)}` |
+| `time` | Time values (ms) | `int` | `{"type": "time", "default": 5000}` |
+| `percentage` | Percentage (0-255) | `int` | `{"type": "percentage", "default": 128}` |
+
+**Note:** Types `color`, `palette`, `time`, and `percentage` are user-friendly synonyms that map to their base types during validation.
+
+```berry
+template type_example {
+ param my_color type invalid_type # ❌ Error: invalid type annotation
+ param valid_color type color # ✅ Valid type annotation
+}
+```
+
+**Parameter Usage Validation:**
+The transpiler generates **warnings** (not errors) for unused parameters:
+
+```berry
+template unused_example {
+ param used_color type color
+ param unused_param type number # ⚠️ Warning: parameter never used
+
+ animation test = solid(color=used_color)
+ run test
+}
+```
+
+**Validation Benefits:**
+- **Early Error Detection**: Catches parameter issues at compile time
+- **Clear Error Messages**: Provides helpful suggestions for fixing issues
+- **Code Quality**: Encourages proper parameter naming and usage
+- **Warnings vs Errors**: Unused parameters generate warnings that don't prevent compilation
+
+## Execution Statements
+
+Execute animations or sequences:
+
+```berry
+run animation_name # Run an animation
+run sequence_name # Run a sequence
+```
+
+### Debug and Logging
+
+Log debug messages during animation execution:
+
+```berry
+log("Debug message") # Log message at level 3
+log("Animation started") # Useful for debugging sequences
+log("Color changed to red") # Track animation state changes
+```
+
+**Log Function Behavior:**
+- Accepts string literals only (no variables or expressions)
+- Transpiles to Berry `log(f"message", 3)`
+- Messages are logged at level 3 for debugging purposes
+- Can be used anywhere in DSL code: standalone, in sequences, etc.
+
+## Operators and Expressions
+
+### Arithmetic Operators
+
+```berry
++ # Addition
+- # Subtraction (also unary minus)
+* # Multiplication
+/ # Division
+% # Modulo
+```
+
+### Comparison Operators
+
+```berry
+== # Equal to
+!= # Not equal to
+< # Less than
+<= # Less than or equal
+> # Greater than
+>= # Greater than or equal
+```
+
+### Logical Operators
+
+```berry
+&& # Logical AND
+|| # Logical OR
+! # Logical NOT
+```
+
+### Assignment Operators
+
+```berry
+= # Simple assignment
+```
+
+## Function Calls
+
+Functions use named parameter syntax with flexible formatting:
+
+```berry
+# Single line (commas required)
+function_name(param1=value1, param2=value2)
+
+# Multi-line (commas optional when parameters are on separate lines)
+function_name(
+ param1=value1
+ param2=value2
+ param3=value3
+)
+
+# Mixed syntax (both commas and newlines work)
+function_name(
+ param1=value1, param2=value2
+ param3=value3
+)
+```
+
+**Examples:**
+```berry
+# Traditional single-line syntax
+solid(color=red)
+pulsating_animation(color=blue, period=2s)
+
+# New multi-line syntax (no commas needed)
+pulsating_animation(
+ color=blue
+ period=2s
+ brightness=255
+)
+
+# Mixed syntax
+comet_animation(
+ color=stream_pattern, tail_length=15
+ speed=1.5s
+ priority=10
+)
+```
+
+**Nested Function Calls:**
+```berry
+pulsating_animation(
+ color=solid(color=red)
+ period=smooth(
+ min_value=1000
+ max_value=3000
+ period=10s
+ )
+)
+```
+
+**Mathematical Functions in Computed Parameters:**
+Mathematical functions can be used in computed parameter expressions and are automatically detected by the transpiler:
+
+```berry
+animation wave = pulsating_animation(
+ color=blue
+ period=2s
+)
+
+# Mathematical functions in property assignments
+wave.opacity = abs(sine(strip_length()) - 128) # Sine wave opacity
+wave.position = max(0, min(strip_length() - 1, 15)) # Clamped position
+wave.brightness = round(sqrt(strip_length()) * 4) # Non-linear scaling
+```
+
+## Supported Classes
+
+### Value Providers
+
+Value providers create dynamic values that change over time:
+
+| Function | Description |
+|----------|-------------|
+| `static_value` | Returns a constant value |
+| `strip_length` | Returns the LED strip length in pixels |
+| `oscillator_value` | Oscillates between min/max values with various waveforms |
+
+**Oscillator Aliases:**
+| Function | Description |
+|----------|-------------|
+| `triangle` | Triangle wave oscillation (alias for oscillator with triangle waveform) |
+| `smooth` | Smooth cosine wave (alias for oscillator with smooth waveform) |
+| `cosine_osc` | Cosine wave oscillation (alias for smooth - cosine waveform) |
+| `sine_osc` | Pure sine wave oscillation (alias for oscillator with sine waveform) |
+| `linear` | Linear progression (alias for oscillator with linear waveform) |
+| `ramp` | Sawtooth wave (alias for oscillator with ramp waveform) |
+| `sawtooth` | Sawtooth wave (alias for ramp) |
+| `square` | Square wave oscillation |
+| `ease_in` | Quadratic ease-in (starts slow, accelerates) |
+| `ease_out` | Quadratic ease-out (starts fast, decelerates) |
+| `elastic` | Elastic easing with spring-like overshoot |
+| `bounce` | Bounce easing like a ball with decreasing amplitude |
+
+```berry
+# Direct oscillator usage
+triangle(min_value=0, max_value=255, period=2s) # Triangle wave
+smooth(min_value=50, max_value=200, period=3s) # Smooth cosine
+cosine_osc(min_value=3, max_value=1, period=5s) # Cosine wave (alias for smooth)
+sine_osc(min_value=0, max_value=255, period=2s) # Pure sine wave
+linear(min_value=0, max_value=100, period=1s) # Linear progression
+ramp(min_value=0, max_value=255, period=2s) # Sawtooth wave
+square(min_value=0, max_value=255, period=1s) # Square wave
+ease_in(min_value=0, max_value=255, period=2s) # Quadratic ease-in
+ease_out(min_value=0, max_value=255, period=2s) # Quadratic ease-out
+elastic(min_value=0, max_value=255, period=2s) # Elastic spring effect
+bounce(min_value=0, max_value=255, period=2s) # Bouncing ball effect
+
+# Value providers can be assigned to variables
+set brightness_oscillator = smooth(min_value=50, max_value=255, period=3s)
+set position_sweep = triangle(min_value=0, max_value=29, period=5s)
+set elastic_movement = elastic(min_value=0, max_value=30, period=4s)
+set sine_wave = sine_osc(min_value=0, max_value=255, period=2s)
+set cosine_wave = cosine_osc(min_value=50, max_value=200, period=3s)
+set strip_len = strip_length() # Get the current strip length
+```
+
+### Color Providers
+
+Color providers create dynamic colors that change over time:
+
+| Function | Description |
+|----------|-------------|
+| `static_color` | Solid color with optional dynamic opacity |
+| `color_cycle` | Cycles through a palette of colors |
+| `rich_palette` | Advanced palette-based color cycling with smooth transitions |
+| `composite_color` | Combines multiple color providers |
+| `breathe_color` | Breathing/pulsing color effect with brightness modulation |
+| `pulsating_color` | Fast pulsing color effect (alias for breathe_color with curve_factor=1) |
+
+### Animation Classes
+
+Animation classes create visual effects on LED strips:
+
+| Function | Description |
+|----------|-------------|
+| `solid` | Solid color fill |
+| `pulsating_animation` | Pulsing brightness effect |
+| `beacon_animation` | Positioned pulse effect |
+| `crenel_position_animation` | Square wave pulse at specific position |
+| `breathe_animation` | Breathing/fading effect |
+| `comet_animation` | Moving comet with trailing tail |
+| `fire_animation` | Realistic fire simulation |
+| `twinkle_animation` | Twinkling stars effect |
+| `gradient_animation` | Color gradient effects |
+| `noise_animation` | Perlin noise-based patterns |
+| `wave_animation` | Wave propagation effects |
+| `rich_palette_animation` | Palette-based color cycling |
+| `palette_wave_animation` | Wave patterns using palettes |
+| `palette_gradient_animation` | Gradient patterns using palettes |
+| `palette_meter_animation` | Meter/bar patterns using palettes |
+
+## Error Handling
+
+### Validation Rules
+
+The DSL performs comprehensive validation at compile time:
+
+1. **Reserved Names**: Cannot redefine keywords or predefined colors
+2. **Class Existence**: Animation and color provider factory functions must exist
+3. **Parameter Validation**: Function parameters must exist and be valid for the specific class
+4. **Type Checking**: Values must match expected types
+5. **Reference Resolution**: All referenced identifiers must be defined
+
+### Compile-Time Validation
+
+The DSL validates class and parameter existence during compilation, catching errors before execution:
+
+- **Factory Functions**: Verifies that animation and color provider factories exist in the animation module
+- **Parameter Names**: Checks that all named parameters are valid for the specific class
+- **Parameter Constraints**: Validates parameter values against defined constraints (min/max, enums, types)
+- **Nested Validation**: Validates parameters in nested function calls and value providers
+- **Property Assignment Validation**: Validates parameter names in property assignments (e.g., `animation.invalid_param = value`) against the actual class parameters
+- **Object Reference Validation**: Validates that referenced objects exist in `run` statements and sequence `play` statements
+
+### Common Errors
+
+```berry
+# Invalid: Redefining predefined color
+color red = 0x800000 # Error: Cannot redefine 'red'
+
+# Invalid: Unknown parameter in constructor
+animation bad = pulsating_animation(invalid_param=123) # Error: Unknown parameter
+
+# Invalid: Unknown parameter in property assignment
+animation pulse = pulsating_animation(color=red, period=2s)
+pulse.wrong_arg = 15 # Error: Parameter 'wrong_arg' not valid for PulseAnimation
+
+# Invalid: Undefined reference in color definition
+animation ref = solid(color=undefined_color) # Error: Undefined reference
+
+# Invalid: Undefined reference in run statement
+run undefined_animation # Error: Undefined reference 'undefined_animation' in run
+
+# Invalid: Undefined reference in sequence
+sequence demo {
+ play undefined_animation for 5s # Error: Undefined reference 'undefined_animation' in sequence play
+}
+
+# Valid alternatives
+color my_red = 0x800000 # OK: Different name
+animation good = pulsating_animation(color=red, period=2s) # OK: Valid parameters
+good.priority = 10 # OK: Valid parameter assignment
+```
+
+## Formal Grammar (EBNF)
+
+```ebnf
+(* Animation DSL Grammar *)
+
+program = { statement } ;
+
+statement = import_stmt
+ | config_stmt
+ | definition
+ | property_assignment
+ | sequence
+ | template_def
+ | external_stmt
+ | execution_stmt ;
+
+(* Import and Configuration *)
+import_stmt = "import" identifier ;
+config_stmt = variable_assignment ;
+external_stmt = "extern" "function" identifier ;
+(* strip_config = "strip" "length" number ; -- TEMPORARILY DISABLED *)
+variable_assignment = "set" identifier "=" expression ;
+
+(* Definitions *)
+definition = color_def | palette_def | animation_def | template_animation_def ;
+color_def = "color" identifier "=" color_expression ;
+palette_def = "palette" identifier "=" palette_array ;
+animation_def = "animation" identifier "=" animation_expression ;
+template_animation_def = "template" "animation" identifier "{" template_body "}" ;
+
+(* Property Assignments *)
+property_assignment = identifier "." identifier "=" expression ;
+
+(* Sequences *)
+sequence = "sequence" identifier [ "repeat" ( expression "times" | "forever" ) ] "{" sequence_body "}" ;
+sequence_body = { sequence_statement } ;
+sequence_statement = play_stmt | wait_stmt | repeat_stmt | if_stmt | sequence_assignment | restart_stmt ;
+
+play_stmt = "play" identifier [ "for" time_expression ] ;
+wait_stmt = "wait" time_expression ;
+repeat_stmt = "repeat" ( expression "times" | "forever" ) "{" sequence_body "}" ;
+if_stmt = "if" expression "{" sequence_body "}" ;
+sequence_assignment = identifier "." identifier "=" expression ;
+restart_stmt = "restart" identifier ;
+
+(* Template Animations *)
+template_animation_def = "template" "animation" identifier "{" template_body "}" ;
+template_body = { template_statement } ;
+template_statement = param_decl | color_def | palette_def | animation_def | property_assignment | sequence_def | execution_stmt ;
+param_decl = "param" identifier [ "type" identifier ] [ constraint_list ] ;
+constraint_list = ( "min" number | "max" number | "default" expression | "nillable" boolean ) { constraint_list } ;
+
+(* Execution *)
+execution_stmt = "run" identifier ;
+
+(* Expressions *)
+expression = logical_or_expr ;
+logical_or_expr = logical_and_expr { "||" logical_and_expr } ;
+logical_and_expr = equality_expr { "&&" equality_expr } ;
+equality_expr = relational_expr { ( "==" | "!=" ) relational_expr } ;
+relational_expr = additive_expr { ( "<" | "<=" | ">" | ">=" ) additive_expr } ;
+additive_expr = multiplicative_expr { ( "+" | "-" ) multiplicative_expr } ;
+multiplicative_expr = unary_expr { ( "*" | "/" | "%" ) unary_expr } ;
+unary_expr = ( "!" | "-" | "+" ) unary_expr | primary_expr ;
+primary_expr = literal | identifier | function_call | "(" expression ")" ;
+
+(* Color Expressions *)
+color_expression = hex_color | named_color | identifier ;
+hex_color = "0x" hex_digit{6} | "0x" hex_digit{8} ;
+named_color = color_name ;
+
+(* Animation Expressions *)
+animation_expression = function_call | identifier ;
+
+(* Palette Arrays *)
+palette_array = "[" palette_entry { "," palette_entry } "]" ;
+palette_entry = "(" number "," color_expression ")" ;
+
+(* Function Calls *)
+function_call = identifier "(" [ named_argument_list ] ")" ;
+named_argument_list = named_argument { "," named_argument } ;
+named_argument = identifier "=" expression ;
+
+(* Time Expressions *)
+time_expression = time_literal ;
+time_literal = number time_unit ;
+time_unit = "ms" | "s" | "m" | "h" ;
+
+(* Literals *)
+literal = number | string | color_expression | time_expression | percentage | boolean ;
+number = integer | real ;
+integer = [ "-" ] digit { digit } ;
+real = [ "-" ] digit { digit } "." digit { digit } ;
+string = '"' { string_char } '"' | "'" { string_char } "'" ;
+percentage = number "%" ;
+boolean = "true" | "false" ;
+
+(* Identifiers *)
+identifier = ( letter | "_" ) { letter | digit | "_" } ;
+color_name = "red" | "green" | "blue" | "white" | "black" | "yellow"
+ | "orange" | "purple" | "pink" | "cyan" | "magenta" | "gray"
+ | "silver" | "gold" | "brown" | "lime" | "navy" | "olive"
+ | "maroon" | "teal" | "aqua" | "fuchsia" | "transparent" ;
+
+(* Character Classes *)
+letter = "a" .. "z" | "A" .. "Z" ;
+digit = "0" .. "9" ;
+hex_digit = digit | "A" .. "F" | "a" .. "f" ;
+string_char = (* any character except quote *) ;
+
+(* Comments and Whitespace *)
+comment = "#" { (* any character except newline *) } newline ;
+whitespace = " " | "\t" | "\r" | "\n" ;
+newline = "\n" | "\r\n" ;
+```
+
+## Flexible Parameter Syntax
+
+The DSL supports flexible parameter syntax that makes multi-line function calls more readable:
+
+### Traditional Syntax (Commas Required)
+```berry
+animation stream = comet_animation(color=red, tail_length=15, speed=1.5s, priority=10)
+```
+
+### New Multi-Line Syntax (Commas Optional)
+```berry
+animation stream = comet_animation(
+ color=red
+ tail_length=15
+ speed=1.5s
+ priority=10
+)
+```
+
+### Mixed Syntax (Both Supported)
+```berry
+animation stream = comet_animation(
+ color=red, tail_length=15
+ speed=1.5s
+ priority=10
+)
+```
+
+### Rules
+- **Single line**: Commas are required between parameters
+- **Multi-line**: Commas are optional when parameters are on separate lines
+- **Mixed**: You can use both commas and newlines as separators
+- **Comments**: Inline comments work with both syntaxes
+
+This applies to:
+- Animation function calls
+- Color provider function calls
+- Value provider function calls
+- Palette entries
+
+## Language Features Summary
+
+### ✅ Currently Implemented
+- Comments with preservation
+- Strip configuration (optional)
+- Color definitions (hex and named)
+- Palette definitions with VRGB conversion
+- Animation definitions with named parameters
+- Property assignments
+- Basic sequences (play, wait, repeat, if)
+- **Conditional execution**: `if` statement for boolean-based conditional execution
+- Variable assignments with type conversion
+- Reserved name validation
+- Parameter validation at compile time
+- Execution statements
+- **Template animations**: Reusable animation classes with parameters extending `engine_proxy`
+- User-defined functions (with engine-first parameter pattern) - see **[User Functions Guide](USER_FUNCTIONS.md)**
+- **External function declarations**: `extern` keyword to declare Berry functions defined in `berry` blocks for DSL use
+- **User functions in computed parameters**: User functions can be used in arithmetic expressions alongside mathematical functions
+- **Flexible parameter syntax**: Commas optional when parameters are on separate lines
+- **Computed values**: Arithmetic expressions with value providers automatically create closures
+- **Mathematical functions**: `min`, `max`, `abs`, `round`, `sqrt`, `scale`, `sine`, `cosine` in computed parameters
+
+### 🚧 Partially Implemented
+- Expression evaluation (basic support)
+- Nested function calls (working but limited)
+- Error recovery (basic error reporting)
+
+### ❌ Planned Features
+- Advanced control flow (else, elif, choose random)
+- Event system and handlers
+- Variable references with $ syntax
+- Spatial operations and zones
+- 2D matrix support
+
+This reference provides the complete syntax specification for the Animation DSL language as currently implemented and planned for future development.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/DSL_TRANSPILATION.md b/lib/libesp32/berry_animation/berry_animation_docs/DSL_TRANSPILATION.md
new file mode 100644
index 000000000..df710b3a9
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/DSL_TRANSPILATION.md
@@ -0,0 +1,798 @@
+# DSL Reference - Berry Animation Framework
+
+This document provides a comprehensive reference for the Animation DSL (Domain-Specific Language), which allows you to define animations using a declarative syntax with named parameters.
+
+## Module Import
+
+The DSL functionality is provided by a separate module:
+
+```berry
+import animation # Core framework (required)
+import animation_dsl # DSL compiler and runtime (required for DSL)
+```
+
+## Why Use the DSL?
+
+### Benefits
+- **Declarative syntax**: Describe what you want, not how to implement it
+- **Readable code**: Natural language-like syntax
+- **Rapid prototyping**: Quick iteration on animation ideas
+- **Event-driven**: Built-in support for interactive animations
+- **Composition**: Easy layering and sequencing of animations
+
+### When to Use DSL vs Programmatic
+
+**Use DSL when:**
+- Creating complex animation sequences
+- Building interactive, event-driven animations
+- Rapid prototyping and experimentation
+- Non-programmers need to create animations
+- You want declarative, readable animation definitions
+
+**Use programmatic API when:**
+- Building reusable animation components
+- Performance is critical (DSL has compilation overhead)
+- You need fine-grained control over animation logic
+- Integrating with existing Berry code
+- Firmware size is constrained (DSL module can be excluded)
+
+## Transpiler Architecture
+
+For detailed information about the DSL transpiler's internal architecture, including the core processing flow and expression processing chain, see [TRANSPILER_ARCHITECTURE.md](TRANSPILER_ARCHITECTURE.md).
+
+## DSL API Functions
+
+### Core Functions
+
+#### `animation_dsl.compile(source)`
+Compiles DSL source code to Berry code without executing it.
+
+```berry
+var dsl_source = "color red = 0xFF0000\n"
+ "animation red_anim = solid(color=red)\n"
+ "run red_anim"
+
+var berry_code = animation_dsl.compile(dsl_source)
+print(berry_code) # Shows generated Berry code
+```
+
+#### `animation_dsl.execute(source)`
+Compiles and executes DSL source code in one step.
+
+```berry
+animation_dsl.execute("color blue = 0x0000FF\n"
+ "animation blue_anim = solid(color=blue)\n"
+ "run blue_anim for 5s")
+```
+
+#### `animation_dsl.load_file(filename)`
+Loads DSL source from a file and executes it.
+
+```berry
+# Create a DSL file
+var f = open("my_animation.dsl", "w")
+f.write("color green = 0x00FF00\n"
+ "animation pulse_green = pulsating_animation(color=green, period=2s)\n"
+ "run pulse_green")
+f.close()
+
+# Load and execute
+animation_dsl.load_file("my_animation.dsl")
+```
+
+## DSL Language Overview
+
+The Animation DSL uses a declarative syntax with named parameters. All animations are created with an engine-first pattern and parameters are set individually for maximum flexibility.
+
+### Key Syntax Features
+
+- **Import statements**: `import module_name` for loading Berry modules
+- **Named parameters**: All function calls use `name=value` syntax
+- **Time units**: `2s`, `500ms`, `1m`, `1h`
+- **Hex colors**: `0xFF0000`, `0x80FF0000` (ARGB)
+- **Named colors**: `red`, `blue`, `white`, etc.
+- **Comments**: `# This is a comment`
+- **Property assignment**: `animation.property = value`
+- **User functions**: `function_name()` for custom functions
+
+### Basic Structure
+
+```berry
+# Import statements (optional, for user functions or custom modules)
+import user_functions
+
+# Optional strip configuration
+strip length 60
+
+# Color definitions
+color red = 0xFF0000
+color blue = 0x0000FF
+
+# Animation definitions with named parameters
+animation pulse_red = pulsating_animation(color=red, period=2s)
+animation comet_blue = comet_animation(color=blue, tail_length=10, speed=1500)
+
+# Property assignments with user functions
+pulse_red.priority = 10
+pulse_red.opacity = breathing_effect()
+comet_blue.direction = -1
+
+# Execution
+run pulse_red
+
+```
+
+The DSL transpiles to Berry code where each animation gets an engine parameter and named parameters are set individually.
+
+## Symbol Resolution
+
+The DSL transpiler uses intelligent symbol resolution at compile time to optimize generated code and eliminate runtime lookups:
+
+### Transpile-Time Symbol Resolution
+
+When the DSL encounters an identifier (like `SINE` or `red`), it checks at transpile time whether the symbol exists in the `animation` module using Berry's introspection capabilities:
+
+```berry
+# If SINE exists in animation module
+animation wave = wave_animation(waveform=SINE)
+# Transpiles to: animation.SINE (direct access)
+
+# If custom_color doesn't exist in animation module
+color custom_color = 0xFF0000
+animation solid_red = solid(color=custom_color)
+# Transpiles to: custom_color_ (user-defined variable)
+```
+
+### Benefits
+
+- **Performance**: Eliminates runtime symbol lookups for built-in constants
+- **Error Detection**: Catches undefined symbols at compile time
+- **Code Clarity**: Generated Berry code clearly shows built-in vs user-defined symbols
+- **Optimization**: Direct access to animation module symbols is faster
+
+### Symbol Categories
+
+**Built-in Symbols** (resolved to `animation.`):
+- Animation factory functions: `solid`, `pulsating_animation`, `comet_animation`
+- Value providers: `triangle`, `smooth`, `sine`, `static_value`
+- Color providers: `color_cycle`, `breathe_color`, `rich_palette`
+- Constants: `PALETTE_RAINBOW`, `SINE`, `TRIANGLE`, etc.
+
+**User-defined Symbols** (resolved to `_`):
+- Custom colors: `my_red`, `fire_color`
+- Custom animations: `pulse_effect`, `rainbow_wave`
+- Variables: `brightness_level`, `cycle_time`
+
+### Property Assignment Resolution
+
+Property assignments also use the same resolution logic:
+
+```berry
+# Built-in symbol (if 'engine' existed in animation module)
+engine.brightness = 200
+# Would transpile to: animation.engine.brightness = 200
+
+# User-defined symbol
+my_animation.priority = 10
+# Transpiles to: my_animation_.priority = 10
+```
+
+This intelligent resolution ensures optimal performance while maintaining clear separation between framework and user code.
+
+## Import Statement Transpilation
+
+The DSL supports importing Berry modules using the `import` keyword, which provides a clean way to load user functions and custom modules.
+
+### Import Syntax
+
+```berry
+# DSL Import Syntax
+import user_functions
+import my_custom_module
+import math
+```
+
+### Transpilation Behavior
+
+Import statements are transpiled directly to Berry import statements with quoted module names:
+
+```berry
+# DSL Code
+import user_functions
+
+# Transpiles to Berry Code
+import "user_functions"
+```
+
+### Import Processing
+
+1. **Early Processing**: Import statements are processed early in transpilation
+2. **Module Loading**: Imported modules are loaded using standard Berry import mechanism
+3. **Function Registration**: User function modules should register functions using `animation.register_user_function()`
+4. **No Validation**: The DSL doesn't validate module existence at compile time
+
+### Example Import Workflow
+
+**Step 1: Create User Functions Module (`user_functions.be`)**
+```berry
+import animation
+
+def rand_demo(engine)
+ import math
+ return math.rand() % 256
+end
+
+# Register for DSL use
+animation.register_user_function("rand_demo", rand_demo)
+```
+
+**Step 2: Use in DSL**
+```berry
+import user_functions
+
+animation test = solid(color=blue)
+test.opacity = rand_demo()
+run test
+```
+
+**Step 3: Generated Berry Code**
+```berry
+import animation
+var engine = animation.init_strip()
+
+import "user_functions"
+var test_ = animation.solid(engine)
+test_.color = 0xFF0000FF
+test_.opacity = animation.create_closure_value(engine,
+ def (engine) return animation.get_user_function('rand_demo')(engine) end)
+engine.add(test_)
+engine.run()
+```
+
+## Berry Code Block Transpilation
+
+The DSL supports embedding arbitrary Berry code using the `berry` keyword with triple-quoted strings. This provides an escape hatch for complex logic while maintaining the declarative nature of the DSL.
+
+### Berry Code Block Syntax
+
+```berry
+# DSL Berry Code Block
+berry """
+import math
+var custom_value = math.pi * 2
+print("Custom calculation:", custom_value)
+"""
+```
+
+### Transpilation Behavior
+
+Berry code blocks are copied verbatim to the generated Berry code with comment markers:
+
+```berry
+# DSL Code
+berry """
+var test_var = 42
+print("Hello from berry block")
+"""
+
+# Transpiles to Berry Code
+# Berry code block
+var test_var = 42
+print("Hello from berry block")
+# End berry code block
+```
+
+### Integration with DSL Objects
+
+Berry code can interact with DSL-generated objects by using the underscore suffix naming convention:
+
+```berry
+# DSL Code
+animation pulse = pulsating_animation(color=red, period=2s)
+berry """
+pulse_.opacity = 200
+pulse_.priority = 10
+"""
+
+# Transpiles to Berry Code
+var pulse_ = animation.pulsating_animation(engine)
+pulse_.color = animation.red
+pulse_.period = 2000
+# Berry code block
+pulse_.opacity = 200
+pulse_.priority = 10
+# End berry code block
+```
+
+## Advanced DSL Features
+
+### Templates
+
+The DSL supports two types of templates: regular templates (functions) and template animations (classes).
+
+#### Template Animation Transpilation
+
+Template animations create reusable animation classes extending `engine_proxy`:
+
+```berry
+# DSL Template Animation
+template animation shutter_effect {
+ param colors type palette nillable true
+ param duration type time min 0 max 3600 default 5 nillable false
+
+ set strip_len = strip_length()
+ color col = color_cycle(palette=colors, cycle_period=0)
+
+ animation shutter = beacon_animation(
+ color = col
+ beacon_size = strip_len / 2
+ )
+
+ sequence seq repeat forever {
+ play shutter for duration
+ col.next = 1
+ }
+
+ run seq
+}
+```
+
+**Transpiles to:**
+
+```berry
+class shutter_effect_animation : animation.engine_proxy
+ static var PARAMS = animation.enc_params({
+ "colors": {"type": "palette", "nillable": true},
+ "duration": {"type": "time", "min": 0, "max": 3600, "default": 5, "nillable": false}
+ })
+
+ def init(engine)
+ super(self).init(engine)
+
+ var strip_len_ = animation.strip_length(engine)
+ var col_ = animation.color_cycle(engine)
+ col_.palette = animation.create_closure_value(engine, def (engine) return self.colors end)
+ col_.cycle_period = 0
+
+ var shutter_ = animation.beacon_animation(engine)
+ shutter_.color = col_
+ shutter_.beacon_size = animation.create_closure_value(engine, def (engine) return animation.resolve(strip_len_) / 2 end)
+
+ var seq_ = animation.sequence_manager(engine, -1)
+ .push_play_step(shutter_, animation.resolve(self.duration))
+ .push_closure_step(def (engine) col_.next = 1 end)
+
+ self.add(seq_)
+ end
+end
+```
+
+**Key Features:**
+- Parameters accessed as `self.` and wrapped in closures
+- Constraints (min, max, default, nillable) encoded in PARAMS
+- Uses `self.add()` instead of `engine.add()`
+- Can be instantiated multiple times with different parameters
+
+#### Regular Template Transpilation
+
+Regular templates generate Berry functions:
+
+```berry
+# DSL Template
+template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+}
+```
+
+**Transpiles to:**
+
+```berry
+def pulse_effect_template(engine, color_, speed_)
+ var pulse_ = animation.pulsating_animation(engine)
+ pulse_.color = color_
+ pulse_.period = speed_
+ engine.add(pulse_)
+end
+
+animation.register_user_function('pulse_effect', pulse_effect_template)
+```
+
+#### Template vs Template Animation
+
+**Template Animation** (`template animation`):
+- Generates classes extending `engine_proxy`
+- Parameters accessed as `self.`
+- Supports parameter constraints (min, max, default, nillable)
+- Uses `self.add()` for composition
+- Can be instantiated multiple times
+
+**Regular Template** (`template`):
+- Generates functions
+- Parameters accessed as `_`
+- Uses `engine.add()` for execution
+- Called like functions
+
+### User-Defined Functions
+
+Register custom Berry functions for use in DSL. User functions must take `engine` as the first parameter, followed by any user-provided arguments:
+
+```berry
+# Define custom function in Berry - engine must be first parameter
+def custom_twinkle(engine, color, count, period)
+ var anim = animation.twinkle_animation(engine)
+ anim.color = color
+ anim.count = count
+ atml:parameter>
+
+ return anim
+end
+
+# Register the function for DSL use
+animation.register_user_function("twinkle", custom_twinkle)
+```
+
+```berry
+# Use in DSL - engine is automatically passed as first argument
+animation gold_twinkle = twinkle(0xFFD700, 8, 500ms)
+animation blue_twinkle = twinkle(blue, 12, 300ms)
+run gold_twinkle
+```
+
+**Important**: The DSL transpiler automatically passes `engine` as the first argument to all user functions. Your function signature must include `engine` as the first parameter, but DSL users don't need to provide it when calling the function.
+
+For comprehensive examples and best practices, see the **[User Functions Guide](USER_FUNCTIONS.md)**.
+
+### Event System
+
+Define event handlers that respond to triggers:
+
+```berry
+# Define animations for different states
+color normal = 0x000080
+color alert = 0xFF0000
+
+animation normal_state = solid(color=normal)
+animation alert_state = pulsating_animation(color=alert, period=500ms)
+
+# Event handlers
+on button_press {
+ run alert_state for 3s
+ run normal_state
+}
+
+on sensor_trigger {
+ run alert_state for 5s
+ wait 1s
+ run normal_state
+}
+
+# Default state
+run normal_state
+```
+
+### Nested Function Calls
+
+DSL supports nested function calls for complex compositions:
+
+```berry
+# Nested calls in animation definitions (now supported)
+animation complex = pulsating_animation(
+ color=red,
+ period=2s
+)
+
+# Nested calls in run statements
+sequence demo {
+ play pulsating_animation(color=blue, period=1s) for 10s
+}
+```
+
+## Error Handling
+
+The DSL compiler validates classes and parameters at transpilation time, catching errors before execution:
+
+```berry
+var invalid_dsl = "color red = #INVALID_COLOR\n"
+ "animation bad = unknown_function(red)\n"
+ "animation pulse = pulsating_animation(invalid_param=123)"
+
+try
+ animation_dsl.execute(invalid_dsl)
+except .. as e
+ print("DSL Error:", e)
+end
+```
+
+### Transpilation-Time Validation
+
+The DSL performs comprehensive validation during compilation:
+
+**Animation Factory Validation:**
+```berry
+# Error: Function doesn't exist
+animation bad = nonexistent_animation(color=red)
+# Transpiler error: "Animation factory function 'nonexistent_animation' does not exist"
+
+# Error: Function exists but doesn't create animation
+animation bad2 = math_function(value=10)
+# Transpiler error: "Function 'math_function' does not create an animation instance"
+```
+
+**Parameter Validation:**
+```berry
+# Error: Invalid parameter name in constructor
+animation pulse = pulsating_animation(invalid_param=123)
+# Transpiler error: "Parameter 'invalid_param' is not valid for pulsating_animation"
+
+# Error: Invalid parameter name in property assignment
+animation pulse = pulsating_animation(color=red, period=2s)
+pulse.wrong_arg = 15
+# Transpiler error: "Animation 'PulseAnimation' does not have parameter 'wrong_arg'"
+
+# Error: Parameter constraint violation
+animation comet = comet_animation(tail_length=-5)
+# Transpiler error: "Parameter 'tail_length' value -5 violates constraint: min=1"
+```
+
+**Color Provider Validation:**
+```berry
+# Error: Color provider doesn't exist
+color bad = nonexistent_color_provider(period=2s)
+# Transpiler error: "Color provider factory 'nonexistent_color_provider' does not exist"
+
+# Error: Function exists but doesn't create color provider
+color bad2 = pulsating_animation(color=red)
+# Transpiler error: "Function 'pulsating_animation' does not create a color provider instance"
+```
+
+**Reference Validation:**
+```berry
+# Error: Undefined color reference
+animation pulse = pulsating_animation(color=undefined_color)
+# Transpiler error: "Undefined reference: 'undefined_color'"
+
+# Error: Undefined animation reference in run statement
+run nonexistent_animation
+# Transpiler error: "Undefined reference 'nonexistent_animation' in run"
+
+# Error: Undefined animation reference in sequence
+sequence demo {
+ play nonexistent_animation for 5s
+}
+# Transpiler error: "Undefined reference 'nonexistent_animation' in sequence play"
+```
+
+**Function Call Safety Validation:**
+```berry
+# Error: Dangerous function creation in computed expression
+set strip_len3 = (strip_length() + 1) / 2
+# Transpiler error: "Function 'strip_length()' cannot be used in computed expressions.
+# This creates a new instance at each evaluation. Use either:
+# set var_name = strip_length() # Single function call
+# set computed = (existing_var + 1) / 2 # Computation with existing values"
+```
+
+**Why This Validation Exists:**
+The transpiler prevents dangerous patterns where functions that create instances are called inside computed expressions that get wrapped in closures. This would create a new instance every time the closure is evaluated, leading to:
+- Memory leaks
+- Performance degradation
+- Inconsistent behavior due to multiple timing states
+
+**Safe Alternative:**
+```berry
+# ✅ CORRECT: Separate function call from computation
+set strip_len = strip_length() # Single function call
+set strip_len3 = (strip_len + 1) / 2 # Computation with existing value
+```
+
+**Template Parameter Validation:**
+```berry
+# Error: Duplicate parameter names
+template bad_template {
+ param color type color
+ param color type number # Error: duplicate parameter name
+}
+# Transpiler error: "Duplicate parameter name 'color' in template"
+
+# Error: Reserved keyword as parameter name
+template reserved_template {
+ param animation type color # Error: conflicts with reserved keyword
+}
+# Transpiler error: "Parameter name 'animation' conflicts with reserved keyword"
+
+# Error: Built-in color name as parameter
+template color_template {
+ param red type number # Error: conflicts with built-in color
+}
+# Transpiler error: "Parameter name 'red' conflicts with built-in color name"
+
+# Error: Invalid type annotation
+template type_template {
+ param value type invalid_type # Error: invalid type
+}
+# Transpiler error: "Invalid parameter type 'invalid_type'. Valid types are: [...]"
+
+# Warning: Unused parameter (compilation succeeds)
+template unused_template {
+ param used_color type color
+ param unused_param type number # Warning: never used
+
+ animation test = solid(color=used_color)
+ run test
+}
+# Transpiler warning: "Template 'unused_template' parameter 'unused_param' is declared but never used"
+```
+
+### Error Categories
+
+- **Syntax errors**: Invalid DSL syntax (lexer/parser errors)
+- **Factory validation**: Non-existent or invalid animation/color provider factories
+- **Parameter validation**: Invalid parameter names in constructors or property assignments
+- **Template validation**: Invalid template parameter names, types, or usage patterns
+- **Constraint validation**: Parameter values that violate defined constraints (min/max, enums, types)
+- **Reference validation**: Using undefined colors, animations, or variables
+- **Type validation**: Incorrect parameter types or incompatible assignments
+- **Safety validation**: Dangerous patterns that could cause memory leaks or performance issues
+- **Runtime errors**: Errors during Berry code execution (rare with good validation)
+
+### Warning Categories
+
+The DSL transpiler also generates **warnings** that don't prevent compilation but indicate potential code quality issues:
+
+- **Unused parameters**: Template parameters that are declared but never used in the template body
+- **Code quality**: Suggestions for better coding practices
+
+**Warning Behavior:**
+- Warnings are included as comments in the generated Berry code
+- Compilation succeeds even with warnings present
+- Warnings help maintain code quality without being overly restrictive
+
+## Performance Considerations
+
+### DSL vs Programmatic Performance
+
+- **DSL compilation overhead**: ~10-50ms depending on complexity
+- **Generated code performance**: Identical to hand-written Berry code
+- **Memory usage**: DSL compiler uses temporary memory during compilation
+
+### Optimization Tips
+
+1. **Compile once, run many times**:
+ ```berry
+ var compiled = animation_dsl.compile(dsl_source)
+ var fn = compile(compiled)
+
+ # Run multiple times without recompilation
+ fn() # First execution
+ fn() # Subsequent executions are faster
+ ```
+
+2. **Use programmatic API for performance-critical code**:
+ ```berry
+ # DSL for high-level structure
+ animation_dsl.execute(
+ "sequence main {\n"
+ "play performance_critical_anim for 10s\n"
+ "}\n"
+ "run main"
+ )
+
+ # Programmatic for performance-critical animations
+ var performance_critical_anim = animation.create_optimized_animation()
+ ```
+
+## Integration Examples
+
+### With Tasmota Rules
+
+```berry
+# In autoexec.be
+import animation
+import animation_dsl
+
+def handle_rule_trigger(event)
+ if event == "motion"
+ animation_dsl.execute("color alert = 0xFF0000\n"
+ "animation alert_anim = pulsating_animation(color=alert, period=500ms)\n"
+ "run alert_anim for 5s")
+ elif event == "door"
+ animation_dsl.execute("color welcome = 0x00FF00\n"
+ "animation welcome_anim = breathe_animation(color=welcome, period=2s)\n"
+ "run welcome_anim for 8s")
+ end
+end
+
+# Register with Tasmota's rule system
+tasmota.add_rule("motion", handle_rule_trigger)
+```
+
+### With Web Interface
+
+```berry
+# Create web endpoints for DSL execution
+import webserver
+
+def web_execute_dsl()
+ var dsl_code = webserver.arg("dsl")
+ if dsl_code
+ try
+ animation_dsl.execute(dsl_code)
+ webserver.content_response("DSL executed successfully")
+ except .. as e
+ webserver.content_response(f"DSL Error: {e}")
+ end
+ else
+ webserver.content_response("No DSL code provided")
+ end
+end
+
+webserver.on("/execute_dsl", web_execute_dsl)
+```
+
+## Best Practices
+
+1. **Structure your DSL files**:
+ ```berry
+ # Strip configuration first
+ strip length 60
+
+ # Colors next
+ color red = 0xFF0000
+ color blue = 0x0000FF
+
+ # Animations with named parameters
+ animation red_solid = solid(color=red)
+ animation pulse_red = pulsating_animation(color=red, period=2s)
+
+ # Property assignments
+ pulse_red.priority = 10
+
+ # Sequences
+ sequence demo {
+ play pulse_red for 5s
+ }
+
+ # Execution last
+ run demo
+ ```
+
+2. **Use meaningful names**:
+ ```berry
+ # Good
+ color warning_red = 0xFF0000
+ animation door_alert = pulsating_animation(color=warning_red, period=500ms)
+
+ # Avoid
+ color c1 = 0xFF0000
+ animation a1 = pulsating_animation(color=c1, period=500ms)
+ ```
+
+3. **Comment your DSL**:
+ ```berry
+ # Security system colors
+ color normal_blue = 0x000080 # Idle state
+ color alert_red = 0xFF0000 # Alert state
+ color success_green = 0x00FF00 # Success state
+
+ # Main security animation sequence
+ sequence security_demo {
+ play solid(color=normal_blue) for 10s # Normal operation
+ play pulsating_animation(color=alert_red, period=500ms) for 3s # Alert
+ play breathe_animation(color=success_green, period=2s) for 5s # Success confirmation
+ }
+ ```
+
+4. **Organize complex projects**:
+ ```berry
+ # Load DSL modules
+ animation_dsl.load_file("colors.dsl") # Color definitions
+ animation_dsl.load_file("animations.dsl") # Animation library
+ animation_dsl.load_file("sequences.dsl") # Sequence definitions
+ animation_dsl.load_file("main.dsl") # Main execution
+ ```
+
+This completes the DSL reference documentation. The DSL provides a powerful, declarative way to create complex animations while maintaining the option to use the lightweight programmatic API when needed.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/EXAMPLES.md b/lib/libesp32/berry_animation/berry_animation_docs/EXAMPLES.md
new file mode 100644
index 000000000..1030ad2a9
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/EXAMPLES.md
@@ -0,0 +1,479 @@
+# Examples
+
+Essential examples showcasing the Tasmota Berry Animation Framework using DSL syntax.
+
+## Basic Animations
+
+### 1. Solid Color
+```berry
+color red = 0xFF0000
+animation red_solid = solid(color=red)
+run red_solid
+```
+
+### 2. Pulsing Effect
+```berry
+color blue = 0x0000FF
+animation blue_pulse = pulsating_animation(color=blue, period=2s)
+run blue_pulse
+```
+
+### 3. Moving Comet
+```berry
+color cyan = 0x00FFFF
+animation comet_trail = comet_animation(color=cyan, tail_length=8, speed=100ms, direction=1)
+run comet_trail
+```
+
+## Using Value Providers
+
+### 4. Breathing Effect
+```berry
+set breathing = smooth(min_value=50, max_value=255, period=3s)
+color white = 0xFFFFFF
+animation breathing_white = solid(color=white)
+breathing_white.opacity = breathing
+run breathing_white
+```
+
+### 5. Color Cycling
+```berry
+color rainbow = rainbow_color_provider(period=5s)
+animation rainbow_cycle = solid(color=rainbow)
+run rainbow_cycle
+```
+
+## Palette Animations
+
+### 6. Fire Effect
+```berry
+palette fire_colors = [
+ (0, 0x000000), # Black
+ (128, 0xFF0000), # Red
+ (192, 0xFF8000), # Orange
+ (255, 0xFFFF00) # Yellow
+]
+
+animation fire_effect = palette_animation(palette=fire_colors, period=2s, intensity=255)
+run fire_effect
+```
+
+## Sequences
+
+### 7. RGB Show
+```berry
+color red = 0xFF0000
+color green = 0x00FF00
+color blue = 0x0000FF
+
+animation red_anim = solid(color=red)
+animation green_anim = solid(color=green)
+animation blue_anim = solid(color=blue)
+
+sequence rgb_show {
+ play red_anim for 2s
+ play green_anim for 2s
+ play blue_anim for 2s
+}
+run rgb_show
+```
+
+### 8. Sunrise Sequence
+```berry
+color deep_blue = 0x000080
+color orange = 0xFFA500
+color yellow = 0xFFFF00
+
+animation night = solid(color=deep_blue)
+animation sunrise = pulsating_animation(color=orange, period=3s)
+animation day = solid(color=yellow)
+
+sequence sunrise_show {
+ log("Starting sunrise sequence")
+ play night for 3s
+ log("Night phase complete, starting sunrise")
+ play sunrise for 5s
+ log("Sunrise complete, switching to day")
+ play day for 3s
+ log("Sunrise sequence finished")
+}
+run sunrise_show
+```
+
+### 8.1. Variable Duration Sequences
+```berry
+# Define timing variables for consistent durations
+set short_duration = 2s
+set long_duration = 5s
+set fade_time = 1s
+
+animation red_anim = solid(color=red)
+animation green_anim = solid(color=green)
+animation blue_anim = solid(color=blue)
+
+sequence timed_show forever {
+ play red_anim for short_duration # Use variable duration
+ wait fade_time # Variable wait time
+ play green_anim for long_duration # Different variable duration
+ wait fade_time
+ play blue_anim for short_duration # Reuse timing variable
+}
+run timed_show
+```
+
+## Sequence Assignments
+
+### 9. Dynamic Property Changes
+```berry
+# Create oscillators for dynamic position
+set triangle_val = triangle(min_value=0, max_value=27, duration=5s)
+set cosine_val = cosine_osc(min_value=0, max_value=27, duration=5s)
+
+# Create color cycle
+palette eye_palette = [red, yellow, green, violet]
+color eye_color = color_cycle(palette=eye_palette, cycle_period=0)
+
+# Create beacon animation
+animation red_eye = beacon_animation(
+ color=eye_color
+ pos=cosine_val
+ beacon_size=3
+ slew_size=2
+ priority=10
+)
+
+# Sequence with property assignments
+sequence cylon_eye {
+ play red_eye for 3s
+ red_eye.pos = triangle_val # Change to triangle oscillator
+ play red_eye for 3s
+ red_eye.pos = cosine_val # Change back to cosine
+ eye_color.next = 1 # Advance to next color
+}
+run cylon_eye
+```
+
+### 10. Multiple Assignments in Sequence
+```berry
+set high_brightness = 255
+set low_brightness = 64
+color my_blue = 0x0000FF
+
+animation test = solid(color=red)
+test.opacity = high_brightness
+
+sequence demo {
+ play test for 1s
+ test.opacity = low_brightness # Dim the animation
+ test.color = my_blue # Change color to blue
+ play test for 1s
+ test.opacity = high_brightness # Brighten again
+ play test for 1s
+}
+run demo
+```
+
+### 11. Restart in Sequences
+```berry
+# Create oscillator and animation
+set wave_osc = triangle(min_value=0, max_value=29, period=4s)
+animation wave = beacon_animation(color=blue, pos=wave_osc, beacon_size=5)
+
+sequence sync_demo {
+ play wave for 3s
+ restart wave_osc # Restart oscillator time origin (if already started)
+ play wave for 3s # Wave starts from beginning again
+ restart wave # Restart animation time origin (if already started)
+ play wave for 3s
+}
+run sync_demo
+```
+
+### 12. Assignments in Repeat Blocks
+```berry
+set brightness = smooth(min_value=50, max_value=255, period=2s)
+animation pulse = pulsating_animation(color=white, period=1s)
+
+sequence breathing_cycle {
+ repeat 3 times {
+ play pulse for 500ms
+ pulse.opacity = brightness # Apply breathing effect
+ wait 200ms
+ pulse.opacity = 255 # Return to full brightness
+ }
+}
+run breathing_cycle
+```
+
+## User Functions in Computed Parameters
+
+### 13. Simple User Function
+```berry
+# Simple user function in computed parameter
+animation random_base = solid(color=blue, priority=10)
+random_base.opacity = rand_demo()
+run random_base
+```
+
+### 14. User Function with Math Operations
+```berry
+# Mix user functions with mathematical functions
+animation random_bounded = solid(
+ color=purple
+ opacity=max(50, min(255, rand_demo() + 100))
+ priority=15
+)
+run random_bounded
+```
+
+### 15. User Function in Arithmetic Expression
+```berry
+# Use user function in arithmetic expressions
+animation random_variation = solid(
+ color=cyan
+ opacity=abs(rand_demo() - 128) + 64
+ priority=12
+)
+run random_variation
+```
+
+See `anim_examples/user_functions_demo.anim` for a complete working example.
+
+## New Repeat System Examples
+
+### 16. Runtime Repeat with Forever Loop
+```berry
+color red = 0xFF0000
+color blue = 0x0000FF
+animation red_anim = solid(color=red)
+animation blue_anim = solid(color=blue)
+
+# Traditional syntax with repeat sub-sequence
+sequence cylon_effect {
+ repeat forever {
+ play red_anim for 1s
+ play blue_anim for 1s
+ }
+}
+
+# Alternative syntax - sequence with repeat modifier
+sequence cylon_effect_alt repeat forever {
+ play red_anim for 1s
+ play blue_anim for 1s
+}
+
+run cylon_effect
+```
+
+### 17. Nested Repeats (Multiplication)
+```berry
+color green = 0x00FF00
+color yellow = 0xFFFF00
+animation green_anim = solid(color=green)
+animation yellow_anim = solid(color=yellow)
+
+# Nested repeats: 3 × 2 = 6 total iterations
+sequence nested_pattern {
+ repeat 3 times {
+ repeat 2 times {
+ play green_anim for 200ms
+ play yellow_anim for 200ms
+ }
+ wait 500ms # Pause between outer iterations
+ }
+}
+run nested_pattern
+```
+
+### 18. Repeat with Property Assignments
+```berry
+set triangle_pos = triangle(min_value=0, max_value=29, period=3s)
+set cosine_pos = cosine_osc(min_value=0, max_value=29, period=3s)
+
+color eye_color = color_cycle(palette=[red, yellow, green, blue], cycle_period=0)
+animation moving_eye = beacon_animation(
+ color=eye_color
+ pos=triangle_pos
+ beacon_size=2
+ slew_size=1
+)
+
+sequence dynamic_cylon {
+ repeat 5 times {
+ play moving_eye for 2s
+ moving_eye.pos = cosine_pos # Switch to cosine movement
+ play moving_eye for 2s
+ moving_eye.pos = triangle_pos # Switch back to triangle
+ eye_color.next = 1 # Next color
+ }
+}
+run dynamic_cylon
+```
+
+## Advanced Examples
+
+### 19. Dynamic Position
+```berry
+strip length 60
+
+set moving_position = smooth(min_value=5, max_value=55, period=4s)
+color purple = 0x8000FF
+
+animation moving_pulse = beacon_animation(
+ color=purple,
+ position=moving_position,
+ beacon_size=3,
+ fade_size=2
+)
+run moving_pulse
+```
+
+### 20. Multi-Layer Effect
+```berry
+# Base layer - slow breathing
+set breathing = smooth(min_value=100, max_value=255, period=4s)
+color base_blue = 0x000080
+animation base_layer = solid(color=base_blue)
+base_layer.opacity = breathing
+
+# Accent layer - twinkling stars
+color star_white = 0xFFFFFF
+animation stars = twinkle_animation(color=star_white, count=5, period=800ms)
+stars.opacity = 150
+
+sequence layered_effect {
+ play base_layer for 10s
+ play stars for 10s
+}
+run layered_effect
+```
+
+## Tips for Creating Animations
+
+### Start Simple
+```berry
+# Begin with basic colors and effects
+color my_color = 0xFF0000
+animation simple = solid(color=my_color)
+run simple
+```
+
+### Use Meaningful Names
+```berry
+# Good - descriptive names
+color sunset_orange = 0xFF8C00
+animation evening_glow = pulsating_animation(color=sunset_orange, period=4s)
+
+# Avoid - unclear names
+color c1 = 0xFF8C00
+animation a1 = pulsating_animation(color=c1, period=4s)
+```
+
+### Test Incrementally
+1. Start with solid colors
+2. Add simple effects like pulse
+3. Experiment with sequences
+4. Combine multiple animations
+
+### Performance Considerations
+- Use sequences instead of multiple simultaneous animations
+- Reuse value providers with the `set` keyword
+- Keep animation periods reasonable (>500ms)
+- Limit palette sizes for memory efficiency
+
+## Template Examples
+
+Templates provide reusable, parameterized animation patterns that promote code reuse and maintainability.
+
+### 21. Simple Template
+```berry
+# Define a reusable blinking template
+template blink_effect {
+ param color type color
+ param speed
+ param intensity
+
+ animation blink = pulsating_animation(
+ color=color
+ period=speed
+ )
+ blink.opacity = intensity
+
+ run blink
+}
+
+# Use the template with different parameters
+blink_effect(red, 1s, 80%)
+blink_effect(blue, 500ms, 100%)
+```
+
+### 22. Multi-Animation Template
+```berry
+# Template that creates a comet chase effect
+template comet_chase {
+ param trail_color type color
+ param bg_color type color
+ param chase_speed
+ param tail_size
+
+ # Background layer
+ animation background = solid(color=bg_color)
+ background.priority = 1
+
+ # Comet effect layer
+ animation comet = comet_animation(
+ color=trail_color
+ tail_length=tail_size
+ speed=chase_speed
+ )
+ comet.priority = 10
+
+ run background
+ run comet
+}
+
+# Create different comet effects
+comet_chase(white, black, 1500ms, 8)
+```
+
+### 23. Template with Dynamic Colors
+```berry
+# Template using color cycling and breathing effects
+template breathing_rainbow {
+ param cycle_time
+ param breath_time
+ param base_brightness
+
+ # Create rainbow palette
+ palette rainbow = [
+ (0, red), (42, orange), (85, yellow)
+ (128, green), (170, blue), (213, purple), (255, red)
+ ]
+
+ # Create cycling rainbow color
+ color rainbow_cycle = color_cycle(
+ palette=rainbow
+ cycle_period=cycle_time
+ )
+
+ # Create breathing animation with rainbow colors
+ animation breath = pulsating_animation(
+ color=rainbow_cycle
+ period=breath_time
+ )
+ breath.opacity = base_brightness
+
+ run breath
+}
+
+# Use the rainbow breathing template
+breathing_rainbow(5s, 2s, 200)
+```
+
+## Next Steps
+
+- **[DSL Reference](DSL_REFERENCE.md)** - Complete language syntax
+- **[Troubleshooting](TROUBLESHOOTING.md)** - Common issues and solutions
+- **[Animation Development](ANIMATION_DEVELOPMENT.md)** - Creating custom animations
+
+Start with these examples and build your own amazing LED animations! 🎨✨
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/OSCILLATION_PATTERNS.md b/lib/libesp32/berry_animation/berry_animation_docs/OSCILLATION_PATTERNS.md
new file mode 100644
index 000000000..3b4a64e08
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/OSCILLATION_PATTERNS.md
@@ -0,0 +1,263 @@
+# Oscillation Patterns
+
+Quick reference for oscillation patterns used with value providers in the Berry Animation Framework.
+
+## Available Oscillation Patterns
+
+These waveform constants can be used with `oscillator_value`:
+
+| Constant | Value | Alias Functions | Behavior | Use Case |
+|----------|-------|-----------------|----------|----------|
+| `SAWTOOTH` | 1 | `linear`, `ramp` | Linear ramp up | Uniform motion |
+| `TRIANGLE` | 2 | `triangle` | Linear up then down | Sharp direction changes |
+| `SQUARE` | 3 | `square` | Alternating min/max | On/off effects |
+| `COSINE` | 4 | `smooth` | Smooth cosine wave | Natural oscillation |
+| `SINE` | 5 | `sine` | Pure sine wave | Classic wave motion |
+| `EASE_IN` | 6 | `ease_in` | Slow start, fast end | Smooth acceleration |
+| `EASE_OUT` | 7 | `ease_out` | Fast start, slow end | Smooth deceleration |
+| `ELASTIC` | 8 | `elastic` | Spring overshoot | Bouncy effects |
+| `BOUNCE` | 9 | `bounce` | Ball bouncing | Physics simulation |
+
+## DSL Usage
+
+### With Oscillator Value Provider
+```berry
+# Basic oscillator with different waveform types
+set breathing = oscillator_value(min_value=50, max_value=255, duration=3000, form=COSINE)
+set pulsing = ease_in(min_value=0, max_value=255, duration=2000)
+set bouncing = oscillator_value(min_value=10, max_value=240, duration=4000, form=TRIANGLE)
+```
+
+### Using Alias Functions
+```berry
+# These are equivalent to oscillator_value with specific forms
+set smooth_fade = smooth(min_value=50, max_value=255, duration=3000) # form=COSINE
+set sine_wave = sine_osc(min_value=50, max_value=255, duration=3000) # form=SINE
+set cosine_wave = cosine_osc(min_value=50, max_value=255, duration=3000) # form=COSINE (alias for smooth)
+set linear_sweep = linear(min_value=0, max_value=255, duration=2000) # form=SAWTOOTH
+set triangle_wave = triangle(min_value=10, max_value=240, duration=4000) # form=TRIANGLE
+```
+
+### In Animations
+```berry
+color blue = 0x0000FF
+set breathing = smooth(min_value=100, max_value=255, duration=4000)
+
+animation breathing_blue = solid(color=blue)
+breathing_blue.opacity = breathing
+run breathing_blue
+```
+
+## Pattern Characteristics
+
+### SAWTOOTH (Linear)
+- **Constant speed** throughout the cycle
+- **Sharp reset** from max back to min
+- **Best for**: Uniform sweeps, mechanical movements
+
+```
+Value
+ ^
+ | /| /|
+ | / | / |
+ | / | / |
+ | / | / |
+ | / | / |
+ |/ |/ |
+ +------+------+----> Time
+```
+
+```berry
+set linear_brightness = linear(min_value=0, max_value=255, duration=2000)
+```
+
+### COSINE (Smooth)
+- **Gradual acceleration** and deceleration
+- **Natural feeling** transitions
+- **Best for**: Breathing effects, gentle fades
+
+```berry
+set breathing_effect = smooth(min_value=50, max_value=255, duration=3000)
+```
+
+### SINE (Pure Wave)
+- **Classic sine wave** starting from minimum
+- **Smooth acceleration** and deceleration like cosine but phase-shifted
+- **Best for**: Wave effects, classic oscillations, audio-visual sync
+
+```
+Value
+ ^
+ | ___
+ | / \
+ | / \
+ | / \
+ | / \
+ | / \
+ | / \
+ | / \
+ |/ \___
+ +--------------------+----> Time
+```
+
+```berry
+set wave_motion = sine_osc(min_value=0, max_value=255, duration=2000)
+```
+
+### TRIANGLE
+- **Linear acceleration** to midpoint, then **linear deceleration**
+- **Sharp direction changes** at extremes
+- **Best for**: Bouncing effects, sharp transitions
+
+```
+Value
+ ^
+ | /\
+ | / \
+ | / \
+ | / \
+ | / \
+ | / \
+ |/ \
+ +-------------+----> Time
+```
+
+```berry
+set bounce_position = triangle(min_value=5, max_value=55, duration=2000)
+```
+
+### SQUARE
+- **Alternating** between min and max values
+- **Instant transitions** with configurable duty cycle
+- **Best for**: On/off effects, strobing, digital patterns
+
+```
+Value
+ ^
+ | +---+ +---+
+ | | | | |
+ | | | | |
+ | | +-----+ |
+ | | |
+ | | |
+ +-+-------------+----> Time
+```
+
+```berry
+set strobe_effect = square(min_value=0, max_value=255, duration=500, duty_cycle=25)
+```
+
+### EASE_IN
+- **Slow start**, **fast finish**
+- **Smooth acceleration** curve
+- **Best for**: Starting animations, building intensity
+
+```berry
+set accelerating = ease_in(min_value=0, max_value=255, duration=3000)
+```
+
+### EASE_OUT
+- **Fast start**, **slow finish**
+- **Smooth deceleration** curve
+- **Best for**: Ending animations, gentle stops
+
+```berry
+set decelerating = ease_out(min_value=255, max_value=0, duration=3000)
+```
+
+## Value Progression Examples
+
+For a cycle from 0 to 100 over 2000ms:
+
+| Time | SAWTOOTH | COSINE | SINE | TRIANGLE | EASE_IN | EASE_OUT |
+|------|----------|--------|------|----------|---------|----------|
+| 0ms | 0 | 0 | 0 | 0 | 0 | 0 |
+| 500ms| 25 | 15 | 50 | 50 | 6 | 44 |
+| 1000ms| 50 | 50 | 100 | 100 | 25 | 75 |
+| 1500ms| 75 | 85 | 50 | 50 | 56 | 94 |
+| 2000ms| 100 | 100 | 0 | 0 | 100 | 100 |
+
+## Common Patterns
+
+### Breathing Effect
+```berry
+color soft_white = 0xC0C0C0
+set breathing = smooth(min_value=80, max_value=255, duration=4000)
+
+animation breathing_light = solid(color=soft_white)
+breathing_light.opacity = breathing
+run breathing_light
+```
+
+### Position Sweep
+```berry
+strip length 60
+color red = 0xFF0000
+set sweeping_position = linear(min_value=0, max_value=59, duration=3000)
+
+animation position_sweep = beacon_animation(
+ color=red,
+ position=sweeping_position,
+ beacon_size=3,
+ fade_size=1
+)
+run position_sweep
+```
+
+### Wave Motion
+```berry
+color purple = 0x8000FF
+set wave_brightness = sine(min_value=50, max_value=255, duration=2500)
+
+animation wave_effect = solid(color=purple)
+wave_effect.opacity = wave_brightness
+run wave_effect
+```
+
+### Bouncing Effect
+```berry
+color green = 0x00FF00
+set bounce_size = triangle(min_value=1, max_value=8, duration=1000)
+
+animation bouncing_pulse = beacon_animation(
+ color=green,
+ position=30,
+ beacon_size=bounce_size,
+ fade_size=1
+)
+run bouncing_pulse
+```
+
+### Accelerating Fade
+```berry
+color blue = 0x0000FF
+set fade_in = ease_in(min_value=0, max_value=255, duration=5000)
+
+animation accelerating_fade = solid(color=blue)
+accelerating_fade.opacity = fade_in
+run accelerating_fade
+```
+
+### Strobe Effect
+```berry
+color white = 0xFFFFFF
+set strobe_pattern = square(min_value=0, max_value=255, duration=200, duty_cycle=10)
+
+animation strobe_light = solid(color=white)
+strobe_light.opacity = strobe_pattern
+run strobe_light
+```
+
+## Tips
+
+- **COSINE (smooth)**: Most natural for breathing and gentle effects
+- **SINE**: Classic wave motion, perfect for audio-visual sync and pure oscillations
+- **SAWTOOTH (linear)**: Best for consistent sweeps and mechanical movements
+- **TRIANGLE**: Creates sharp, bouncing transitions
+- **EASE_IN**: Perfect for building up intensity
+- **EASE_OUT**: Ideal for gentle fade-outs
+- **ELASTIC**: Spring-like effects with overshoot
+- **BOUNCE**: Physics-based bouncing effects
+- **SQUARE**: Good for on/off blinking effects
+
+Choose the oscillation pattern that matches the feeling you want to create in your animation.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/QUICK_START.md b/lib/libesp32/berry_animation/berry_animation_docs/QUICK_START.md
new file mode 100644
index 000000000..de38dcf89
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/QUICK_START.md
@@ -0,0 +1,257 @@
+# Quick Start Guide
+
+Get up and running with the Berry Animation Framework in 5 minutes using the DSL!
+
+## Prerequisites
+
+- Tasmota device with Berry support
+- Addressable LED strip (WS2812, SK6812, etc.)
+
+## Step 1: Your First Animation
+
+Create a simple pulsing red light:
+
+```berry
+# Define colors
+color bordeaux = 0x6F2C4F
+
+# Create pulsing animation
+animation pulse_bordeaux = pulsating_animation(color=bordeaux, period=3s)
+
+# Run it
+run pulse_bordeaux
+```
+
+## Step 2: Color Cycling
+
+Create smooth color transitions:
+
+```berry
+# Use predefined rainbow palette
+animation rainbow_cycle = rich_palette(
+ palette=PALETTE_RAINBOW
+ cycle_period=5s
+ transition_type=1
+)
+
+run rainbow_cycle
+```
+
+## Step 3: Custom Palettes
+
+Create your own color palettes:
+
+```berry
+# Define a sunset palette
+palette sunset = [
+ (0, 0x191970) # Midnight blue
+ (64, purple) # Purple
+ (128, 0xFF69B4) # Hot pink
+ (192, orange) # Orange
+ (255, yellow) # Yellow
+]
+
+# Create palette animation
+animation sunset_glow = rich_palette(
+ palette=sunset
+ cycle_period=8s
+ transition_type=1
+)
+
+run sunset_glow
+```
+
+## Step 4: Sequences
+
+Create complex shows with sequences:
+
+```berry
+animation red_pulse = pulsating_animation(color=red, period=2s)
+animation green_pulse = pulsating_animation(color=green, period=2s)
+animation blue_pulse = pulsating_animation(color=blue, period=2s)
+
+sequence rgb_show {
+ play red_pulse for 3s
+ wait 500ms
+ play green_pulse for 3s
+ wait 500ms
+ play blue_pulse for 3s
+
+ repeat 2 times {
+ play red_pulse for 1s
+ play green_pulse for 1s
+ play blue_pulse for 1s
+ }
+}
+
+run rgb_show
+```
+
+**Pro Tip: Variable Durations**
+Use variables for consistent timing:
+
+```berry
+# Define timing variables
+set short_time = 1s
+set long_time = 3s
+
+sequence timed_show {
+ play red_pulse for long_time # Use variable duration
+ wait 500ms
+ play green_pulse for short_time # Different timing
+ play blue_pulse for long_time # Reuse timing
+}
+```
+
+## Step 5: Dynamic Effects
+
+Add movement and variation to your animations:
+
+```berry
+# Breathing effect with smooth oscillation
+animation breathing = pulsating_animation(
+ color=blue
+ min_brightness=20%
+ max_brightness=100%
+ period=4s
+)
+
+# Moving comet effect
+animation comet = comet_animation(
+ color=white
+ tail_length=8
+ speed=2000
+)
+
+# Twinkling effect
+animation sparkles = twinkle_animation(
+ color=white
+ count=8
+ period=800ms
+)
+
+run breathing
+```
+
+## Common Patterns
+
+### Fire Effect
+```berry
+animation fire = rich_palette(
+ palette=PALETTE_FIRE
+ cycle_period=2s
+ transition_type=1
+)
+
+run fire
+```
+
+## Loading DSL Files
+
+Save your DSL code in `.anim` files and load them:
+
+```berry
+import animation
+
+# Load DSL file
+var runtime = animation.load_dsl_file("my_animation.anim")
+```
+
+## Templates - Reusable Animation Patterns
+
+### Template Animations
+
+Template animations create reusable animation classes with parameters:
+
+```berry
+# Define a template animation with constraints
+template animation shutter_effect {
+ param colors type palette nillable true
+ param duration type time min 0 max 3600 default 5 nillable false
+
+ set strip_len = strip_length()
+ color col = color_cycle(palette=colors, cycle_period=0)
+
+ animation shutter = beacon_animation(
+ color = col
+ beacon_size = strip_len / 2
+ )
+
+ sequence seq repeat forever {
+ play shutter for duration
+ col.next = 1
+ }
+
+ run seq
+}
+
+# Create multiple instances with different parameters
+palette rainbow = [red, orange, yellow, green, blue]
+animation shutter1 = shutter_effect(colors=rainbow, duration=2s)
+animation shutter2 = shutter_effect(colors=rainbow, duration=5s)
+
+run shutter1
+run shutter2
+```
+
+**Template Animation Features:**
+- **Reusable Classes** - Create multiple instances with different parameters
+- **Parameter Constraints** - min, max, default, nillable values
+- **Composition** - Combine multiple animations and sequences
+- **Type Safe** - Parameter type checking
+- **Implicit Parameters** - Automatically inherit parameters from base classes (name, priority, duration, loop, opacity, color, is_running)
+
+### Regular Templates
+
+Regular templates generate functions for simpler use cases:
+
+```berry
+template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+}
+
+# Use the template
+pulse_effect(red, 2s)
+pulse_effect(blue, 1s)
+```
+
+## User-Defined Functions (Advanced)
+
+For complex logic, create custom functions in Berry:
+
+```berry
+# Define custom function - engine must be first parameter
+def my_twinkle(engine, color, count, period)
+ var anim = animation.twinkle_animation(engine)
+ anim.color = color
+ anim.count = count
+ anim.period = period
+ return anim
+end
+
+# Register for DSL use
+animation.register_user_function("twinkle", my_twinkle)
+```
+
+```berry
+# Use in DSL - engine is automatically passed
+animation gold_twinkles = twinkle(0xFFD700, 8, 500ms)
+run gold_twinkles
+```
+
+**Note**: The DSL automatically passes `engine` as the first argument to user functions.
+
+## Next Steps
+
+- **[DSL Reference](DSL_REFERENCE.md)** - Complete DSL syntax and features
+- **[User Functions](USER_FUNCTIONS.md)** - Create custom animation functions
+- **[Examples](EXAMPLES.md)** - More complex animation examples
+- **[Animation Class Hierarchy](ANIMATION_CLASS_HIERARCHY.md)** - All available animations and parameters
+- **[Oscillation Patterns](OSCILLATION_PATTERNS.md)** - Dynamic value patterns
+- **[Troubleshooting](TROUBLESHOOTING.md)** - Common issues and solutions
+
+Happy animating! 🎨✨
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/TRANSPILER_ARCHITECTURE.md b/lib/libesp32/berry_animation/berry_animation_docs/TRANSPILER_ARCHITECTURE.md
new file mode 100644
index 000000000..5c4797f85
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/TRANSPILER_ARCHITECTURE.md
@@ -0,0 +1,858 @@
+# DSL Transpiler Architecture
+
+This document provides a detailed overview of the Berry Animation DSL transpiler architecture, including the core processing flow and expression processing chain.
+
+## Overview
+
+The DSL transpiler (`transpiler.be`) converts Animation DSL code into executable Berry code. It uses a **ultra-simplified single-pass architecture** with comprehensive validation and code generation capabilities. The refactored transpiler emphasizes simplicity, robustness, and maintainability while providing extensive compile-time validation.
+
+### Single-Pass Architecture Clarification
+
+The transpiler is truly **single-pass** - it processes the token stream once from start to finish. When the documentation mentions "sequential steps" (like in template processing), these refer to **sequential operations within the single pass**, not separate passes over the data. For example:
+
+- Template processing collects parameters, then collects body tokens **sequentially** in one pass
+- Expression transformation handles mathematical functions, then user variables **sequentially** in one operation
+- The transpiler never backtracks or re-processes the same tokens multiple times
+
+## Core Processing Flow
+
+The transpiler follows an **ultra-simplified single-pass architecture** with the following main flow:
+
+```
+transpile()
+├── add("import animation")
+├── while !at_end()
+│ └── process_statement()
+│ ├── Handle comments (preserve in output)
+│ ├── Skip whitespace/newlines
+│ ├── Auto-initialize strip if needed
+│ ├── process_color()
+│ │ ├── validate_user_name()
+│ │ ├── _validate_color_provider_factory_exists()
+│ │ └── _process_named_arguments_for_color_provider()
+│ ├── process_palette()
+│ │ ├── validate_user_name()
+│ │ ├── Detect tuple vs alternative syntax
+│ │ └── process_palette_color() (strict validation)
+│ ├── process_animation()
+│ │ ├── validate_user_name()
+│ │ ├── _validate_animation_factory_creates_animation()
+│ │ └── _process_named_arguments_for_animation()
+│ ├── process_set()
+│ │ ├── validate_user_name()
+│ │ └── process_value()
+│ ├── process_template()
+│ │ ├── validate_user_name()
+│ │ ├── Collect parameters with type annotations
+│ │ ├── Collect body tokens
+│ │ └── generate_template_function()
+│ ├── process_sequence()
+│ │ ├── validate_user_name()
+│ │ ├── Parse repeat syntax (multiple variants)
+│ │ └── process_sequence_statement() (fluent interface)
+│ │ ├── process_play_statement_fluent()
+│ │ ├── process_wait_statement_fluent()
+│ │ ├── process_log_statement_fluent()
+│ │ ├── process_restart_statement_fluent()
+│ │ └── process_sequence_assignment_fluent()
+│ ├── process_import() (direct Berry import generation)
+│ ├── process_event_handler() (basic event system support)
+│ ├── process_berry_code_block() (embed arbitrary Berry code)
+│ ├── process_run() (collect for single engine.run())
+│ └── process_property_assignment()
+└── generate_engine_start() (single call for all run statements)
+```
+
+### Statement Processing Details
+
+#### Color Processing
+```
+process_color()
+├── expect_identifier() → color name
+├── validate_user_name() → check against reserved names
+├── expect_assign() → '='
+├── Check if function call (color provider)
+│ ├── Check template_definitions first
+│ ├── _validate_color_provider_factory_exists()
+│ ├── add("var name_ = animation.func(engine)")
+│ ├── Track in symbol_table for validation
+│ └── _process_named_arguments_for_color_provider()
+└── OR process_value() → static color value with symbol tracking
+```
+
+#### Animation Processing
+```
+process_animation()
+├── expect_identifier() → animation name
+├── validate_user_name() → check against reserved names
+├── expect_assign() → '='
+├── Check if function call (animation factory)
+│ ├── Check template_definitions first
+│ ├── _validate_animation_factory_creates_animation()
+│ ├── add("var name_ = animation.func(engine)")
+│ ├── Track in symbol_table for validation
+│ └── _process_named_arguments_for_animation()
+└── OR process_value() → reference or literal with symbol tracking
+```
+
+#### Sequence Processing (Enhanced)
+```
+process_sequence()
+├── expect_identifier() → sequence name
+├── validate_user_name() → check against reserved names
+├── Track in sequence_names and symbol_table
+├── Parse multiple repeat syntaxes:
+│ ├── "sequence name repeat N times { ... }"
+│ ├── "sequence name forever { ... }"
+│ ├── "sequence name N times { ... }"
+│ └── "sequence name { repeat ... }"
+├── expect_left_brace() → '{'
+├── add("var name_ = animation.sequence_manager(engine, repeat_count)")
+├── while !check_right_brace()
+│ └── process_sequence_statement() (fluent interface)
+└── expect_right_brace() → '}'
+```
+
+#### Template Processing
+```
+process_template()
+├── expect_identifier() → template name
+├── validate_user_name() → check against reserved names
+├── expect_left_brace() → '{'
+├── Sequential step 1: collect parameters with type annotations
+├── Sequential step 2: collect body tokens
+├── expect_right_brace() → '}'
+├── Store in template_definitions
+├── generate_template_function()
+│ ├── Create new transpiler instance for body
+│ ├── Transpile body with fresh symbol table
+│ ├── Generate Berry function with engine parameter
+│ └── Register as user function
+└── Track in symbol_table as "template"
+
+process_template_animation()
+├── expect_identifier() → template animation name
+├── validate_user_name() → check against reserved names
+├── expect_left_brace() → '{'
+├── Sequential step 1: collect parameters with constraints (type, min, max, default)
+├── Sequential step 2: collect body tokens
+├── expect_right_brace() → '}'
+├── generate_template_animation_class()
+│ ├── Generate class extending engine_proxy
+│ ├── Generate PARAMS with encode_constraints
+│ ├── Create new transpiler instance for body
+│ ├── Set template_animation_params for special handling
+│ │ ├── Add user-defined parameters
+│ │ └── Add inherited parameters from engine_proxy hierarchy (dynamic discovery)
+│ ├── Transpile body with self.param references
+│ └── Use self.add() instead of engine.add()
+└── Track in symbol_table as "template"
+
+### Implicit Parameters in Template Animations
+
+Template animations automatically inherit parameters from the `engine_proxy` class hierarchy. The transpiler dynamically discovers these parameters at compile time:
+
+**Dynamic Parameter Discovery:**
+```
+_add_inherited_params_to_template(template_params_map)
+├── Create temporary engine_proxy instance
+├── Walk up class hierarchy using introspection
+├── For each class with PARAMS:
+│ └── Add all parameter names to template_params_map
+└── Fallback to static list if instance creation fails
+```
+
+**Inherited Parameters (from Animation and ParameterizedObject):**
+- `id` (string, default: "animation")
+- `priority` (int, default: 10)
+- `duration` (int, default: 0)
+- `loop` (bool, default: false)
+- `opacity` (int, default: 255)
+- `color` (int, default: 0)
+- `is_running` (bool, default: false)
+
+**Parameter Resolution Order:**
+1. Check if identifier is in `template_animation_params` (includes both user-defined and inherited)
+2. If found, resolve as `self.` (template animation parameter)
+3. Otherwise, check symbol table for user-defined variables
+4. If not found, raise "Unknown identifier" error
+
+This allows template animations to use inherited parameters like `duration` and `opacity` without explicit declaration, while still maintaining type safety and validation.
+```
+
+## Expression Processing Chain
+
+The transpiler uses a **unified recursive descent parser** for expressions with **raw mode support** for closure contexts:
+
+```
+process_value(context)
+└── process_additive_expression(context, is_top_level=true, raw_mode=false)
+ ├── process_multiplicative_expression(context, is_top_level, raw_mode)
+ │ ├── process_unary_expression(context, is_top_level, raw_mode)
+ │ │ └── process_primary_expression(context, is_top_level, raw_mode)
+ │ │ ├── Parenthesized expression → recursive call
+ │ │ ├── Function call handling:
+ │ │ │ ├── Raw mode: mathematical functions → animation._math.method()
+ │ │ │ ├── Raw mode: template calls → template_func(self.engine, ...)
+ │ │ │ ├── Regular mode: process_function_call() or process_nested_function_call()
+ │ │ │ └── Simple function detection → _is_simple_function_call()
+ │ │ ├── Color literal → convert_color() (enhanced ARGB support)
+ │ │ ├── Time literal → process_time_value() (with variable support)
+ │ │ ├── Percentage → process_percentage_value()
+ │ │ ├── Number literal → return as-is
+ │ │ ├── String literal → quote and return
+ │ │ ├── Array literal → process_array_literal() (not in raw mode)
+ │ │ ├── Identifier → enhanced symbol resolution
+ │ │ │ ├── Object property → "obj.prop" with validation
+ │ │ │ ├── User function → _process_user_function_call()
+ │ │ │ ├── Palette constant → "animation.PALETTE_RAINBOW" etc.
+ │ │ │ ├── Named color → get_named_color_value()
+ │ │ │ └── Consolidated symbol resolution → resolve_symbol_reference()
+ │ │ └── Boolean keywords → true/false
+ │ └── Handle unary operators (-, +)
+ └── Handle multiplicative operators (*, /)
+└── Handle additive operators (+, -)
+└── Closure wrapping logic:
+ ├── Skip in raw_mode
+ ├── Special handling for repeat_count context
+ ├── is_computed_expression_string() detection
+ └── create_computation_closure_from_string()
+```
+
+### Expression Context Handling
+
+The expression processor handles different contexts with **enhanced validation and processing**:
+
+- **`"color"`** - Color definitions and assignments
+- **`"animation"`** - Animation definitions and assignments
+- **`"argument"`** - Function call arguments
+- **`"property"`** - Property assignments with validation
+- **`"variable"`** - Variable assignments with type tracking
+- **`"repeat_count"`** - Sequence repeat counts (special closure handling)
+- **`"time"`** - Time value processing with variable support
+- **`"array_element"`** - Array literal elements
+- **`"event_param"`** - Event handler parameters
+- **`"expression"`** - Raw expression context (for closures)
+
+### Computed Expression Detection (Enhanced)
+
+The transpiler automatically detects computed expressions that need closures with **improved accuracy**:
+
+```
+is_computed_expression_string(expr_str)
+├── Check for arithmetic operators (+, -, *, /) with spaces
+├── Check for function calls (excluding simple functions)
+│ ├── Extract function name before parenthesis
+│ ├── Use _is_simple_function_call() to filter
+│ └── Only mark complex functions as needing closures
+├── Exclude simple parenthesized literals like (-1)
+└── Return true only for actual computations
+
+create_computation_closure_from_string(expr_str)
+├── transform_expression_for_closure()
+│ ├── Sequential step 1: Transform mathematical functions → animation._math.method()
+│ │ ├── Use dynamic introspection with is_math_method()
+│ │ ├── Check for existing "self." prefix /// TODO NOT SURE IT STILL EXISTS
+│ │ └── Only transform if not already prefixed
+│ ├── Sequential step 2: Transform user variables → animation.resolve(var_)
+│ │ ├── Find variables ending with _
+│ │ ├── Check for existing resolve() calls
+│ │ ├── Avoid double-wrapping
+│ │ └── Handle identifier character boundaries
+│ └── Clean up extra spaces
+└── Return "animation.create_closure_value(engine, closure)"
+
+is_anonymous_function(expr_str)
+├── Check if expression starts with "(def "
+├── Check if expression ends with ")(engine)"
+└── Skip closure wrapping for already-wrapped functions
+```
+
+## Enhanced Symbol Table System
+
+The transpiler uses a sophisticated **SymbolTable** system for holistic symbol management and caching. This system provides dynamic symbol detection, type validation, and conflict prevention.
+
+### SymbolTable Architecture
+
+The symbol table consists of two main classes in `symbol_table.be`:
+
+#### SymbolEntry Class
+```
+SymbolEntry
+├── name: string # Symbol name
+├── type: string # Symbol type classification
+├── instance: object # Actual instance for validation
+├── takes_args: boolean # Whether symbol accepts arguments
+├── arg_type: string # "positional", "named", or "none"
+└── is_builtin: boolean # Whether this is a built-in symbol from animation module
+```
+
+**Symbol Types Supported:**
+- `"palette"` - Palette objects like `PALETTE_RAINBOW` (bytes instances)
+- `"constant"` - Integer constants like `LINEAR`, `SINE`, `COSINE`
+- `"math_function"` - Mathematical functions like `max`, `min`
+- `"user_function"` - User-defined functions registered at runtime
+- `"value_provider"` - Value provider constructors
+- `"animation"` - Animation constructors
+- `"color"` - Color definitions and providers
+- `"variable"` - User-defined variables
+- `"sequence"` - Sequence definitions
+- `"template"` - Template definitions
+
+#### SymbolTable Class
+```
+SymbolTable
+├── entries: map # Map of name -> SymbolEntry
+├── mock_engine: MockEngine # For validation testing
+├── Dynamic Detection Methods:
+│ ├── _detect_and_cache_symbol() # On-demand symbol detection
+│ ├── contains() # Existence check with auto-detection
+│ └── get() # Retrieval with auto-detection
+├── Creation Methods:
+│ ├── create_palette()
+│ ├── create_color()
+│ ├── create_animation()
+│ ├── create_value_provider()
+│ ├── create_variable()
+│ ├── create_sequence()
+│ └── create_template()
+└── Validation Methods:
+ ├── symbol_exists()
+ ├── get_reference()
+ └── takes_args() / takes_positional_args() / takes_named_args()
+```
+
+### Dynamic Symbol Detection
+
+The SymbolTable uses **lazy detection** to identify and cache symbols as they are encountered:
+
+```
+_detect_and_cache_symbol(name)
+├── Check if already cached → return cached entry
+├── Check animation module using introspection:
+│ ├── Detect bytes() instances → create_palette()
+│ ├── Detect integer constants (type == "int") → create_constant()
+│ ├── Detect math functions in animation._math → create_math_function()
+│ ├── Detect user functions via animation.is_user_function() → create_user_function()
+│ ├── Test constructors with MockEngine:
+│ │ ├── Create instance with mock_engine
+│ │ ├── Check isinstance(instance, animation.value_provider) → create_value_provider()
+│ │ └── Check isinstance(instance, animation.animation) → create_animation()
+│ └── Cache result for future lookups
+└── Return nil if not found (handled as user-defined)
+```
+
+### Symbol Type Detection Examples
+
+**Palette Detection:**
+```berry
+# DSL: animation rainbow = rich_palette_animation(palette=PALETTE_RAINBOW)
+# Detection: PALETTE_RAINBOW exists in animation module, isinstance(obj, bytes)
+# Result: SymbolEntry("PALETTE_RAINBOW", "palette", bytes_instance, true)
+# Reference: "animation.PALETTE_RAINBOW"
+```
+
+**Constant Detection:**
+```berry
+# DSL: animation wave = wave_animation(waveform=LINEAR)
+# Detection: LINEAR exists in animation module, type(LINEAR) == "int"
+# Result: SymbolEntry("LINEAR", "constant", 1, true)
+# Reference: "animation.LINEAR"
+```
+
+**Math Function Detection:**
+```berry
+# DSL: animation.opacity = max(100, min(255, brightness))
+# Detection: max exists in animation._math, is callable
+# Result: SymbolEntry("max", "math_function", nil, true)
+# Reference: "animation.max" (transformed to "animation._math.max" in closures)
+```
+
+**Value Provider Detection:**
+```berry
+# DSL: set oscillator = triangle(min_value=0, max_value=100, period=2s)
+# Detection: triangle(mock_engine) creates instance, isinstance(instance, animation.value_provider)
+# Result: SymbolEntry("triangle", "value_provider", instance, true)
+# Reference: "animation.triangle"
+```
+
+**User Function Detection:**
+```berry
+# DSL: animation demo = rand_demo(color=red)
+# Detection: animation.is_user_function("rand_demo") returns true
+# Result: SymbolEntry("rand_demo", "user_function", nil, true)
+# Reference: "rand_demo_" (handled specially in function calls)
+```
+
+### Symbol Conflict Prevention
+
+The SymbolTable prevents symbol redefinition conflicts:
+
+```
+add(name, entry)
+├── Check for built-in symbol conflicts:
+│ ├── _detect_and_cache_symbol(name)
+│ └── Raise "symbol_redefinition_error" if types differ
+├── Check existing user-defined symbols:
+│ ├── Compare entry.type with existing.type
+│ └── Raise "symbol_redefinition_error" if types differ
+├── Allow same-type updates (reassignment)
+└── Return entry for method chaining
+```
+
+**Example Conflict Detection:**
+```berry
+# This would raise an error:
+color max = 0xFF0000 # Conflicts with built-in math function "max"
+
+# This would also raise an error:
+color red = 0xFF0000
+animation red = solid(color=blue) # Redefining "red" as different type
+```
+
+### Integration with Transpiler
+
+The SymbolTable integrates seamlessly with the transpiler's processing flow:
+
+### Performance Optimizations
+
+**Caching Strategy:**
+- **Lazy Detection**: Symbols detected only when first encountered
+- **Instance Reuse**: MockEngine instances reused for validation
+- **Introspection Caching**: Built-in symbol detection cached permanently
+
+**Memory Efficiency:**
+- **Minimal Storage**: Only essential information stored per symbol
+- **Shared MockEngine**: Single MockEngine instance for all validation
+- **Reference Counting**: Automatic cleanup of unused entries
+
+### MockEngine Integration
+
+The SymbolTable uses a lightweight MockEngine for constructor validation:
+
+```
+MockEngine
+├── time_ms: 0 # Mock time for validation
+├── get_strip_length(): 30 # Default strip length
+└── Minimal interface for instance creation testing
+```
+
+**Usage in Detection:**
+```berry
+# Test if function creates value provider
+try
+ var instance = factory_func(self.mock_engine)
+ if isinstance(instance, animation.value_provider)
+ return SymbolEntry.create_value_provider(name, instance, animation.value_provider)
+ end
+except .. as e, msg
+ # Constructor failed - not a valid provider
+end
+```
+
+## Validation System (Comprehensive)
+
+The transpiler includes **extensive compile-time validation** with robust error handling:
+
+### Factory Function Validation (Simplified using SymbolTable)
+```
+_validate_animation_factory_exists(func_name)
+├── Skip validation for mathematical functions
+├── Use symbol_table.get(func_name) for dynamic detection
+└── Return true if entry exists (any callable function is valid)
+
+_validate_animation_factory_creates_animation(func_name)
+├── Use symbol_table.get(func_name) for dynamic detection
+└── Return true if entry.type == "animation"
+
+_validate_color_provider_factory_onsts(func_name)
+├── Use symbol_table.get(func_name) for dynamic detection
+└── Return true if entry exists (any callable function is valid)
+
+_validate_value_provider_factory_exists(func_name)
+├── Use symbol_table.get(func_name) for dynamic detection
+└── Return true if entry.type == "value_provider"
+```
+
+### Parameter Validation (Real-time)
+```
+_validate_single_parameter(func_name, param_name, animation_instance)
+├── Use introspection to check if parameter exists
+├── Call instance.has_param(param_name) for validation
+├── Report detailed error messages with line numbers
+├── Validate immediately as parameters are parsed
+└── Graceful error handling to ensure transpiler robustness
+
+_create_instance_for_validation(func_name) - Simplified using SymbolTable
+├── Use symbol_table.get(func_name) for dynamic detection
+└── Return entry.instance if available, nil otherwise
+```
+
+### Reference Validation (Simplified using SymbolTable)
+```
+resolve_symbol_reference(name) - Simplified using SymbolTable
+└── Use symbol_table.get_reference(name) for all symbol resolution
+
+validate_symbol_reference(name, context) - With error reporting
+├── Use symbol_exists() to check symbol_table
+├── Report detailed error with context information
+└── Return validation status
+
+symbol_exists(name) - Simplified existence check
+└── Use symbol_table.symbol_exists(name) for unified checking
+
+_validate_value_provider_reference(object_name, context) - Simplified
+├── Check symbol_exists() using symbol_table
+├── Use symbol_table.get(name) for type information
+├── Check entry.type == "value_provider" || entry.type == "animation"
+└── Report detailed error messages for invalid types
+```
+
+### User Name Validation (Reserved Names)
+```
+validate_user_name(name, definition_type)
+├── Check against predefined color names
+├── Check against DSL statement keywords
+├── Report conflicts with suggestions for alternatives
+└── Prevent redefinition of reserved identifiers
+```
+
+### Value Provider Validation (New)
+```
+_validate_value_provider_reference(object_name, context)
+├── Check if symbol exists using validate_symbol_reference()
+├── Check symbol_table markers for type information
+├── Validate instance types using isinstance()
+├── Ensure only value providers/animations can be restarted
+└── Provide detailed error messages for invalid types
+```
+
+## Code Generation Patterns
+
+### Engine-First Pattern (Consistent)
+All factory functions use the engine-first pattern with **automatic strip initialization**:
+```berry
+# DSL: animation pulse = pulsating_animation(color=red, period=2s)
+# Generated:
+# Auto-generated strip initialization (using Tasmota configuration)
+var engine = animation.init_strip()
+
+var pulse_ = animation.pulsating_animation(engine)
+pulse_.color = animation.red
+pulse_.period = 2000
+```
+
+**Template-Only Exception**: Files containing only template definitions skip engine initialization and `engine.run()` generation, producing pure function libraries.
+
+### Symbol Resolution (Consolidated)
+The transpiler resolves symbols at compile time using **unified resolution logic** based on the `is_builtin` flag:
+```berry
+# Built-in symbols (is_builtin=true) from animation module → animation.symbol
+animation.linear, animation.PALETTE_RAINBOW, animation.SINE, animation.solid
+
+# User-defined symbols (is_builtin=false) → symbol_
+my_color_, my_animation_, my_sequence_
+
+# Named colors → direct ARGB values (resolved at compile time)
+red → 0xFFFF0000, blue → 0xFF0000FF
+
+# Template calls → template_function(engine, args)
+my_template(red, 2s) → my_template_template(engine, 0xFFFF0000, 2000)
+
+
+### Closure Generation (Enhanced)
+Dynamic expressions are wrapped in closures with **mathematical function support**:
+```berry
+# DSL: animation.opacity = strip_length() / 2 + 50
+# Generated:
+animation.opacity = animation.create_closure_value(engine,
+ def (self) return animation.resolve(strip_length_(engine)) / 2 + 50 end)
+
+# DSL: animation.opacity = max(100, min(255, rand_demo() + 50))
+# Generated:
+animation.opacity = animation.create_closure_value(engine,
+ def (self) return animation._math.max(100, animation._math.min(255, animation.get_user_function('rand_demo')(engine) + 50)) end)
+
+# Mathematical functions are automatically detected and prefixed with animation._math.
+# User functions are wrapped with animation.get_user_function() calls
+```
+
+### Template Generation (New)
+Templates are transpiled into Berry functions and registered as user functions:
+```berry
+# DSL Template:
+template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+}
+
+# Generated:
+def pulse_effect_template(engine, color_, speed_)
+ var pulse_ = animation.pulsating_animation(engine)
+ pulse_.color = color_
+ pulse_.period = speed_
+ engine.add(pulse_)
+end
+
+animation.register_user_function('pulse_effect', pulse_effect_template)
+```
+
+### Sequence Generation (Fluent Interface)
+Sequences use fluent interface pattern for better readability:
+```berry
+# DSL: sequence demo { play anim for 2s; wait 1s }
+# Generated:
+var demo_ = animation.sequence_manager(engine)
+ .push_play_step(anim_, 2000)
+ .push_wait_step(1000)
+
+# Nested repeats use sub-sequences:
+var demo_ = animation.sequence_manager(engine)
+ .push_repeat_subsequence(animation.sequence_manager(engine, 3)
+ .push_play_step(anim_, 1000)
+ )
+```
+
+## Template System (Enhanced)
+
+Templates are transpiled into Berry functions with **comprehensive parameter handling**:
+
+**Template-Only Optimization**: Files containing only template definitions skip engine initialization and execution code generation, producing pure Berry function libraries.
+
+```
+process_template()
+├── expect_identifier() → template name
+├── validate_user_name() → check against reserved names
+├── expect_left_brace() → '{'
+├── Sequential step 1: collect parameters with type annotations
+│ ├── Parse "param name type annotation" syntax
+│ ├── Store parameter names and optional types
+│ └── Support both typed and untyped parameters
+├── Sequential step 2: collect body tokens until closing brace
+│ ├── Handle nested braces correctly
+│ ├── Preserve all tokens for later transpilation
+│ └── Track brace depth for proper parsing
+├── expect_right_brace() → '}'
+├── Store in template_definitions for call resolution
+├── generate_template_function()
+│ ├── Create new SimpleDSLTranspiler instance for body
+│ ├── Set up fresh symbol table with parameters
+│ ├── Mark strip as initialized (templates assume engine exists)
+│ ├── Transpile body using transpile_template_body()
+│ ├── Generate Berry function with engine + parameters
+│ ├── Handle transpilation errors gracefully
+│ └── Register as user function automatically
+└── Track in symbol_table as "template"
+```
+
+### Template Call Resolution (Multiple Contexts)
+```berry
+# DSL template call in animation context:
+animation my_anim = my_template(red, 2s)
+# Generated: var my_anim_ = my_template_template(engine, 0xFFFF0000, 2000)
+
+# DSL template call in property context:
+animation.opacity = my_template(blue, 1s)
+# Generated: animation.opacity = my_template_template(self.engine, 0xFF0000FF, 1000)
+
+# DSL standalone template call:
+my_template(green, 3s)
+# Generated: my_template_template(engine, 0xFF008000, 3000)
+```
+
+### Template Body Transpilation
+Templates use a **separate transpiler instance** with isolated symbol table:
+- Fresh symbol table prevents name conflicts
+- Parameters are added as "parameter" markers
+- Run statements are processed immediately (not collected)
+- Template calls can be nested (templates calling other templates)
+- Error handling preserves context information
+
+## Error Handling (Robust)
+
+The transpiler provides **comprehensive error reporting** with graceful degradation:
+
+### Error Categories
+- **Syntax errors** - Invalid DSL syntax with line numbers
+- **Factory validation** - Non-existent animation/color factories with suggestions
+- **Parameter validation** - Invalid parameter names with class context
+- **Reference validation** - Undefined object references with context information
+- **Constraint validation** - Parameter values outside valid ranges
+- **Type validation** - Incorrect parameter types with expected types
+- **Safety validation** - Dangerous patterns that could cause memory leaks or performance issues
+- **Template errors** - Template definition and call validation
+- **Reserved name conflicts** - User names conflicting with built-ins
+
+### Error Reporting Features
+```berry
+error(msg)
+├── Capture current line number from token
+├── Format error with context: "Line X: message"
+├── Store in errors array for batch reporting
+└── Continue transpilation for additional error discovery
+
+get_error_report()
+├── Check if errors exist
+├── Format comprehensive error report
+├── Include all errors with line numbers
+└── Provide user-friendly error messages
+```
+
+### Graceful Error Handling
+- **Try-catch blocks** around validation to prevent crashes
+- **Robust validation** that continues on individual failures
+- **Skip statement** functionality to recover from parse errors
+- **Default values** when validation fails to maintain transpilation flow
+- **Context preservation** in error messages for better debugging
+
+## Performance Considerations
+
+### Ultra-Simplified Architecture
+- **Single-pass processing** - tokens processed once from start to finish
+- **Incremental symbol table** - builds validation context as it parses
+- **Immediate validation** - catches errors as soon as they're encountered
+- **Minimal state tracking** - only essential information is maintained
+
+### Compile-Time Optimization
+- **Symbol resolution at transpile time** - eliminates runtime lookups
+- **Parameter validation during parsing** - catches errors early
+- **Template pre-compilation** - templates become efficient Berry functions
+- **Closure detection** - only wraps expressions that actually need it
+- **Mathematical function detection** - uses dynamic introspection for accuracy
+
+### Memory Efficiency
+- **Streaming token processing** - no large intermediate AST structures
+- **Direct code generation** - output generated as parsing proceeds
+- **Minimal intermediate representations** - tokens and symbol table only
+- **Template isolation** - separate transpiler instances prevent memory leaks
+- **Graceful error handling** - prevents memory issues from validation failures
+
+### Validation Efficiency
+- **MockEngine pattern** - lightweight validation without full engine
+- **Introspection caching** - validation results can be cached
+- **Early termination** - stops processing invalid constructs quickly
+- **Batch error reporting** - collects multiple errors in single pass
+
+## Integration Points
+
+### Animation Module Integration
+- **Factory function discovery** via introspection with existence checking
+- **Parameter validation** using instance methods and has_param()
+- **Symbol resolution** using module contents with fallback handling
+- **Mathematical function detection** using dynamic introspection of ClosureValueProvider
+- **Automatic strip initialization** when no explicit strip configuration
+
+### User Function Integration
+- **Template registration** as user functions with automatic naming
+- **User function call detection** usable as normal functions with positional arguments
+- **Closure generation** for computed parameters with mathematical functions
+- **Template call resolution** in multiple contexts (animation, property, standalone)
+- **Import statement processing** for user function modules
+
+### DSL Language Integration
+- **Comment preservation** in generated Berry code
+- **Inline comment handling** with proper spacing
+- **Multiple syntax support** for sequences (repeat variants)
+- **Palette syntax flexibility** (tuple vs alternative syntax)
+- **Time unit conversion** with variable support
+- **Percentage conversion** to 0-255 range
+
+### Robustness Features
+- **Graceful error recovery** - continues parsing after errors
+- **Validation isolation** - validation failures don't crash transpiler
+- **Symbol table tracking** - maintains context for validation
+- **Template isolation** - separate transpiler instances prevent conflicts
+- **Reserved name protection** - prevents conflicts with built-in identifiers
+
+## Key Architectural Changes
+
+The refactored transpiler emphasizes:
+
+1. **Simplicity** - Ultra-simplified single-pass architecture
+2. **Robustness** - Comprehensive error handling and graceful degradation
+3. **Enhanced Symbol Management** - Dynamic SymbolTable system with intelligent caching and conflict detection
+4. **Validation** - Extensive compile-time validation with detailed error messages
+5. **Flexibility** - Support for templates, multiple syntax variants, and user functions
+6. **Performance** - Efficient processing with minimal memory overhead and lazy symbol detection
+7. **Maintainability** - Clear separation of concerns and unified processing methods
+
+## Recent Refactoring Improvements
+
+### Code Simplification Using SymbolTable
+
+The transpiler has been significantly refactored to leverage the `symbol_table.be` system more extensively:
+
+#### **Factory Validation Simplification**
+- **Before**: Complex validation with introspection and manual instance creation (~50 lines)
+- **After**: Simple validation using symbol_table's dynamic detection (~25 lines)
+- **Improvement**: 50% code reduction with better maintainability
+
+#### **Symbol Resolution Consolidation**
+- **Before**: Multiple separate checks for sequences, introspection, etc.
+- **After**: Unified resolution through `symbol_table.get_reference()`
+- **Improvement**: Single source of truth for all symbol resolution
+
+#### **Duplicate Code Elimination**
+- **Before**: Duplicate code patterns in `process_color()` and `process_animation()` methods
+- **After**: Consolidated into reusable `_process_simple_value_assignment()` helper
+- **Improvement**: 70% reduction in duplicate code blocks
+
+#### **Legacy Variable Removal**
+- **Before**: Separate tracking of sequences in `sequence_names` variable
+- **After**: All symbols tracked uniformly in `symbol_table`
+- **Improvement**: Eliminated redundancy and simplified state management
+
+### Major Enhancements
+
+**SymbolTable System:**
+- **Dynamic Detection**: Automatically detects and caches symbol types as encountered
+- **Conflict Prevention**: Prevents redefinition of symbols with different types
+- **Performance Optimization**: Lazy loading and efficient symbol resolution for optimal performance
+- **Type Safety**: Comprehensive type checking with MockEngine validation
+- **Modular Design**: Separated into `symbol_table.be` for reusability
+- **Constant Detection**: Added support for integer constants like `LINEAR`, `SINE`, `COSINE`
+
+**Enhanced Symbol Detection:**
+- **Palette Objects**: `PALETTE_RAINBOW` → `animation.PALETTE_RAINBOW`
+- **Integer Constants**: `LINEAR`, `SINE`, `COSINE` → `animation.LINEAR`, `animation.SINE`, `animation.COSINE`
+- **Math Functions**: `max`, `min` → `animation.max`, `animation.min` (transformed to `animation._math.*` in closures)
+- **Value Providers**: `triangle`, `smooth` → `animation.triangle`, `animation.smooth`
+- **Animation Constructors**: `solid`, `pulsating_animation` → `animation.solid`, `animation.pulsating_animation`
+- **User-defined Symbols**: `my_color`, `my_animation` → `my_color_`, `my_animation_`
+
+**Validation Improvements:**
+- **Real-time Validation**: Parameter validation as symbols are parsed
+- **Instance-based Checking**: Uses actual instances for accurate validation
+- **Graceful Error Handling**: Robust error recovery with detailed error messages
+- **Simplified Validation Methods**: Factory validation reduced from ~50 to ~25 lines using symbol_table
+- **Unified Symbol Checking**: All symbol existence checks go through symbol_table system
+- **Enhanced Type Detection**: Automatic detection of constants, palettes, functions, and constructors
+
+This architecture ensures robust, efficient transpilation from DSL to executable Berry code while providing comprehensive validation, detailed error reporting, intelligent symbol management, and extensive language features.
+
+### Symbol Reference Generation
+
+The enhanced SymbolEntry system uses the `is_builtin` flag to determine correct reference generation:
+
+```berry
+# SymbolEntry.get_reference() method
+def get_reference()
+ if self.is_builtin
+ return f"animation.{self.name}" # Built-in symbols: animation.LINEAR
+ else
+ return f"{self.name}_" # User-defined symbols: my_color_
+ end
+end
+```
+
+**Examples:**
+- **Built-in Constants**: `LINEAR` → `animation.LINEAR`
+- **Built-in Functions**: `triangle` → `animation.triangle`
+- **Built-in Palettes**: `PALETTE_RAINBOW` → `animation.PALETTE_RAINBOW`
+- **User-defined Colors**: `my_red` → `my_red_`
+- **User-defined Animations**: `pulse_anim` → `pulse_anim_`
+
+This ensures consistent and correct symbol resolution throughout the transpilation process.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/TROUBLESHOOTING.md b/lib/libesp32/berry_animation/berry_animation_docs/TROUBLESHOOTING.md
new file mode 100644
index 000000000..f0b93cda7
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/TROUBLESHOOTING.md
@@ -0,0 +1,1238 @@
+# Troubleshooting Guide
+
+Common issues and solutions for the Tasmota Berry Animation Framework.
+
+**Note**: This guide focuses on DSL usage, which is the recommended way to create animations. For programmatic API issues, see the [Animation Development Guide](ANIMATION_DEVELOPMENT.md).
+
+## Installation Issues
+
+### Framework Not Found
+
+**Problem:** `import animation` or `import animation_dsl` fails with "module not found"
+
+**Solutions:**
+1. **Check Module Import:**
+ ```berry
+ import animation # Core framework
+ import animation_dsl # DSL compiler
+ ```
+
+2. **Set Module Path:**
+ ```bash
+ berry -m lib/libesp32/berry_animation
+ ```
+
+3. **Verify File Structure:**
+ ```
+ lib/libesp32/berry_animation/
+ ├── animation.be # Main module file
+ ├── dsl/ # DSL components
+ ├── core/ # Core classes
+ ├── animations/ # Animation effects
+ └── ...
+ ```
+
+### Missing Dependencies
+
+**Problem:** Errors about missing `tasmota` or `Leds` classes
+
+**Solutions:**
+1. **For Tasmota Environment:**
+ - Ensure you're running on actual Tasmota firmware
+ - Check that Berry support is enabled
+
+2. **For Development Environment:**
+ ```berry
+ # Mock Tasmota for testing
+ if !global.contains("tasmota")
+ global.tasmota = {
+ "millis": def() return 1000 end,
+ "scale_uint": def(val, from_min, from_max, to_min, to_max)
+ return int((val - from_min) * (to_max - to_min) / (from_max - from_min) + to_min)
+ end
+ }
+ end
+ ```
+
+## Animation Issues
+
+### Animations Not Starting
+
+**Problem:** DSL animations compile but LEDs don't change
+
+**Diagnostic Steps:**
+```berry
+import animation
+import animation_dsl
+
+# Test basic DSL execution
+var dsl_code = "color red = 0xFF0000\n" +
+ "animation red_anim = solid(color=red)\n" +
+ "run red_anim"
+
+try
+ animation_dsl.execute(dsl_code)
+ print("DSL executed successfully")
+except .. as e, msg
+ print("DSL Error:", msg)
+end
+```
+
+**Timing Behavior Note:**
+The framework has updated timing behavior where:
+- The `start()` method only resets the time origin if the animation/value provider was already started previously
+- The first actual rendering tick occurs in `update()`, `render()`, or `produce_value()` methods
+- This ensures proper timing initialization and prevents premature time reference setting
+
+**Common Solutions:**
+
+1. **Missing Strip Declaration:**
+ ```berry
+ # Add explicit strip length if needed
+ strip length 30
+
+ color red = 0xFF0000
+ animation red_anim = solid(color=red)
+ run red_anim
+ ```
+
+2. **Animation Not Executed:**
+ ```berry
+ # Make sure you have a 'run' statement
+ color red = 0xFF0000
+ animation red_anim = solid(color=red)
+ run red_anim # Don't forget this!
+ ```
+
+3. **Strip Auto-Detection Issues:**
+ ```berry
+ # Force strip length if auto-detection fails
+ strip length 30 # Must be first statement
+
+ color red = 0xFF0000
+ animation red_anim = solid(color=red)
+ run red_anim
+ ```
+
+### Colors Look Wrong
+
+**Problem:** Colors appear different than expected
+
+**Common Issues:**
+
+1. **Missing Alpha Channel:**
+ ```berry
+ # Note: 0xFF0000 is valid RGB format (alpha defaults to 0xFF)
+ color red = 0xFF0000 # RGB format (alpha=255 assumed)
+
+ # Explicit alpha channel (ARGB format)
+ color red = 0xFFFF0000 # ARGB format (alpha=255, red=255)
+ color semi_red = 0x80FF0000 # ARGB format (alpha=128, red=255)
+ ```
+
+2. **Color Format Confusion:**
+ ```berry
+ # ARGB format: 0xAARRGGBB
+ color red = 0xFFFF0000 # Alpha=FF, Red=FF, Green=00, Blue=00
+ color green = 0xFF00FF00 # Alpha=FF, Red=00, Green=FF, Blue=00
+ color blue = 0xFF0000FF # Alpha=FF, Red=00, Green=00, Blue=FF
+ ```
+
+3. **Brightness Issues:**
+ ```berry
+ # Use opacity parameter or property assignment
+ animation red_anim = solid(color=red, opacity=255) # Full brightness
+
+ # Or assign after creation
+ animation pulse_red = pulsating_animation(color=red, period=2s)
+ pulse_red.opacity = 200 # Adjust brightness
+
+ # Use value providers for dynamic brightness
+ set brightness = smooth(min_value=50, max_value=255, period=3s)
+ animation breathing = solid(color=red)
+ breathing.opacity = brightness
+ ```
+
+### Animations Too Fast/Slow
+
+**Problem:** Animation timing doesn't match expectations
+
+**Solutions:**
+
+1. **Check Time Units:**
+ ```berry
+ # DSL uses time units (converted to milliseconds)
+ animation pulse_anim = pulsating_animation(color=red, period=2s) # 2 seconds
+ animation fast_pulse = pulsating_animation(color=blue, period=500ms) # 0.5 seconds
+ ```
+
+2. **Adjust Periods:**
+ ```berry
+ # Too fast - increase period
+ animation slow_pulse = pulsating_animation(color=red, period=5s) # 5 seconds
+
+ # Too slow - decrease period
+ animation fast_pulse = pulsating_animation(color=red, period=500ms) # 0.5 seconds
+ ```
+
+3. **Performance Limitations:**
+ ```berry
+ # Use sequences instead of multiple simultaneous animations
+ sequence optimized_show {
+ play animation1 for 3s
+ play animation2 for 3s
+ play animation3 for 3s
+ }
+ run optimized_show
+
+ # Instead of:
+ # run animation1
+ # run animation2
+ # run animation3
+ ```
+
+## DSL Issues
+
+### DSL Compilation Errors
+
+**Problem:** DSL code fails to compile
+
+**Diagnostic Approach:**
+```berry
+try
+ var berry_code = animation_dsl.compile(dsl_source)
+ print("Compilation successful")
+except "dsl_compilation_error" as e, msg
+ print("DSL Error:", msg)
+end
+```
+
+**Common DSL Errors:**
+
+1. **Undefined Colors:**
+ ```berry
+ # Wrong - color not defined
+ animation red_anim = solid(color=red)
+
+ # Correct - define color first
+ color red = 0xFF0000
+ animation red_anim = solid(color=red)
+ ```
+
+2. **Invalid Color Format:**
+ ```berry
+ # Wrong - # prefix not supported (conflicts with comments)
+ color red = #FF0000
+
+ # Correct - use 0x prefix
+ color red = 0xFF0000
+ ```
+
+3. **Missing Time Units:**
+ ```berry
+ # Wrong - no time unit
+ animation pulse_anim = pulsating_animation(color=red, period=2000)
+
+ # Correct - with time unit
+ animation pulse_anim = pulsating_animation(color=red, period=2s)
+ ```
+
+4. **Reserved Name Conflicts:**
+ ```berry
+ # Wrong - 'red' is a predefined color
+ color red = 0x800000
+
+ # Correct - use different name
+ color dark_red = 0x800000
+ ```
+
+5. **Invalid Parameter Names:**
+ ```berry
+ # Wrong - invalid parameter name
+ animation pulse_anim = pulsating_animation(color=red, invalid_param=123)
+ # Error: "Parameter 'invalid_param' is not valid for pulsating_animation"
+
+ # Correct - use valid parameters (see DSL_REFERENCE.md for complete list)
+ animation pulse_anim = pulsating_animation(color=red, period=2s)
+ ```
+
+6. **Variable Duration Support:**
+ ```berry
+ # Now supported - variables in play/wait durations
+ set eye_duration = 5s
+
+ sequence cylon_eye {
+ play red_eye for eye_duration # ✓ Variables now work
+ wait eye_duration # ✓ Variables work in wait too
+ }
+
+ # Also supported - value providers for dynamic duration
+ set dynamic_time = triangle(min_value=1000, max_value=3000, period=10s)
+
+ sequence demo {
+ play animation for dynamic_time # ✓ Dynamic duration
+ }
+ ```
+
+7. **Template Definition Errors:**
+ ```berry
+ # Wrong - missing braces
+ template pulse_effect
+ param color type color
+ param speed
+ # Error: Expected '{' after template name
+
+ # Wrong - invalid parameter syntax
+ template pulse_effect {
+ param color as color # Error: Use 'type' instead of 'as'
+ param speed
+ }
+
+ # Wrong - missing template body
+ template pulse_effect {
+ param color type color
+ }
+ # Error: Template body cannot be empty
+
+ # Correct - proper template syntax
+ template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(
+ color=color
+ period=speed
+ )
+
+ run pulse
+ }
+ ```
+
+8. **Template Call Errors:**
+ ```berry
+ # Wrong - template not defined
+ pulse_effect(red, 2s)
+ # Error: "Undefined reference: 'pulse_effect'"
+
+ # Wrong - incorrect parameter count
+ template pulse_effect {
+ param color type color
+ param speed
+ # ... template body ...
+ }
+
+ pulse_effect(red) # Error: Expected 2 parameters, got 1
+
+ # Correct - define template first, call with correct parameters
+ template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+ }
+
+ pulse_effect(red, 2s) # ✓ Correct usage
+ ```
+
+6. **Parameter Constraint Violations:**
+ ```berry
+ # Wrong - negative period not allowed
+ animation bad_pulse = pulsating_animation(color=red, period=-2s)
+ # Error: "Parameter 'period' value -2000 violates constraint: min=1"
+
+ # Wrong - invalid enum value
+ animation bad_comet = comet_animation(color=red, direction=5)
+ # Error: "Parameter 'direction' value 5 not in allowed values: [-1, 1]"
+
+ # Correct - valid parameters within constraints
+ animation good_pulse = pulsating_animation(color=red, period=2s)
+ animation good_comet = comet_animation(color=red, direction=1)
+ ```
+
+7. **Repeat Syntax Errors:**
+ ```berry
+ # Wrong - old colon syntax no longer supported
+ sequence bad_demo {
+ repeat 3 times: # Error: Expected '{' after 'times'
+ play anim for 1s
+ }
+
+ # Wrong - missing braces
+ sequence bad_demo2 {
+ repeat 3 times
+ play anim for 1s # Error: Expected '{' after 'times'
+ }
+
+ # Correct - use braces for repeat blocks
+ sequence good_demo {
+ repeat 3 times {
+ play anim for 1s
+ }
+ }
+
+ # Also correct - alternative syntax
+ sequence good_demo_alt repeat 3 times {
+ play anim for 1s
+ }
+
+ # Correct - forever syntax
+ sequence infinite_demo {
+ repeat forever {
+ play anim for 1s
+ wait 500ms
+ }
+ }
+ ```
+
+### Template Issues
+
+### Template Definition Problems
+
+**Problem:** Template definitions fail to compile
+
+**Common Template Errors:**
+
+1. **Missing Template Body:**
+ ```berry
+ # Wrong - empty template
+ template empty_template {
+ param color type color
+ }
+ # Error: "Template body cannot be empty"
+
+ # Correct - template must have content
+ template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+ }
+ ```
+
+2. **Invalid Parameter Syntax:**
+ ```berry
+ # Wrong - old 'as' syntax
+ template pulse_effect {
+ param color as color
+ }
+ # Error: Expected 'type' keyword, got 'as'
+
+ # Correct - use 'type' keyword
+ template pulse_effect {
+ param color type color
+ param speed # Type annotation is optional
+ }
+ ```
+
+3. **Template Name Conflicts:**
+ ```berry
+ # Wrong - template name conflicts with built-in function
+ template solid { # 'solid' is a built-in animation function
+ param color type color
+ # ...
+ }
+ # Error: "Template name 'solid' conflicts with built-in function"
+
+ # Correct - use unique template names
+ template solid_effect {
+ param color type color
+ # ...
+ }
+ ```
+
+### Template Usage Problems
+
+**Problem:** Template calls fail or behave unexpectedly
+
+**Common Issues:**
+
+1. **Undefined Template:**
+ ```berry
+ # Wrong - calling undefined template
+ my_effect(red, 2s)
+ # Error: "Undefined reference: 'my_effect'"
+
+ # Correct - define template first
+ template my_effect {
+ param color type color
+ param speed
+ # ... template body ...
+ }
+
+ my_effect(red, 2s) # Now works
+ ```
+
+2. **Parameter Count Mismatch:**
+ ```berry
+ template pulse_effect {
+ param color type color
+ param speed
+ param brightness
+ }
+
+ # Wrong - missing parameters
+ pulse_effect(red, 2s) # Error: Expected 3 parameters, got 2
+
+ # Correct - provide all parameters
+ pulse_effect(red, 2s, 200)
+ ```
+
+3. **Parameter Type Issues:**
+ ```berry
+ template pulse_effect {
+ param color type color
+ param speed
+ }
+
+ # Wrong - invalid color parameter
+ pulse_effect("not_a_color", 2s)
+ # Runtime error: Invalid color value
+
+ # Correct - use valid color
+ pulse_effect(red, 2s) # Named color
+ pulse_effect(0xFF0000, 2s) # Hex color
+ ```
+
+### Template vs User Function Confusion
+
+**Problem:** Mixing template and user function concepts
+
+**Key Differences:**
+
+```berry
+# Template (DSL-native) - Recommended for most cases
+template pulse_effect {
+ param color type color
+ param speed
+
+ animation pulse = pulsating_animation(color=color, period=speed)
+ run pulse
+}
+
+# User Function (Berry-native) - For complex logic
+def create_pulse_effect(engine, color, speed)
+ var pulse = animation.pulsating_animation(engine)
+ pulse.color = color
+ pulse.period = speed
+ return pulse
+end
+animation.register_user_function("pulse_effect", create_pulse_effect)
+```
+
+**When to Use Each:**
+- **Templates**: Simple to moderate effects, DSL syntax, type safety
+- **User Functions**: Complex logic, Berry features, return values
+
+## DSL Runtime Errors
+
+**Problem:** DSL compiles but fails at runtime
+
+**Common Issues:**
+
+1. **Strip Not Initialized:**
+ ```berry
+ # Add strip declaration if needed
+ strip length 30
+
+ color red = 0xFF0000
+ animation red_anim = solid(color=red)
+ run red_anim
+ ```
+
+2. **Repeat Performance Issues:**
+ ```berry
+ # Efficient - runtime repeats don't expand at compile time
+ sequence efficient {
+ repeat 1000 times { # No memory overhead for large counts
+ play anim for 100ms
+ wait 50ms
+ }
+ }
+
+ # Nested repeats work efficiently
+ sequence nested {
+ repeat 100 times {
+ repeat 50 times { # Total: 5000 iterations, but efficient
+ play quick_flash for 10ms
+ }
+ wait 100ms
+ }
+ }
+ ```
+
+3. **Sequence Issues:**
+ ```berry
+ # Make sure animations are defined before sequences
+ color red = 0xFF0000
+ animation red_anim = solid(color=red) # Define first
+
+ sequence demo {
+ play red_anim for 3s # Use after definition
+ wait 1s # Optional pause between animations
+ }
+ run demo
+ ```
+
+4. **Undefined References:**
+ ```berry
+ # Wrong - using undefined animation in sequence
+ sequence bad_demo {
+ play undefined_animation for 3s
+ }
+ # Error: "Undefined reference: 'undefined_animation'"
+
+ # Correct - define all references first
+ color blue = 0x0000FF
+ animation blue_anim = solid(color=blue)
+
+ sequence good_demo {
+ play blue_anim for 3s
+ }
+ run good_demo
+ ```
+
+## Performance Issues
+
+### CPU Metrics and Profiling
+
+**Feature:** Built-in CPU metrics tracking to monitor animation performance
+
+The AnimationEngine automatically tracks CPU usage and provides detailed statistics every 5 seconds. This helps identify performance bottlenecks and optimize animations for ESP32 embedded systems.
+
+**Automatic Metrics:**
+
+When the engine is running, it automatically logs performance statistics:
+
+```
+AnimEngine: ticks=1000/1000 missed=0 total=0.50ms(0-2) anim=0.30ms(0-1) hw=0.20ms(0-1) cpu=10.0%
+ Phase1(checks): mean=0.05ms(0-0)
+ Phase2(events): mean=0.05ms(0-0)
+ Phase3(anim): mean=0.20ms(0-1)
+```
+
+**Metrics Explained:**
+- **ticks**: Actual ticks executed vs expected (at 5ms intervals)
+- **missed**: Hint of missed ticks (negative means extra ticks, positive means missed)
+- **total**: Mean total tick time with (min-max) range in milliseconds
+- **anim**: Mean animation calculation time with (min-max) range - everything before hardware output
+- **hw**: Mean hardware output time with (min-max) range - just the LED strip update
+- **cpu**: Overall CPU usage percentage over the 5-second period
+
+**Phase Metrics (Optional):**
+When intermediate measurement points are available, the engine also reports phase-based timing:
+- **Phase1(checks)**: Initial checks (strip length, throttling, can_show)
+- **Phase2(events)**: Event processing time
+- **Phase3(anim)**: Animation update and render time (before hardware output)
+
+**Timestamp-Based Profiling:**
+
+The engine uses a timestamp-based profiling system that stores only timestamps (not durations) in instance variables:
+
+- `ts_start` - Tick start timestamp
+- `ts_1` - After initial checks (optional)
+- `ts_2` - After event processing (optional)
+- `ts_3` - After animation update/render (optional)
+- `ts_hw` - After hardware output
+- `ts_end` - Tick end timestamp
+
+Durations are computed from these timestamps in `_record_tick_metrics()` with nil checks to ensure values are valid.
+
+**Accessing Profiling Data:**
+
+```berry
+import animation
+
+var strip = Leds(30)
+var engine = animation.create_engine(strip)
+
+# Add an animation
+var anim = animation.solid(engine)
+anim.color = 0xFFFF0000
+engine.add(anim)
+engine.run()
+
+# Run for a while to collect metrics
+# After 5 seconds, metrics are automatically logged
+
+# Access current metrics programmatically
+print("Tick count:", engine.tick_count)
+print("Total time sum:", engine.tick_time_sum)
+print("Animation time sum:", engine.anim_time_sum)
+print("Hardware time sum:", engine.hw_time_sum)
+
+# Access phase metrics if available
+if engine.phase1_time_sum > 0
+ print("Phase 1 time sum:", engine.phase1_time_sum)
+end
+```
+
+**Profiling Benefits:**
+
+1. **Memory Efficient:**
+ - Only stores timestamps (6 instance variables)
+ - No duration storage or arrays
+ - Streaming statistics with no memory overhead
+
+2. **Automatic Tracking:**
+ - No manual instrumentation needed
+ - Runs continuously in background
+ - Reports every 5 seconds
+
+3. **Detailed Breakdown:**
+ - Separates animation calculation from hardware output
+ - Optional phase-based timing for deeper analysis
+ - Min/max/mean statistics for all metrics
+
+**Interpreting Performance Metrics:**
+
+1. **High Animation Time:**
+ - Too many simultaneous animations
+ - Complex value provider calculations
+ - Inefficient custom effects
+
+ **Solution:** Simplify animations or use sequences
+
+2. **High Hardware Time:**
+ - Large LED strip (many pixels)
+ - Slow SPI/I2C communication
+ - Hardware limitations
+
+ **Solution:** Reduce update frequency or strip length
+
+3. **Missed Ticks:**
+ - CPU overload (total time > 5ms per tick)
+ - Other Tasmota tasks interfering
+
+ **Solution:** Optimize animations or reduce complexity
+
+4. **High CPU Percentage:**
+ - Animations consuming too much CPU
+ - May affect other Tasmota functions
+
+ **Solution:** Increase animation periods or reduce effects
+
+**Example Performance Optimization:**
+
+```berry
+import animation
+
+var strip = Leds(60)
+var engine = animation.create_engine(strip)
+
+# Before optimization - complex animation
+var complex_anim = animation.rainbow_animation(engine)
+complex_anim.period = 100 # Very fast, high CPU
+
+engine.add(complex_anim)
+engine.run()
+
+# Check metrics after 5 seconds:
+# AnimEngine: ticks=950/1000 missed=50 total=5.2ms(4-8) cpu=104.0%
+# ^ Too slow! Missing ticks and over 100% CPU
+
+# After optimization - slower period
+complex_anim.period = 2000 # 2 seconds instead of 100ms
+
+# Check metrics after 5 seconds:
+# AnimEngine: ticks=1000/1000 missed=0 total=0.8ms(0-2) cpu=16.0%
+# ^ Much better! All ticks processed, reasonable CPU usage
+```
+
+### Choppy Animations
+
+**Problem:** Animations appear jerky or stuttering
+
+**Solutions:**
+
+1. **Use Sequences Instead of Multiple Animations:**
+ ```berry
+ # Good - sequential playback
+ sequence smooth_show {
+ play animation1 for 3s
+ play animation2 for 3s
+ play animation3 for 3s
+ }
+ run smooth_show
+
+ # Avoid - too many simultaneous animations
+ # run animation1
+ # run animation2
+ # run animation3
+ ```
+
+2. **Increase Animation Periods:**
+ ```berry
+ # Smooth - longer periods
+ animation smooth_pulse = pulsating_animation(color=red, period=3s)
+
+ # Choppy - very short periods
+ animation choppy_pulse = pulsating_animation(color=red, period=50ms)
+ ```
+
+3. **Optimize Value Providers:**
+ ```berry
+ # Efficient - reuse providers
+ set breathing = smooth(min_value=50, max_value=255, period=2s)
+
+ color red = 0xFF0000
+ color blue = 0x0000FF
+
+ animation anim1 = pulsating_animation(color=red, period=2s)
+ anim1.opacity = breathing
+
+ animation anim2 = pulsating_animation(color=blue, period=2s)
+ anim2.opacity = breathing # Reuse same provider
+ ```
+
+4. **Monitor CPU Metrics:**
+ ```berry
+ # Check if CPU is overloaded
+ # Look for missed ticks or high CPU percentage in metrics
+ # AnimEngine: ticks=950/1000 missed=50 ... cpu=95.0%
+ # ^ This indicates performance issues
+
+ # Use profiling to find bottlenecks
+ engine.profile_start("suspect_code")
+ # ... code that might be slow ...
+ engine.profile_end("suspect_code")
+ ```
+
+### Memory Issues
+
+**Problem:** Out of memory errors or system crashes
+
+**Solutions:**
+
+1. **Clear Unused Animations:**
+ ```berry
+ # Clear before adding new animations
+ engine.clear()
+ engine.add(new_animation)
+ ```
+
+2. **Limit Palette Size:**
+ ```berry
+ # Good - reasonable palette size
+ palette simple_fire = [
+ (0, 0x000000),
+ (128, 0xFF0000),
+ (255, 0xFFFF00)
+ ]
+
+ # Avoid - very large palettes
+ # palette huge_palette = [
+ # (0, color1), (1, color2), ... (255, color256)
+ # ]
+ ```
+
+3. **Use Sequences Instead of Simultaneous Animations:**
+ ```berry
+ # Memory efficient - sequential playback
+ sequence show {
+ play animation1 for 5s
+ play animation2 for 5s
+ play animation3 for 5s
+ }
+
+ # Memory intensive - all at once
+ # run animation1
+ # run animation2
+ # run animation3
+ ```
+
+## Event System Issues
+
+### Events Not Triggering
+
+**Problem:** Event handlers don't execute
+
+**Diagnostic Steps:**
+```berry
+# Check if handler is registered
+var handlers = animation.get_event_handlers("button_press")
+print("Handler count:", size(handlers))
+
+# Test event triggering
+animation.trigger_event("test_event", {"debug": true})
+```
+
+**Solutions:**
+
+1. **Verify Handler Registration:**
+ ```berry
+ def test_handler(event_data)
+ print("Event triggered:", event_data)
+ end
+
+ var handler = animation.register_event_handler("test", test_handler, 0)
+ print("Handler registered:", handler != nil)
+ ```
+
+2. **Check Event Names:**
+ ```berry
+ # Event names are case-sensitive
+ animation.register_event_handler("button_press", handler) # Correct
+ animation.trigger_event("button_press", {}) # Must match exactly
+ ```
+
+3. **Verify Conditions:**
+ ```berry
+ def condition_func(event_data)
+ return event_data.contains("required_field")
+ end
+
+ animation.register_event_handler("event", handler, 0, condition_func)
+
+ # Event data must satisfy condition
+ animation.trigger_event("event", {"required_field": "value"})
+ ```
+
+## Hardware Issues
+
+### LEDs Not Responding
+
+**Problem:** Framework runs but LEDs don't light up
+
+**Hardware Checks:**
+
+1. **Power Supply:**
+ - Ensure adequate power for LED count
+ - Check voltage (5V for WS2812)
+ - Verify ground connections
+
+2. **Wiring:**
+ - Data line connected to correct GPIO
+ - Ground connected between controller and LEDs
+ - Check for loose connections
+
+3. **LED Strip:**
+ - Test with known working code
+ - Check for damaged LEDs
+ - Verify strip type (WS2812, SK6812, etc.)
+
+**Software Checks:**
+```berry
+# Test basic LED functionality
+var strip = Leds(30) # 30 LEDs
+strip.set_pixel_color(0, 0xFFFF0000) # Set first pixel red
+strip.show() # Update LEDs
+
+# Test with animation framework
+import animation
+var engine = animation.create_engine(strip)
+var red_anim = animation.solid(engine)
+red_anim.color = 0xFFFF0000
+engine.add(red_anim)
+engine.run()
+
+# If basic strip works but animation doesn't, check framework setup
+```
+
+### Wrong Colors on Hardware
+
+**Problem:** Colors look different on actual LEDs vs. expected
+
+**Solutions:**
+
+1. **Color Order:**
+ ```berry
+ # Some strips use different color orders
+ # Try different strip types in Tasmota configuration
+ # WS2812: RGB order
+ # SK6812: GRBW order
+ ```
+
+2. **Gamma Correction:**
+ ```berry
+ # Enable gamma correction in Tasmota
+ # SetOption37 128 # Enable gamma correction
+ ```
+
+3. **Power Supply Issues:**
+ - Voltage drop causes color shifts
+ - Use adequate power supply
+ - Add power injection for long strips
+
+## Debugging Techniques
+
+### DSL vs Berry API Debugging
+
+**For DSL Issues (Recommended):**
+```berry
+# Enable DSL debug output
+import animation_dsl
+
+var dsl_code = "color red = 0xFF0000\nanimation test = solid(color=red)\nrun test"
+
+# Check compilation
+try
+ var berry_code = animation_dsl.compile(dsl_code)
+ print("DSL compilation successful")
+ print("Generated Berry code:")
+ print(berry_code)
+except .. as e, msg
+ print("DSL compilation error:", msg)
+end
+
+# Execute with debug
+try
+ animation_dsl.execute(dsl_code, true) # debug=true
+except .. as e, msg
+ print("DSL execution error:", msg)
+end
+```
+
+**For Framework Issues (Advanced):**
+```berry
+# Direct Berry API debugging (for framework developers)
+import animation
+
+var strip = Leds(30)
+var engine = animation.create_engine(strip, true) # debug=true
+
+var anim = animation.solid(engine)
+anim.color = 0xFFFF0000
+engine.add(anim)
+engine.run()
+```
+
+### Step-by-Step Testing
+
+```berry
+# Test each component individually
+print("1. Creating strip...")
+var strip = Leds(30)
+print("Strip created:", strip != nil)
+
+print("2. Creating engine...")
+var engine = animation.create_engine(strip)
+print("Engine created:", engine != nil)
+
+print("3. Creating animation...")
+var anim = animation.solid(engine)
+anim.color = 0xFFFF0000
+print("Animation created:", anim != nil)
+
+print("4. Adding animation...")
+engine.add(anim)
+print("Animation count:", engine.size())
+
+print("5. Starting engine...")
+engine.run()
+print("Engine active:", engine.is_active())
+```
+
+### Monitor Performance
+
+```berry
+# Check timing
+var start_time = tasmota.millis()
+# ... run animation code ...
+var end_time = tasmota.millis()
+print("Execution time:", end_time - start_time, "ms")
+
+# Monitor memory (if available)
+import gc
+print("Memory before:", gc.allocated())
+# ... create animations ...
+print("Memory after:", gc.allocated())
+```
+
+## Getting Help
+
+### Information to Provide
+
+When asking for help, include:
+
+1. **Hardware Setup:**
+ - LED strip type and count
+ - GPIO pin used
+ - Power supply specifications
+
+2. **Software Environment:**
+ - Tasmota version
+ - Berry version
+ - Framework version
+
+3. **Code:**
+ - Complete minimal example that reproduces the issue
+ - Error messages (exact text)
+ - Expected vs. actual behavior
+
+4. **Debugging Output:**
+ - Debug mode output
+ - Generated Berry code (for DSL issues)
+ - Console output
+
+### Example Bug Report
+
+```
+**Problem:** DSL animation compiles but LEDs don't change
+
+**Hardware:**
+- 30x WS2812 LEDs on GPIO 1
+- ESP32 with 5V/2A power supply
+
+**Code:**
+```berry
+color red = 0xFF0000
+animation red_anim = solid(color=red)
+run red_anim
+```
+
+**Error Output:**
+```
+DSL compilation successful
+Engine created: true
+Animation count: 1
+Engine active: true
+```
+
+**Expected:** LEDs turn red
+**Actual:** LEDs remain off
+
+**Additional Info:**
+- Basic `strip.set_pixel_color(0, 0xFFFF0000); strip.show()` works
+- Tasmota 13.2.0, Berry enabled
+```
+
+This format helps identify issues quickly and provide targeted solutions.
+
+## Prevention Tips
+
+### Code Quality
+
+1. **Use Try-Catch Blocks:**
+ ```berry
+ try
+ runtime.load_dsl(dsl_code)
+ except .. as e, msg
+ print("Error:", msg)
+ end
+ ```
+
+2. **Validate Inputs:**
+ ```berry
+ if type(color) == "int" && color >= 0
+ var anim = animation.solid(color)
+ else
+ print("Invalid color:", color)
+ end
+ ```
+
+3. **Test Incrementally:**
+ - Start with simple solid colors
+ - Add one effect at a time
+ - Test each change before proceeding
+
+### Performance Best Practices
+
+1. **Limit Complexity:**
+ - 1-3 simultaneous animations
+ - Reasonable animation periods (>1 second)
+ - Moderate palette sizes
+
+2. **Resource Management:**
+ - Clear unused animations
+ - Reuse value providers
+ - Use sequences for complex shows
+
+3. **Hardware Considerations:**
+ - Adequate power supply
+ - Proper wiring and connections
+ - Appropriate LED strip for application
+
+## Quick Reference: Common DSL Patterns
+
+### Basic Animation
+```berry
+color red = 0xFF0000
+animation red_solid = solid(color=red)
+run red_solid
+```
+
+### Templates
+```berry
+# Define reusable template
+template pulse_effect {
+ param base_color type color # Use descriptive names
+ param speed type time # Add type annotations for clarity
+
+ animation pulse = pulsating_animation(color=base_color, period=speed)
+ run pulse
+}
+
+# Use template multiple times
+pulse_effect(red, 2s)
+pulse_effect(blue, 1s)
+```
+
+**Common Template Parameter Issues:**
+
+```berry
+# ❌ AVOID: Parameter name conflicts
+template bad_example {
+ param color type color # Error: conflicts with built-in color name
+ param animation type number # Error: conflicts with reserved keyword
+}
+
+# ✅ CORRECT: Use descriptive, non-conflicting names
+template good_example {
+ param base_color type color # Clear, non-conflicting name
+ param anim_speed type time # Descriptive parameter name
+}
+
+# ⚠️ WARNING: Unused parameters generate warnings
+template unused_param_example {
+ param used_color type color
+ param unused_value type number # Warning: never used in template body
+
+ animation test = solid(color=used_color)
+ run test
+}
+```
+
+### Animation with Parameters
+```berry
+color blue = 0x0000FF
+animation blue_pulse = pulsating_animation(color=blue, period=2s, opacity=200)
+run blue_pulse
+```
+
+### Using Value Providers
+```berry
+set breathing = smooth(min_value=50, max_value=255, period=3s)
+color green = 0x00FF00
+animation breathing_green = solid(color=green)
+breathing_green.opacity = breathing
+run breathing_green
+```
+
+### Sequences
+```berry
+color red = 0xFF0000
+color blue = 0x0000FF
+
+animation red_anim = solid(color=red)
+animation blue_anim = solid(color=blue)
+
+sequence demo {
+ play red_anim for 2s
+ wait 500ms
+ play blue_anim for 2s
+}
+run demo
+```
+
+### Multiple Strip Lengths
+```berry
+strip length 60 # Must be first statement
+
+color rainbow = rainbow_color_provider(period=5s)
+animation rainbow_anim = solid(color=rainbow)
+run rainbow_anim
+```
+
+Following these guidelines will help you avoid most common issues and create reliable LED animations.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/berry_animation_docs/USER_FUNCTIONS.md b/lib/libesp32/berry_animation/berry_animation_docs/USER_FUNCTIONS.md
new file mode 100644
index 000000000..5a0e9ecea
--- /dev/null
+++ b/lib/libesp32/berry_animation/berry_animation_docs/USER_FUNCTIONS.md
@@ -0,0 +1,677 @@
+# User-Defined Functions
+
+Create custom animation functions in Berry and use them seamlessly in the Animation DSL.
+
+## Quick Start
+
+### 1. Create Your Function
+
+Write a Berry function that creates and returns an animation:
+
+```berry
+# Define a custom breathing effect
+def my_breathing(engine, color, speed)
+ var anim = animation.pulsating_animation(engine)
+ anim.color = color
+ anim.min_brightness = 50
+ anim.max_brightness = 255
+ anim.period = speed
+ return anim
+end
+```
+
+### 2. Register It
+
+Make your function available in DSL:
+
+```berry
+animation.register_user_function("breathing", my_breathing)
+```
+
+### 3. Use It in DSL
+
+First, import your user functions module, then call your function directly in computed parameters:
+
+```berry
+# Import your user functions module
+import user_functions
+
+# Use your custom function in computed parameters
+animation calm = solid(color=blue)
+calm.opacity = breathing_effect()
+
+animation energetic = solid(color=red)
+energetic.opacity = breathing_effect()
+
+sequence demo {
+ play calm for 10s
+ play energetic for 5s
+}
+
+run demo
+```
+
+## Importing User Functions
+
+### DSL Import Statement
+
+The DSL supports importing Berry modules using the `import` keyword. This is the recommended way to make user functions available in your animations:
+
+```berry
+# Import user functions at the beginning of your DSL file
+import user_functions
+
+# Now user functions are available directly
+animation test = solid(color=blue)
+test.opacity = my_function()
+```
+
+### Import Behavior
+
+- **Module Loading**: `import user_functions` transpiles to Berry `import "user_functions"`
+- **Function Registration**: The imported module should register functions using `animation.register_user_function()`
+- **Availability**: Once imported, functions are available throughout the DSL file
+- **No Compile-Time Checking**: The DSL doesn't validate user function existence at compile time
+
+### Example User Functions Module
+
+Create a file called `user_functions.be`:
+
+```berry
+import animation
+
+# Define your custom functions
+def rand_demo(engine)
+ import math
+ return math.rand() % 256 # Random value 0-255
+end
+
+def breathing_effect(engine, base_value, amplitude)
+ import math
+ var time_factor = (engine.time_ms / 1000) % 4 # 4-second cycle
+ var breath = math.sin(time_factor * math.pi / 2)
+ return int(base_value + breath * amplitude)
+end
+
+# Register functions for DSL use
+animation.register_user_function("rand_demo", rand_demo)
+animation.register_user_function("breathing", breathing_effect)
+
+print("User functions loaded!")
+```
+
+### Using Imported Functions in DSL
+
+```berry
+import user_functions
+
+# Simple user function call
+animation random_test = solid(color=red)
+random_test.opacity = rand_demo()
+
+# User function with parameters
+animation breathing_blue = solid(color=blue)
+breathing_blue.opacity = breathing(128, 64)
+
+# User functions in mathematical expressions
+animation complex = solid(color=green)
+complex.opacity = max(50, min(255, rand_demo() + 100))
+
+run random_test
+```
+
+### Multiple Module Imports
+
+You can import multiple modules in the same DSL file:
+
+```berry
+import user_functions # Basic user functions
+import fire_effects # Fire animation functions
+import color_utilities # Color manipulation functions
+
+animation base = solid(color=random_color())
+base.opacity = breathing(200, 50)
+
+animation flames = solid(color=red)
+flames.opacity = fire_intensity(180)
+```
+
+## Common Patterns
+
+### Simple Color Effects
+
+```berry
+def solid_bright(engine, color, brightness_percent)
+ var anim = animation.solid_animation(engine)
+ anim.color = color
+ anim.brightness = int(brightness_percent * 255 / 100)
+ return anim
+end
+
+animation.register_user_function("bright", solid_bright)
+```
+
+```berry
+animation bright_red = solid(color=red)
+bright_red.opacity = bright(80)
+
+animation dim_blue = solid(color=blue)
+dim_blue.opacity = bright(30)
+```
+
+### Fire Effects
+
+```berry
+def custom_fire(engine, intensity, speed)
+ var color_provider = animation.rich_palette(engine)
+ color_provider.palette = animation.PALETTE_FIRE
+ color_provider.cycle_period = speed
+
+ var fire_anim = animation.filled(engine)
+ fire_anim.color_provider = color_provider
+ fire_anim.brightness = intensity
+ return fire_anim
+end
+
+animation.register_user_function("fire", custom_fire)
+```
+
+```berry
+animation campfire = solid(color=red)
+campfire.opacity = fire(200, 2000)
+
+animation torch = solid(color=orange)
+torch.opacity = fire(255, 500)
+```
+
+### Twinkling Effects
+
+```berry
+def twinkles(engine, color, count, period)
+ var anim = animation.twinkle_animation(engine)
+ anim.color = color
+ anim.count = count
+ anim.period = period
+ return anim
+end
+
+animation.register_user_function("twinkles", twinkles)
+```
+
+```berry
+animation stars = solid(color=white)
+stars.opacity = twinkles(12, 800ms)
+
+animation fairy_dust = solid(color=0xFFD700)
+fairy_dust.opacity = twinkles(8, 600ms)
+```
+
+### Position-Based Effects
+
+```berry
+def pulse_at(engine, color, position, width, speed)
+ var anim = animation.beacon_animation(engine)
+ anim.color = color
+ anim.position = position
+ anim.width = width
+ anim.period = speed
+ return anim
+end
+
+animation.register_user_function("pulse_at", pulse_at)
+```
+
+```berry
+animation left_pulse = solid(color=green)
+left_pulse.position = pulse_at(5, 3, 2000)
+
+animation right_pulse = solid(color=blue)
+right_pulse.position = pulse_at(25, 3, 2000)
+```
+
+## Advanced Examples
+
+### Multi-Layer Effects
+
+```berry
+def rainbow_twinkle(engine, base_speed, twinkle_density)
+ # Create base rainbow animation
+ var rainbow_provider = animation.rich_palette(engine)
+ rainbow_provider.palette = animation.PALETTE_RAINBOW
+ rainbow_provider.cycle_period = base_speed
+
+ var base_anim = animation.filled(engine)
+ base_anim.color_provider = rainbow_provider
+ base_anim.priority = 1
+
+ # Note: This is a simplified example
+ # Real multi-layer effects would require engine support
+ return base_anim
+end
+
+animation.register_user_function("rainbow_sparkle", rainbow_sparkle)
+```
+
+### Dynamic Palettes
+
+Since DSL palettes only accept hex colors and predefined color names (not custom colors), use user functions for dynamic palettes with custom colors:
+
+```berry
+def create_custom_palette(engine, base_color, variation_count, intensity)
+ # Create a palette with variations of the base color
+ var palette_bytes = bytes()
+
+ # Extract RGB components from base color
+ var r = (base_color >> 16) & 0xFF
+ var g = (base_color >> 8) & 0xFF
+ var b = base_color & 0xFF
+
+ # Create palette entries with color variations
+ for i : 0..(variation_count-1)
+ var position = int(i * 255 / (variation_count - 1))
+ var factor = intensity * i / (variation_count - 1) / 255
+
+ var new_r = int(r * factor)
+ var new_g = int(g * factor)
+ var new_b = int(b * factor)
+
+ # Add VRGB entry (Value, Red, Green, Blue)
+ palette_bytes.add(position, 1) # Position
+ palette_bytes.add(new_r, 1) # Red
+ palette_bytes.add(new_g, 1) # Green
+ palette_bytes.add(new_b, 1) # Blue
+ end
+
+ return palette_bytes
+end
+
+animation.register_user_function("custom_palette", create_custom_palette)
+```
+
+```berry
+# Use dynamic palette in DSL
+animation gradient_effect = rich_palette(
+ palette=custom_palette(0xFF6B35, 5, 255)
+ cycle_period=4s
+)
+
+run gradient_effect
+```
+
+### Preset Configurations
+
+```berry
+def police_lights(engine, flash_speed)
+ var anim = animation.pulsating_animation(engine)
+ anim.color = 0xFFFF0000 # Red
+ anim.min_brightness = 0
+ anim.max_brightness = 255
+ anim.period = flash_speed
+ return anim
+end
+
+def warning_strobe(engine)
+ return police_lights(engine, 200) # Fast strobe
+end
+
+def gentle_alert(engine)
+ return police_lights(engine, 1000) # Slow pulse
+end
+
+animation.register_user_function("police", police_lights)
+animation.register_user_function("strobe", warning_strobe)
+animation.register_user_function("alert", gentle_alert)
+```
+
+```berry
+animation emergency = solid(color=red)
+emergency.opacity = strobe()
+
+animation notification = solid(color=yellow)
+notification.opacity = alert()
+
+animation custom_police = solid(color=blue)
+custom_police.opacity = police(500)
+```
+
+## Function Organization
+
+### Single File Approach
+
+```berry
+# user_animations.be
+import animation
+
+def breathing(engine, color, period)
+ # ... implementation
+end
+
+def fire_effect(engine, intensity, speed)
+ # ... implementation
+end
+
+def twinkle_effect(engine, color, count, period)
+ # ... implementation
+end
+
+# Register all functions
+animation.register_user_function("breathing", breathing)
+animation.register_user_function("fire", fire_effect)
+animation.register_user_function("twinkle", twinkle_effect)
+
+print("Custom animations loaded!")
+```
+
+### Modular Approach
+
+```berry
+# animations/fire.be
+def fire_effect(engine, intensity, speed)
+ # ... implementation
+end
+
+def torch_effect(engine)
+ return fire_effect(engine, 255, 500)
+end
+
+return {
+ 'fire': fire_effect,
+ 'torch': torch_effect
+}
+```
+
+```berry
+# main.be
+import animation
+
+# Register functions
+animation.register_user_function("fire", fire_effects['fire'])
+animation.register_user_function("torch", fire_effects['torch'])
+```
+
+## Best Practices
+
+### Function Design
+
+1. **Use descriptive names**: `breathing_slow` not `bs`
+2. **Logical parameter order**: color first, then timing, then modifiers
+3. **Sensible defaults**: Make functions work with minimal parameters
+4. **Return animations**: Always return a configured animation object
+
+### Parameter Handling
+
+```berry
+def flexible_pulse(engine, color, period, min_brightness, max_brightness)
+ # Provide defaults for optional parameters
+ if min_brightness == nil min_brightness = 50 end
+ if max_brightness == nil max_brightness = 255 end
+
+ var anim = animation.pulsating_animation(engine)
+ anim.color = color
+ anim.period = period
+ anim.min_brightness = min_brightness
+ anim.max_brightness = max_brightness
+ return anim
+end
+```
+
+### Error Handling
+
+```berry
+def safe_comet(engine, color, tail_length, speed)
+ # Validate parameters
+ if tail_length < 1 tail_length = 1 end
+ if tail_length > 20 tail_length = 20 end
+ if speed < 100 speed = 100 end
+
+ var anim = animation.comet_animation(engine)
+ anim.color = color
+ anim.tail_length = tail_length
+ anim.speed = speed
+ return anim
+end
+```
+
+### Documentation
+
+```berry
+# Creates a pulsing animation with customizable brightness range
+# Parameters:
+# color: The color to pulse (hex or named color)
+# period: How long one pulse cycle takes (in milliseconds)
+# min_brightness: Minimum brightness (0-255, default: 50)
+# max_brightness: Maximum brightness (0-255, default: 255)
+# Returns: Configured pulse animation
+def breathing_effect(engine, color, period, min_brightness, max_brightness)
+ # ... implementation
+end
+```
+
+## User Functions in Computed Parameters
+
+User functions can be used in computed parameter expressions alongside mathematical functions, creating powerful dynamic animations:
+
+### Simple User Function in Computed Parameter
+
+```berry
+# Simple user function call in property assignment
+animation base = solid(color=blue, priority=10)
+base.opacity = rand_demo() # User function as computed parameter
+```
+
+### User Functions with Mathematical Operations
+
+```berry
+# Get strip length for calculations
+set strip_len = strip_length()
+
+# Mix user functions with mathematical functions
+animation dynamic_solid = solid(
+ color=purple
+ opacity=max(50, min(255, rand_demo() + 100)) # Random opacity with bounds
+ priority=15
+)
+```
+
+### User Functions in Complex Expressions
+
+```berry
+# Use user function in arithmetic expressions
+animation random_effect = solid(
+ color=cyan
+ opacity=abs(rand_demo() - 128) + 64 # Random variation around middle value
+ priority=12
+)
+```
+
+### How It Works
+
+When you use user functions in computed parameters:
+
+1. **Automatic Detection**: The transpiler automatically detects user functions in expressions
+2. **Single Closure**: The entire expression is wrapped in a single efficient closure
+3. **Engine Access**: User functions receive `engine` in the closure context
+4. **Mixed Operations**: User functions work seamlessly with mathematical functions and arithmetic
+
+**Generated Code Example:**
+```berry
+# DSL code
+animation.opacity = max(100, breathing(red, 2000))
+```
+
+**Transpiles to:**
+```berry
+animation.opacity = animation.create_closure_value(engine,
+ def (engine, param_name, time_ms)
+ return (animation._math.max(100, animation.get_user_function('breathing')(engine, 0xFFFF0000, 2000)))
+ end)
+```
+
+### Available User Functions
+
+The following user functions are available by default:
+
+| Function | Parameters | Description |
+|----------|------------|-------------|
+| `rand_demo()` | none | Returns a random value (0-255) for demonstration |
+
+### Best Practices for Computed Parameters
+
+1. **Keep expressions readable**: Break complex expressions across multiple lines
+2. **Use meaningful variable names**: `set strip_len = strip_length()` not `set s = strip_length()`
+3. **Combine wisely**: Mix user functions with math functions for rich effects
+4. **Test incrementally**: Start simple and build up complex expressions
+
+## Loading and Using Functions
+
+### In Tasmota autoexec.be
+
+```berry
+import animation
+
+# Load your custom functions
+load("user_animations.be")
+
+# Now they're available in DSL with import
+var dsl_code =
+ "import user_functions\n"
+ "\n"
+ "animation my_fire = solid(color=red)\n"
+ "my_fire.opacity = fire(200, 1500)\n"
+ "animation my_twinkles = solid(color=white)\n"
+ "my_twinkles.opacity = twinkle(8, 400ms)\n"
+ "\n"
+ "sequence show {\n"
+ " play my_fire for 10s\n"
+ " play my_twinkles for 5s\n"
+ "}\n"
+ "\n"
+ "run show"
+
+animation_dsl.execute(dsl_code)
+```
+
+### From Files
+
+```berry
+# Save DSL with custom functions
+var my_show =
+ "import user_functions\n"
+ "\n"
+ "animation campfire = solid(color=orange)\n"
+ "campfire.opacity = fire(180, 2000)\n"
+ "animation stars = solid(color=0xFFFFFF)\n"
+ "stars.opacity = twinkle(6, 600ms)\n"
+ "\n"
+ "sequence night_scene {\n"
+ " play campfire for 30s\n"
+ " play stars for 10s\n"
+ "}\n"
+ "\n"
+ "run night_scene"
+
+# Save to file
+var f = open("night_scene.anim", "w")
+f.write(my_show)
+f.close()
+
+# Load and run
+animation_dsl.load_file("night_scene.anim")
+```
+
+## Implementation Details
+
+### Function Signature Requirements
+
+User functions must follow this exact pattern:
+
+```berry
+def function_name(engine, param1, param2, ...)
+ # engine is ALWAYS the first parameter
+ # followed by user-provided parameters
+ return animation_object
+end
+```
+
+### How the DSL Transpiler Works
+
+When you write DSL like this:
+```berry
+animation my_anim = my_function(arg1, arg2)
+```
+
+The transpiler generates Berry code like this:
+```berry
+var my_anim_ = animation.get_user_function('my_function')(engine, arg1, arg2)
+```
+
+The `engine` parameter is automatically inserted as the first argument.
+
+### Registration API
+
+```berry
+# Register a function
+animation.register_user_function(name, function)
+
+# Check if a function is registered
+if animation.is_user_function("my_function")
+ print("Function is registered")
+end
+
+# Get a registered function
+var func = animation.get_user_function("my_function")
+
+# List all registered functions
+var functions = animation.list_user_functions()
+for name : functions
+ print("Registered:", name)
+end
+```
+
+### Engine Parameter
+
+The `engine` parameter provides:
+- Access to the LED strip: `engine.get_strip_length()`
+- Current time: `engine.time_ms`
+- Animation management context
+
+Always use the provided engine when creating animations - don't create your own engine instances.
+
+### Return Value Requirements
+
+User functions must return an animation object that:
+- Extends `animation.animation` or `animation.pattern`
+- Is properly configured with the engine
+- Has all required parameters set
+
+### Error Handling
+
+The framework handles errors gracefully:
+- Invalid function names are caught at DSL compile time
+- Runtime errors in user functions are reported with context
+- Failed function calls don't crash the animation system
+
+## Troubleshooting
+
+### Function Not Found
+```
+Error: Unknown function 'my_function'
+```
+- Ensure the function is registered with `animation.register_user_function()`
+- Check that registration happens before DSL compilation
+- Verify the function name matches exactly (case-sensitive)
+
+### Wrong Number of Arguments
+```
+Error: Function call failed
+```
+- Check that your function signature matches the DSL call
+- Remember that `engine` is automatically added as the first parameter
+- Verify all required parameters are provided in the DSL
+
+### Animation Not Working
+- Ensure your function returns a valid animation object
+- Check that the animation is properly configured
+- Verify that the engine parameter is used correctly
+
+User-defined functions provide a powerful way to extend the Animation DSL with custom effects while maintaining the clean, declarative syntax that makes the DSL easy to use.
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/src/animations/breathe.be b/lib/libesp32/berry_animation/src/animations/breathe.be
index 92cf48f41..d189b030d 100644
--- a/lib/libesp32/berry_animation/src/animations/breathe.be
+++ b/lib/libesp32/berry_animation/src/animations/breathe.be
@@ -16,8 +16,8 @@ class BreatheAnimation : animation.animation
var breathe_provider # Internal breathe color provider
# Parameter definitions following parameterized class specification
+ # Note: 'color' is inherited from Animation base class
static var PARAMS = animation.enc_params({
- "base_color": {"default": 0xFFFFFFFF}, # The base color to breathe (32-bit ARGB value)
"min_brightness": {"min": 0, "max": 255, "default": 0}, # Minimum brightness level (0-255)
"max_brightness": {"min": 0, "max": 255, "default": 255}, # Maximum brightness level (0-255)
"period": {"min": 100, "default": 3000}, # Time for one complete breathe cycle in milliseconds
@@ -36,15 +36,21 @@ class BreatheAnimation : animation.animation
self.breathe_provider = animation.breathe_color(engine)
# Set the animation's color parameter to use the breathe provider
- self.color = self.breathe_provider
+ self.values["color"] = self.breathe_provider
end
# Handle parameter changes - propagate to internal breathe provider
def on_param_changed(name, value)
super(self).on_param_changed(name, value)
# Propagate relevant parameters to the breathe provider
- if name == "base_color"
- self.breathe_provider.base_color = value
+ if name == "color"
+ # When color is set, update the breathe_provider's base_color
+ # but keep the breathe_provider as the actual color source for rendering
+ if type(value) == 'int'
+ self.breathe_provider.base_color = value
+ # Restore the breathe_provider as the color source (bypass on_param_changed)
+ self.values["color"] = self.breathe_provider
+ end
elif name == "min_brightness"
self.breathe_provider.min_brightness = value
elif name == "max_brightness"
@@ -64,13 +70,6 @@ class BreatheAnimation : animation.animation
# Call parent start method first
super(self).start(start_time)
- # # Synchronize the breathe provider with current parameters
- # self.breathe_provider.base_color = self.base_color
- # self.breathe_provider.min_brightness = self.min_brightness
- # self.breathe_provider.max_brightness = self.max_brightness
- # self.breathe_provider.duration = self.period
- # self.breathe_provider.curve_factor = self.curve_factor
-
# Start the breathe provider with the same time
var actual_start_time = start_time != nil ? start_time : self.engine.time_ms
self.breathe_provider.start(actual_start_time)
@@ -84,7 +83,7 @@ class BreatheAnimation : animation.animation
# String representation of the animation
def tostring()
- return f"BreatheAnimation(base_color=0x{self.base_color :08x}, min_brightness={self.min_brightness}, max_brightness={self.max_brightness}, period={self.period}, curve_factor={self.curve_factor}, priority={self.priority}, running={self.is_running})"
+ return f"BreatheAnimation(color=0x{self.breathe_provider.base_color :08x}, min_brightness={self.min_brightness}, max_brightness={self.max_brightness}, period={self.period}, curve_factor={self.curve_factor}, priority={self.priority}, running={self.is_running})"
end
end
@@ -96,4 +95,4 @@ def pulsating_animation(engine)
return anim
end
-return {'breathe_animation': BreatheAnimation, 'pulsating_animation': pulsating_animation}
\ No newline at end of file
+return {'breathe_animation': BreatheAnimation, 'pulsating_animation': pulsating_animation}
diff --git a/lib/libesp32/berry_animation/src/animations/palettes.be b/lib/libesp32/berry_animation/src/animations/palettes.be
index 4683981a1..2c5a74723 100644
--- a/lib/libesp32/berry_animation/src/animations/palettes.be
+++ b/lib/libesp32/berry_animation/src/animations/palettes.be
@@ -7,15 +7,15 @@
# Define common palette constants (in VRGB format: Value, Red, Green, Blue)
# These palettes are compatible with the RichPaletteColorProvider
-# Standard rainbow palette (7 colors)
+# Standard rainbow palette (7 colors with roughly constant brightness)
var PALETTE_RAINBOW = bytes(
- "00FF0000" # Red (value 0)
- "24FFA500" # Orange (value 36)
+ "00FC0000" # Red (value 0)
+ "24FF8000" # Orange (value 36)
"49FFFF00" # Yellow (value 73)
"6E00FF00" # Green (value 110)
- "920000FF" # Blue (value 146)
- "B74B0082" # Indigo (value 183)
- "DBEE82EE" # Violet (value 219)
+ "9200FFFF" # Cyan (value 146)
+ "B70080FF" # Blue (value 183)
+ "DB8000FF" # Violet (value 219)
"FFFF0000" # Red (value 255)
)
@@ -35,41 +35,9 @@ var PALETTE_FIRE = bytes(
"FFFFFF00" # Yellow (value 255)
)
-# Sunset palette with tick-based timing (equal time intervals)
-var PALETTE_SUNSET_TICKS = bytes(
- "28FF4500" # Orange red (40 ticks)
- "28FF8C00" # Dark orange (40 ticks)
- "28FFD700" # Gold (40 ticks)
- "28FF69B4" # Hot pink (40 ticks)
- "28800080" # Purple (40 ticks)
- "28191970" # Midnight blue (40 ticks)
- "00000080" # Navy blue (0 ticks - end marker)
-)
-
-# Ocean palette (blue/green tones)
-var PALETTE_OCEAN = bytes(
- "00000080" # Navy blue (value 0)
- "400000FF" # Blue (value 64)
- "8000FFFF" # Cyan (value 128)
- "C000FF80" # Spring green (value 192)
- "FF008000" # Green (value 255)
-)
-
-# Forest palette (green tones)
-var PALETTE_FOREST = bytes(
- "00006400" # Dark green (value 0)
- "40228B22" # Forest green (value 64)
- "8032CD32" # Lime green (value 128)
- "C09AFF9A" # Mint green (value 192)
- "FF90EE90" # Light green (value 255)
-)
-
# Export all palettes
return {
"PALETTE_RAINBOW": PALETTE_RAINBOW,
"PALETTE_RGB": PALETTE_RGB,
- "PALETTE_FIRE": PALETTE_FIRE,
- "PALETTE_SUNSET_TICKS": PALETTE_SUNSET_TICKS,
- "PALETTE_OCEAN": PALETTE_OCEAN,
- "PALETTE_FOREST": PALETTE_FOREST
+ "PALETTE_FIRE": PALETTE_FIRE
}
\ No newline at end of file
diff --git a/lib/libesp32/berry_animation/src/core/frame_buffer_ntv.be b/lib/libesp32/berry_animation/src/core/frame_buffer_ntv.be
index 7455aa1cb..bb043b0e7 100644
--- a/lib/libesp32/berry_animation/src/core/frame_buffer_ntv.be
+++ b/lib/libesp32/berry_animation/src/core/frame_buffer_ntv.be
@@ -57,6 +57,9 @@ class FrameBufferNtv
# Linear interpolation between two colors using explicit blend factor
# Returns the blended color as a 32-bit integer (ARGB format - 0xAARRGGBB)
#
+ # This function matches the original berry_animate frame.blend(color1, color2, blend_factor) behavior
+ # Used for creating smooth gradients like beacon slew regions
+ #
# color1: destination/background color (ARGB format - 0xAARRGGBB)
# color2: source/foreground color (ARGB format - 0xAARRGGBB)
# blend_factor: blend factor (0-255 integer)
diff --git a/lib/libesp32/berry_animation/src/solidify/solidified_animation.h b/lib/libesp32/berry_animation/src/solidify/solidified_animation.h
index 9539d1325..9ab121b21 100644
--- a/lib/libesp32/berry_animation/src/solidify/solidified_animation.h
+++ b/lib/libesp32/berry_animation/src/solidify/solidified_animation.h
@@ -3,26 +3,380 @@
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
-// compact class 'BreatheAnimation' ktab size: 18, total: 25 (saved 56 bytes)
-static const bvalue be_ktab_class_BreatheAnimation[18] = {
- /* K0 */ be_nested_str_weak(on_param_changed),
+// compact class 'BreatheColorProvider' ktab size: 18, total: 29 (saved 88 bytes)
+static const bvalue be_ktab_class_BreatheColorProvider[18] = {
+ /* K0 */ be_nested_str_weak(BreatheColorProvider_X28base_color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X29),
/* K1 */ be_nested_str_weak(base_color),
- /* K2 */ be_nested_str_weak(breathe_provider),
- /* K3 */ be_nested_str_weak(min_brightness),
- /* K4 */ be_nested_str_weak(max_brightness),
- /* K5 */ be_nested_str_weak(period),
- /* K6 */ be_nested_str_weak(duration),
- /* K7 */ be_nested_str_weak(curve_factor),
- /* K8 */ be_nested_str_weak(BreatheAnimation_X28base_color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20period_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K9 */ be_nested_str_weak(priority),
- /* K10 */ be_nested_str_weak(is_running),
- /* K11 */ be_nested_str_weak(init),
- /* K12 */ be_nested_str_weak(animation),
- /* K13 */ be_nested_str_weak(breathe_color),
- /* K14 */ be_nested_str_weak(color),
- /* K15 */ be_nested_str_weak(start),
- /* K16 */ be_nested_str_weak(engine),
- /* K17 */ be_nested_str_weak(time_ms),
+ /* K2 */ be_nested_str_weak(min_brightness),
+ /* K3 */ be_nested_str_weak(max_brightness),
+ /* K4 */ be_nested_str_weak(duration),
+ /* K5 */ be_nested_str_weak(curve_factor),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(form),
+ /* K8 */ be_nested_str_weak(animation),
+ /* K9 */ be_nested_str_weak(COSINE),
+ /* K10 */ be_nested_str_weak(on_param_changed),
+ /* K11 */ be_nested_str_weak(produce_value),
+ /* K12 */ be_nested_str_weak(tasmota),
+ /* K13 */ be_nested_str_weak(scale_uint),
+ /* K14 */ be_const_int(0),
+ /* K15 */ be_nested_str_weak(init),
+ /* K16 */ be_nested_str_weak(min_value),
+ /* K17 */ be_nested_str_weak(max_value),
+};
+
+
+extern const bclass be_class_BreatheColorProvider;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_BreatheColorProvider_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BreatheColorProvider, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080000, // 0001 LDCONST R2 K0
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x88100102, // 0003 GETMBR R4 R0 K2
+ 0x88140103, // 0004 GETMBR R5 R0 K3
+ 0x88180104, // 0005 GETMBR R6 R0 K4
+ 0x881C0105, // 0006 GETMBR R7 R0 K5
+ 0x7C040C00, // 0007 CALL R1 6
+ 0x80040200, // 0008 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_BreatheColorProvider_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BreatheColorProvider, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x1C0C0305, // 0000 EQ R3 R1 K5
+ 0x780E0008, // 0001 JMPF R3 #000B
+ 0x1C0C0506, // 0002 EQ R3 R2 K6
+ 0x780E0003, // 0003 JMPF R3 #0008
+ 0xB80E1000, // 0004 GETNGBL R3 K8
+ 0x880C0709, // 0005 GETMBR R3 R3 K9
+ 0x90020E03, // 0006 SETMBR R0 K7 R3
+ 0x70020002, // 0007 JMP #000B
+ 0xB80E1000, // 0008 GETNGBL R3 K8
+ 0x880C0709, // 0009 GETMBR R3 R3 K9
+ 0x90020E03, // 000A SETMBR R0 K7 R3
+ 0x600C0003, // 000B GETGBL R3 G3
+ 0x5C100000, // 000C MOVE R4 R0
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x8C0C070A, // 000E GETMET R3 R3 K10
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x5C180400, // 0010 MOVE R6 R2
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_BreatheColorProvider_produce_value, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BreatheColorProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C070B, // 0003 GETMET R3 R3 K11
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x88100105, // 0007 GETMBR R4 R0 K5
+ 0x5C140600, // 0008 MOVE R5 R3
+ 0x24180906, // 0009 GT R6 R4 K6
+ 0x781A0019, // 000A JMPF R6 #0025
+ 0xB81A1800, // 000B GETNGBL R6 K12
+ 0x8C180D0D, // 000C GETMET R6 R6 K13
+ 0x5C200600, // 000D MOVE R8 R3
+ 0x5824000E, // 000E LDCONST R9 K14
+ 0x542A00FE, // 000F LDINT R10 255
+ 0x582C000E, // 0010 LDCONST R11 K14
+ 0x54321FFF, // 0011 LDINT R12 8192
+ 0x7C180C00, // 0012 CALL R6 6
+ 0x5C1C0800, // 0013 MOVE R7 R4
+ 0x24200F06, // 0014 GT R8 R7 K6
+ 0x78220005, // 0015 JMPF R8 #001C
+ 0x08200C06, // 0016 MUL R8 R6 R6
+ 0x54261FFF, // 0017 LDINT R9 8192
+ 0x0C201009, // 0018 DIV R8 R8 R9
+ 0x5C181000, // 0019 MOVE R6 R8
+ 0x041C0F06, // 001A SUB R7 R7 K6
+ 0x7001FFF7, // 001B JMP #0014
+ 0xB8221800, // 001C GETNGBL R8 K12
+ 0x8C20110D, // 001D GETMET R8 R8 K13
+ 0x5C280C00, // 001E MOVE R10 R6
+ 0x582C000E, // 001F LDCONST R11 K14
+ 0x54321FFF, // 0020 LDINT R12 8192
+ 0x5834000E, // 0021 LDCONST R13 K14
+ 0x543A00FE, // 0022 LDINT R14 255
+ 0x7C200C00, // 0023 CALL R8 6
+ 0x5C141000, // 0024 MOVE R5 R8
+ 0xB81A1800, // 0025 GETNGBL R6 K12
+ 0x8C180D0D, // 0026 GETMET R6 R6 K13
+ 0x5C200A00, // 0027 MOVE R8 R5
+ 0x5824000E, // 0028 LDCONST R9 K14
+ 0x542A00FE, // 0029 LDINT R10 255
+ 0x882C0102, // 002A GETMBR R11 R0 K2
+ 0x88300103, // 002B GETMBR R12 R0 K3
+ 0x7C180C00, // 002C CALL R6 6
+ 0x881C0101, // 002D GETMBR R7 R0 K1
+ 0x54220017, // 002E LDINT R8 24
+ 0x3C200E08, // 002F SHR R8 R7 R8
+ 0x542600FE, // 0030 LDINT R9 255
+ 0x2C201009, // 0031 AND R8 R8 R9
+ 0x5426000F, // 0032 LDINT R9 16
+ 0x3C240E09, // 0033 SHR R9 R7 R9
+ 0x542A00FE, // 0034 LDINT R10 255
+ 0x2C24120A, // 0035 AND R9 R9 R10
+ 0x542A0007, // 0036 LDINT R10 8
+ 0x3C280E0A, // 0037 SHR R10 R7 R10
+ 0x542E00FE, // 0038 LDINT R11 255
+ 0x2C28140B, // 0039 AND R10 R10 R11
+ 0x542E00FE, // 003A LDINT R11 255
+ 0x2C2C0E0B, // 003B AND R11 R7 R11
+ 0xB8321800, // 003C GETNGBL R12 K12
+ 0x8C30190D, // 003D GETMET R12 R12 K13
+ 0x5C381200, // 003E MOVE R14 R9
+ 0x583C000E, // 003F LDCONST R15 K14
+ 0x544200FE, // 0040 LDINT R16 255
+ 0x5844000E, // 0041 LDCONST R17 K14
+ 0x5C480C00, // 0042 MOVE R18 R6
+ 0x7C300C00, // 0043 CALL R12 6
+ 0x5C241800, // 0044 MOVE R9 R12
+ 0xB8321800, // 0045 GETNGBL R12 K12
+ 0x8C30190D, // 0046 GETMET R12 R12 K13
+ 0x5C381400, // 0047 MOVE R14 R10
+ 0x583C000E, // 0048 LDCONST R15 K14
+ 0x544200FE, // 0049 LDINT R16 255
+ 0x5844000E, // 004A LDCONST R17 K14
+ 0x5C480C00, // 004B MOVE R18 R6
+ 0x7C300C00, // 004C CALL R12 6
+ 0x5C281800, // 004D MOVE R10 R12
+ 0xB8321800, // 004E GETNGBL R12 K12
+ 0x8C30190D, // 004F GETMET R12 R12 K13
+ 0x5C381600, // 0050 MOVE R14 R11
+ 0x583C000E, // 0051 LDCONST R15 K14
+ 0x544200FE, // 0052 LDINT R16 255
+ 0x5844000E, // 0053 LDCONST R17 K14
+ 0x5C480C00, // 0054 MOVE R18 R6
+ 0x7C300C00, // 0055 CALL R12 6
+ 0x5C2C1800, // 0056 MOVE R11 R12
+ 0x54320017, // 0057 LDINT R12 24
+ 0x3830100C, // 0058 SHL R12 R8 R12
+ 0x5436000F, // 0059 LDINT R13 16
+ 0x3834120D, // 005A SHL R13 R9 R13
+ 0x3030180D, // 005B OR R12 R12 R13
+ 0x54360007, // 005C LDINT R13 8
+ 0x3834140D, // 005D SHL R13 R10 R13
+ 0x3030180D, // 005E OR R12 R12 R13
+ 0x3030180B, // 005F OR R12 R12 R11
+ 0x80041800, // 0060 RET 1 R12
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_BreatheColorProvider_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BreatheColorProvider, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08050F, // 0003 GETMET R2 R2 K15
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0xB80A1000, // 0006 GETNGBL R2 K8
+ 0x88080509, // 0007 GETMBR R2 R2 K9
+ 0x90020E02, // 0008 SETMBR R0 K7 R2
+ 0x9002210E, // 0009 SETMBR R0 K16 K14
+ 0x540A00FE, // 000A LDINT R2 255
+ 0x90022202, // 000B SETMBR R0 K17 R2
+ 0x540A0BB7, // 000C LDINT R2 3000
+ 0x90020802, // 000D SETMBR R0 K4 R2
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: BreatheColorProvider
+********************************************************************/
+extern const bclass be_class_OscillatorValueProvider;
+be_local_class(BreatheColorProvider,
+ 0,
+ &be_class_OscillatorValueProvider,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, 1), be_const_closure(class_BreatheColorProvider_tostring_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_BreatheColorProvider_init_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_BreatheColorProvider_on_param_changed_closure) },
+ { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(base_color, -1), be_const_bytes_instance(0400FF) },
+ { be_const_key_weak(max_brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
+ { be_const_key_weak(curve_factor, -1), be_const_bytes_instance(07000100050002) },
+ { be_const_key_weak(min_brightness, -1), be_const_bytes_instance(07000001FF000000) },
+ })) ) } )) },
+ { be_const_key_weak(produce_value, -1), be_const_closure(class_BreatheColorProvider_produce_value_closure) },
+ })),
+ be_str_weak(BreatheColorProvider)
+);
+
+/********************************************************************
+** Solidified function: animation_init_strip
+********************************************************************/
+be_local_closure(animation_init_strip, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 1, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(global),
+ /* K1 */ be_nested_str_weak(animation),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(contains),
+ /* K4 */ be_nested_str_weak(_engines),
+ /* K5 */ be_nested_str_weak(find),
+ /* K6 */ be_nested_str_weak(stop),
+ /* K7 */ be_nested_str_weak(clear),
+ /* K8 */ be_nested_str_weak(Leds),
+ /* K9 */ be_nested_str_weak(create_engine),
+ }),
+ be_str_weak(animation_init_strip),
+ &be_const_str_solidified,
+ ( &(const binstruction[37]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA40E0400, // 0002 IMPORT R3 K2
+ 0x8C100703, // 0003 GETMET R4 R3 K3
+ 0x5C180400, // 0004 MOVE R6 R2
+ 0x581C0004, // 0005 LDCONST R7 K4
+ 0x7C100600, // 0006 CALL R4 3
+ 0x74120002, // 0007 JMPT R4 #000B
+ 0x60100013, // 0008 GETGBL R4 G19
+ 0x7C100000, // 0009 CALL R4 0
+ 0x900A0804, // 000A SETMBR R2 K4 R4
+ 0x60100008, // 000B GETGBL R4 G8
+ 0x5C140000, // 000C MOVE R5 R0
+ 0x7C100200, // 000D CALL R4 1
+ 0x88140504, // 000E GETMBR R5 R2 K4
+ 0x8C140B05, // 000F GETMET R5 R5 K5
+ 0x5C1C0800, // 0010 MOVE R7 R4
+ 0x7C140400, // 0011 CALL R5 2
+ 0x4C180000, // 0012 LDNIL R6
+ 0x20180A06, // 0013 NE R6 R5 R6
+ 0x781A0004, // 0014 JMPF R6 #001A
+ 0x8C180B06, // 0015 GETMET R6 R5 K6
+ 0x7C180200, // 0016 CALL R6 1
+ 0x8C180B07, // 0017 GETMET R6 R5 K7
+ 0x7C180200, // 0018 CALL R6 1
+ 0x70020009, // 0019 JMP #0024
+ 0x60180016, // 001A GETGBL R6 G22
+ 0x881C0308, // 001B GETMBR R7 R1 K8
+ 0x5C200000, // 001C MOVE R8 R0
+ 0x7C180400, // 001D CALL R6 2
+ 0x8C1C0509, // 001E GETMET R7 R2 K9
+ 0x5C240C00, // 001F MOVE R9 R6
+ 0x7C1C0400, // 0020 CALL R7 2
+ 0x5C140E00, // 0021 MOVE R5 R7
+ 0x881C0504, // 0022 GETMBR R7 R2 K4
+ 0x981C0805, // 0023 SETIDX R7 R4 R5
+ 0x80040A00, // 0024 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'BreatheAnimation' ktab size: 20, total: 30 (saved 80 bytes)
+static const bvalue be_ktab_class_BreatheAnimation[20] = {
+ /* K0 */ be_nested_str_weak(on_param_changed),
+ /* K1 */ be_nested_str_weak(color),
+ /* K2 */ be_nested_str_weak(int),
+ /* K3 */ be_nested_str_weak(breathe_provider),
+ /* K4 */ be_nested_str_weak(base_color),
+ /* K5 */ be_nested_str_weak(values),
+ /* K6 */ be_nested_str_weak(min_brightness),
+ /* K7 */ be_nested_str_weak(max_brightness),
+ /* K8 */ be_nested_str_weak(period),
+ /* K9 */ be_nested_str_weak(duration),
+ /* K10 */ be_nested_str_weak(curve_factor),
+ /* K11 */ be_nested_str_weak(BreatheAnimation_X28color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20period_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K12 */ be_nested_str_weak(priority),
+ /* K13 */ be_nested_str_weak(is_running),
+ /* K14 */ be_nested_str_weak(init),
+ /* K15 */ be_nested_str_weak(animation),
+ /* K16 */ be_nested_str_weak(breathe_color),
+ /* K17 */ be_nested_str_weak(start),
+ /* K18 */ be_nested_str_weak(engine),
+ /* K19 */ be_nested_str_weak(time_ms),
};
@@ -44,7 +398,7 @@ be_local_closure(class_BreatheAnimation_on_param_changed, /* name */
&be_ktab_class_BreatheAnimation, /* shared constants */
be_str_weak(on_param_changed),
&be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
+ ( &(const binstruction[40]) { /* code */
0x600C0003, // 0000 GETGBL R3 G3
0x5C100000, // 0001 MOVE R4 R0
0x7C0C0200, // 0002 CALL R3 1
@@ -53,30 +407,38 @@ be_local_closure(class_BreatheAnimation_on_param_changed, /* name */
0x5C180400, // 0005 MOVE R6 R2
0x7C0C0600, // 0006 CALL R3 3
0x1C0C0301, // 0007 EQ R3 R1 K1
- 0x780E0002, // 0008 JMPF R3 #000C
- 0x880C0102, // 0009 GETMBR R3 R0 K2
- 0x900E0202, // 000A SETMBR R3 K1 R2
- 0x70020012, // 000B JMP #001F
- 0x1C0C0303, // 000C EQ R3 R1 K3
- 0x780E0002, // 000D JMPF R3 #0011
- 0x880C0102, // 000E GETMBR R3 R0 K2
- 0x900E0602, // 000F SETMBR R3 K3 R2
- 0x7002000D, // 0010 JMP #001F
- 0x1C0C0304, // 0011 EQ R3 R1 K4
- 0x780E0002, // 0012 JMPF R3 #0016
- 0x880C0102, // 0013 GETMBR R3 R0 K2
- 0x900E0802, // 0014 SETMBR R3 K4 R2
- 0x70020008, // 0015 JMP #001F
- 0x1C0C0305, // 0016 EQ R3 R1 K5
- 0x780E0002, // 0017 JMPF R3 #001B
- 0x880C0102, // 0018 GETMBR R3 R0 K2
- 0x900E0C02, // 0019 SETMBR R3 K6 R2
- 0x70020003, // 001A JMP #001F
- 0x1C0C0307, // 001B EQ R3 R1 K7
- 0x780E0001, // 001C JMPF R3 #001F
- 0x880C0102, // 001D GETMBR R3 R0 K2
- 0x900E0E02, // 001E SETMBR R3 K7 R2
- 0x80000000, // 001F RET 0
+ 0x780E000A, // 0008 JMPF R3 #0014
+ 0x600C0004, // 0009 GETGBL R3 G4
+ 0x5C100400, // 000A MOVE R4 R2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x1C0C0702, // 000C EQ R3 R3 K2
+ 0x780E0004, // 000D JMPF R3 #0013
+ 0x880C0103, // 000E GETMBR R3 R0 K3
+ 0x900E0802, // 000F SETMBR R3 K4 R2
+ 0x880C0105, // 0010 GETMBR R3 R0 K5
+ 0x88100103, // 0011 GETMBR R4 R0 K3
+ 0x980E0204, // 0012 SETIDX R3 K1 R4
+ 0x70020012, // 0013 JMP #0027
+ 0x1C0C0306, // 0014 EQ R3 R1 K6
+ 0x780E0002, // 0015 JMPF R3 #0019
+ 0x880C0103, // 0016 GETMBR R3 R0 K3
+ 0x900E0C02, // 0017 SETMBR R3 K6 R2
+ 0x7002000D, // 0018 JMP #0027
+ 0x1C0C0307, // 0019 EQ R3 R1 K7
+ 0x780E0002, // 001A JMPF R3 #001E
+ 0x880C0103, // 001B GETMBR R3 R0 K3
+ 0x900E0E02, // 001C SETMBR R3 K7 R2
+ 0x70020008, // 001D JMP #0027
+ 0x1C0C0308, // 001E EQ R3 R1 K8
+ 0x780E0002, // 001F JMPF R3 #0023
+ 0x880C0103, // 0020 GETMBR R3 R0 K3
+ 0x900E1202, // 0021 SETMBR R3 K9 R2
+ 0x70020003, // 0022 JMP #0027
+ 0x1C0C030A, // 0023 EQ R3 R1 K10
+ 0x780E0001, // 0024 JMPF R3 #0027
+ 0x880C0103, // 0025 GETMBR R3 R0 K3
+ 0x900E1402, // 0026 SETMBR R3 K10 R2
+ 0x80000000, // 0027 RET 0
})
)
);
@@ -99,18 +461,19 @@ be_local_closure(class_BreatheAnimation_tostring, /* name */
&be_ktab_class_BreatheAnimation, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
+ ( &(const binstruction[12]) { /* code */
0x60040018, // 0000 GETGBL R1 G24
- 0x58080008, // 0001 LDCONST R2 K8
- 0x880C0101, // 0002 GETMBR R3 R0 K1
- 0x88100103, // 0003 GETMBR R4 R0 K3
- 0x88140104, // 0004 GETMBR R5 R0 K4
- 0x88180105, // 0005 GETMBR R6 R0 K5
- 0x881C0107, // 0006 GETMBR R7 R0 K7
- 0x88200109, // 0007 GETMBR R8 R0 K9
- 0x8824010A, // 0008 GETMBR R9 R0 K10
- 0x7C041000, // 0009 CALL R1 8
- 0x80040200, // 000A RET 1 R1
+ 0x5808000B, // 0001 LDCONST R2 K11
+ 0x880C0103, // 0002 GETMBR R3 R0 K3
+ 0x880C0704, // 0003 GETMBR R3 R3 K4
+ 0x88100106, // 0004 GETMBR R4 R0 K6
+ 0x88140107, // 0005 GETMBR R5 R0 K7
+ 0x88180108, // 0006 GETMBR R6 R0 K8
+ 0x881C010A, // 0007 GETMBR R7 R0 K10
+ 0x8820010C, // 0008 GETMBR R8 R0 K12
+ 0x8824010D, // 0009 GETMBR R9 R0 K13
+ 0x7C041000, // 000A CALL R1 8
+ 0x80040200, // 000B RET 1 R1
})
)
);
@@ -133,21 +496,22 @@ be_local_closure(class_BreatheAnimation_init, /* name */
&be_ktab_class_BreatheAnimation, /* shared constants */
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
+ ( &(const binstruction[15]) { /* code */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C08050B, // 0003 GETMET R2 R2 K11
+ 0x8C08050E, // 0003 GETMET R2 R2 K14
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
- 0xB80A1800, // 0006 GETNGBL R2 K12
- 0x8C08050D, // 0007 GETMET R2 R2 K13
+ 0xB80A1E00, // 0006 GETNGBL R2 K15
+ 0x8C080510, // 0007 GETMET R2 R2 K16
0x5C100200, // 0008 MOVE R4 R1
0x7C080400, // 0009 CALL R2 2
- 0x90020402, // 000A SETMBR R0 K2 R2
- 0x88080102, // 000B GETMBR R2 R0 K2
- 0x90021C02, // 000C SETMBR R0 K14 R2
- 0x80000000, // 000D RET 0
+ 0x90020602, // 000A SETMBR R0 K3 R2
+ 0x88080105, // 000B GETMBR R2 R0 K5
+ 0x880C0103, // 000C GETMBR R3 R0 K3
+ 0x980A0203, // 000D SETIDX R2 K1 R3
+ 0x80000000, // 000E RET 0
})
)
);
@@ -174,7 +538,7 @@ be_local_closure(class_BreatheAnimation_start, /* name */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C08050F, // 0003 GETMET R2 R2 K15
+ 0x8C080511, // 0003 GETMET R2 R2 K17
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
0x4C080000, // 0006 LDNIL R2
@@ -182,10 +546,10 @@ be_local_closure(class_BreatheAnimation_start, /* name */
0x780A0001, // 0008 JMPF R2 #000B
0x5C080200, // 0009 MOVE R2 R1
0x70020001, // 000A JMP #000D
- 0x88080110, // 000B GETMBR R2 R0 K16
- 0x88080511, // 000C GETMBR R2 R2 K17
- 0x880C0102, // 000D GETMBR R3 R0 K2
- 0x8C0C070F, // 000E GETMET R3 R3 K15
+ 0x88080112, // 000B GETMBR R2 R0 K18
+ 0x88080513, // 000C GETMBR R2 R2 K19
+ 0x880C0103, // 000D GETMBR R3 R0 K3
+ 0x8C0C0711, // 000E GETMET R3 R3 K17
0x5C140400, // 000F MOVE R5 R2
0x7C0C0400, // 0010 CALL R3 2
0x80040000, // 0011 RET 1 R0
@@ -207,13 +571,12 @@ be_local_class(BreatheAnimation,
{ be_const_key_weak(tostring, -1), be_const_closure(class_BreatheAnimation_tostring_closure) },
{ be_const_key_weak(on_param_changed, 0), be_const_closure(class_BreatheAnimation_on_param_changed_closure) },
{ be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(5,
+ be_const_map( * be_nested_map(4,
( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(period, -1), be_const_bytes_instance(05006401B80B) },
{ be_const_key_weak(max_brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
{ be_const_key_weak(curve_factor, -1), be_const_bytes_instance(07000100050002) },
{ be_const_key_weak(min_brightness, -1), be_const_bytes_instance(07000001FF000000) },
- { be_const_key_weak(base_color, 0), be_const_bytes_instance(0400FF) },
- { be_const_key_weak(period, -1), be_const_bytes_instance(05006401B80B) },
})) ) } )) },
{ be_const_key_weak(init, 2), be_const_closure(class_BreatheAnimation_init_closure) },
{ be_const_key_weak(breathe_provider, -1), be_const_var(0) },
@@ -221,11 +584,221 @@ be_local_class(BreatheAnimation,
})),
be_str_weak(BreatheAnimation)
);
+// compact class 'RichPaletteAnimation' ktab size: 15, total: 19 (saved 32 bytes)
+static const bvalue be_ktab_class_RichPaletteAnimation[15] = {
+ /* K0 */ be_nested_str_weak(on_param_changed),
+ /* K1 */ be_nested_str_weak(palette),
+ /* K2 */ be_nested_str_weak(cycle_period),
+ /* K3 */ be_nested_str_weak(transition_type),
+ /* K4 */ be_nested_str_weak(brightness),
+ /* K5 */ be_nested_str_weak(color_provider),
+ /* K6 */ be_nested_str_weak(set_param),
+ /* K7 */ be_nested_str_weak(RichPaletteAnimation_X28cycle_period_X3D_X25s_X2C_X20brightness_X3D_X25s_X29),
+ /* K8 */ be_nested_str_weak(RichPaletteAnimation_X28uninitialized_X29),
+ /* K9 */ be_nested_str_weak(init),
+ /* K10 */ be_nested_str_weak(animation),
+ /* K11 */ be_nested_str_weak(rich_palette),
+ /* K12 */ be_nested_str_weak(values),
+ /* K13 */ be_nested_str_weak(color),
+ /* K14 */ be_nested_str_weak(start),
+};
+
+
+extern const bclass be_class_RichPaletteAnimation;
/********************************************************************
-** Solidified function: ease_out
+** Solidified function: on_param_changed
********************************************************************/
-be_local_closure(ease_out, /* name */
+be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C0301, // 0007 EQ R3 R1 K1
+ 0x740E0005, // 0008 JMPT R3 #000F
+ 0x1C0C0302, // 0009 EQ R3 R1 K2
+ 0x740E0003, // 000A JMPT R3 #000F
+ 0x1C0C0303, // 000B EQ R3 R1 K3
+ 0x740E0001, // 000C JMPT R3 #000F
+ 0x1C0C0304, // 000D EQ R3 R1 K4
+ 0x780E0005, // 000E JMPF R3 #0015
+ 0x880C0105, // 000F GETMBR R3 R0 K5
+ 0x8C0C0706, // 0010 GETMET R3 R3 K6
+ 0x5C140200, // 0011 MOVE R5 R1
+ 0x5C180400, // 0012 MOVE R6 R2
+ 0x7C0C0600, // 0013 CALL R3 3
+ 0x70020006, // 0014 JMP #001C
+ 0x600C0003, // 0015 GETGBL R3 G3
+ 0x5C100000, // 0016 MOVE R4 R0
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x8C0C0700, // 0018 GETMET R3 R3 K0
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x5C180400, // 001A MOVE R6 R2
+ 0x7C0C0600, // 001B CALL R3 3
+ 0x80000000, // 001C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_RichPaletteAnimation_tostring, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0xA8020008, // 0000 EXBLK 0 #000A
+ 0x60040018, // 0001 GETGBL R1 G24
+ 0x58080007, // 0002 LDCONST R2 K7
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x88100104, // 0004 GETMBR R4 R0 K4
+ 0x7C040600, // 0005 CALL R1 3
+ 0xA8040001, // 0006 EXBLK 1 1
+ 0x80040200, // 0007 RET 1 R1
+ 0xA8040001, // 0008 EXBLK 1 1
+ 0x70020004, // 0009 JMP #000F
+ 0xAC040000, // 000A CATCH R1 0 0
+ 0x70020001, // 000B JMP #000E
+ 0x80061000, // 000C RET 1 K8
+ 0x70020000, // 000D JMP #000F
+ 0xB0080000, // 000E RAISE 2 R0 R0
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_RichPaletteAnimation_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080509, // 0003 GETMET R2 R2 K9
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0xB80A1400, // 0006 GETNGBL R2 K10
+ 0x8C08050B, // 0007 GETMET R2 R2 K11
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x90020A02, // 000A SETMBR R0 K5 R2
+ 0x8808010C, // 000B GETMBR R2 R0 K12
+ 0x880C0105, // 000C GETMBR R3 R0 K5
+ 0x980A1A03, // 000D SETIDX R2 K13 R3
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(class_RichPaletteAnimation_start, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08050E, // 0003 GETMET R2 R2 K14
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080105, // 0006 GETMBR R2 R0 K5
+ 0x8C08050E, // 0007 GETMET R2 R2 K14
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x80040000, // 000A RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: RichPaletteAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(RichPaletteAnimation,
+ 1,
+ &be_class_Animation,
+ be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, -1), be_const_closure(class_RichPaletteAnimation_tostring_closure) },
+ { be_const_key_weak(on_param_changed, 0), be_const_closure(class_RichPaletteAnimation_on_param_changed_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(palette, -1), be_const_bytes_instance(0C0605) },
+ { be_const_key_weak(transition_type, -1), be_const_bytes_instance(1400050200010005) },
+ { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
+ { be_const_key_weak(cycle_period, 1), be_const_bytes_instance(050000018813) },
+ })) ) } )) },
+ { be_const_key_weak(init, 2), be_const_closure(class_RichPaletteAnimation_init_closure) },
+ { be_const_key_weak(color_provider, -1), be_const_var(0) },
+ { be_const_key_weak(start, -1), be_const_closure(class_RichPaletteAnimation_start_closure) },
+ })),
+ be_str_weak(RichPaletteAnimation)
+);
+
+/********************************************************************
+** Solidified function: square
+********************************************************************/
+be_local_closure(square, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -239,9 +812,9 @@ be_local_closure(ease_out, /* name */
/* K0 */ be_nested_str_weak(animation),
/* K1 */ be_nested_str_weak(oscillator_value),
/* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(EASE_OUT),
+ /* K3 */ be_nested_str_weak(SQUARE),
}),
- be_str_weak(ease_out),
+ be_str_weak(square),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
@@ -257,37 +830,1454 @@ be_local_closure(ease_out, /* name */
);
/*******************************************************************/
+// compact class 'GradientMeterAnimation' ktab size: 27, total: 38 (saved 88 bytes)
+static const bvalue be_ktab_class_GradientMeterAnimation[27] = {
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(peak_level),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(peak_time),
+ /* K4 */ be_nested_str_weak(_level),
+ /* K5 */ be_nested_str_weak(shift_period),
+ /* K6 */ be_nested_str_weak(peak_hold),
+ /* K7 */ be_nested_str_weak(level),
+ /* K8 */ be_nested_str_weak(update),
+ /* K9 */ be_nested_str_weak(get_param),
+ /* K10 */ be_nested_str_weak(color_source),
+ /* K11 */ be_nested_str_weak(start_time),
+ /* K12 */ be_nested_str_weak(tasmota),
+ /* K13 */ be_nested_str_weak(scale_uint),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_nested_str_weak(animation),
+ /* K16 */ be_nested_str_weak(color_provider),
+ /* K17 */ be_nested_str_weak(get_lut),
+ /* K18 */ be_nested_str_weak(LUT_FACTOR),
+ /* K19 */ be_nested_str_weak(pixels),
+ /* K20 */ be_nested_str_weak(_buffer),
+ /* K21 */ be_nested_str_weak(value_buffer),
+ /* K22 */ be_const_int(2),
+ /* K23 */ be_const_int(3),
+ /* K24 */ be_nested_str_weak(get_color_for_value),
+ /* K25 */ be_nested_str_weak(set_pixel_color),
+ /* K26 */ be_nested_str_weak(GradientMeterAnimation_X28level_X3D_X25s_X2C_X20peak_hold_X3D_X25sms_X2C_X20peak_X3D_X25s_X29),
+};
+
+
+extern const bclass be_class_GradientMeterAnimation;
/********************************************************************
-** Solidified function: triangle
+** Solidified function: init
********************************************************************/
-be_local_closure(triangle, /* name */
+be_local_closure(class_GradientMeterAnimation_init, /* name */
be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(TRIANGLE),
- }),
- be_str_weak(triangle),
+ &be_ktab_class_GradientMeterAnimation, /* shared constants */
+ be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
+ ( &(const binstruction[11]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x90020302, // 0006 SETMBR R0 K1 K2
+ 0x90020702, // 0007 SETMBR R0 K3 K2
+ 0x90020902, // 0008 SETMBR R0 K4 K2
+ 0x90020B02, // 0009 SETMBR R0 K5 K2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_GradientMeterAnimation_update, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_GradientMeterAnimation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x88080106, // 0000 GETMBR R2 R0 K6
+ 0x240C0502, // 0001 GT R3 R2 K2
+ 0x780E000F, // 0002 JMPF R3 #0013
+ 0x880C0107, // 0003 GETMBR R3 R0 K7
+ 0x90020803, // 0004 SETMBR R0 K4 R3
+ 0x88100101, // 0005 GETMBR R4 R0 K1
+ 0x28140604, // 0006 GE R5 R3 R4
+ 0x78160002, // 0007 JMPF R5 #000B
+ 0x90020203, // 0008 SETMBR R0 K1 R3
+ 0x90020601, // 0009 SETMBR R0 K3 R1
+ 0x70020007, // 000A JMP #0013
+ 0x24140902, // 000B GT R5 R4 K2
+ 0x78160005, // 000C JMPF R5 #0013
+ 0x88140103, // 000D GETMBR R5 R0 K3
+ 0x04140205, // 000E SUB R5 R1 R5
+ 0x24180A02, // 000F GT R6 R5 R2
+ 0x781A0001, // 0010 JMPF R6 #0013
+ 0x90020203, // 0011 SETMBR R0 K1 R3
+ 0x90020601, // 0012 SETMBR R0 K3 R1
+ 0x600C0003, // 0013 GETGBL R3 G3
+ 0x5C100000, // 0014 MOVE R4 R0
+ 0x7C0C0200, // 0015 CALL R3 1
+ 0x8C0C0708, // 0016 GETMET R3 R3 K8
+ 0x5C140200, // 0017 MOVE R5 R1
+ 0x7C0C0400, // 0018 CALL R3 2
+ 0x80000000, // 0019 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_GradientMeterAnimation_render, /* name */
+ be_nested_proto(
+ 21, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_GradientMeterAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[113]) { /* code */
+ 0x8C100109, // 0000 GETMET R4 R0 K9
+ 0x5818000A, // 0001 LDCONST R6 K10
+ 0x7C100400, // 0002 CALL R4 2
+ 0x4C140000, // 0003 LDNIL R5
+ 0x1C140805, // 0004 EQ R5 R4 R5
+ 0x78160001, // 0005 JMPF R5 #0008
+ 0x50140000, // 0006 LDBOOL R5 0 0
+ 0x80040A00, // 0007 RET 1 R5
+ 0x8814010B, // 0008 GETMBR R5 R0 K11
+ 0x04140405, // 0009 SUB R5 R2 R5
+ 0x88180104, // 000A GETMBR R6 R0 K4
+ 0x881C0106, // 000B GETMBR R7 R0 K6
+ 0xB8221800, // 000C GETNGBL R8 K12
+ 0x8C20110D, // 000D GETMET R8 R8 K13
+ 0x5C280C00, // 000E MOVE R10 R6
+ 0x582C0002, // 000F LDCONST R11 K2
+ 0x543200FE, // 0010 LDINT R12 255
+ 0x58340002, // 0011 LDCONST R13 K2
+ 0x5C380600, // 0012 MOVE R14 R3
+ 0x7C200C00, // 0013 CALL R8 6
+ 0x5425FFFE, // 0014 LDINT R9 -1
+ 0x24280F02, // 0015 GT R10 R7 K2
+ 0x782A000C, // 0016 JMPF R10 #0024
+ 0x88280101, // 0017 GETMBR R10 R0 K1
+ 0x24281406, // 0018 GT R10 R10 R6
+ 0x782A0009, // 0019 JMPF R10 #0024
+ 0xB82A1800, // 001A GETNGBL R10 K12
+ 0x8C28150D, // 001B GETMET R10 R10 K13
+ 0x88300101, // 001C GETMBR R12 R0 K1
+ 0x58340002, // 001D LDCONST R13 K2
+ 0x543A00FE, // 001E LDINT R14 255
+ 0x583C0002, // 001F LDCONST R15 K2
+ 0x5C400600, // 0020 MOVE R16 R3
+ 0x7C280C00, // 0021 CALL R10 6
+ 0x0428150E, // 0022 SUB R10 R10 K14
+ 0x5C241400, // 0023 MOVE R9 R10
+ 0x4C280000, // 0024 LDNIL R10
+ 0x602C000F, // 0025 GETGBL R11 G15
+ 0x5C300800, // 0026 MOVE R12 R4
+ 0xB8361E00, // 0027 GETNGBL R13 K15
+ 0x88341B10, // 0028 GETMBR R13 R13 K16
+ 0x7C2C0400, // 0029 CALL R11 2
+ 0x782E0028, // 002A JMPF R11 #0054
+ 0x8C2C0911, // 002B GETMET R11 R4 K17
+ 0x7C2C0200, // 002C CALL R11 1
+ 0x5C281600, // 002D MOVE R10 R11
+ 0x4C300000, // 002E LDNIL R12
+ 0x202C160C, // 002F NE R11 R11 R12
+ 0x782E0022, // 0030 JMPF R11 #0054
+ 0x882C0912, // 0031 GETMBR R11 R4 K18
+ 0x543200FF, // 0032 LDINT R12 256
+ 0x3C30180B, // 0033 SHR R12 R12 R11
+ 0x58340002, // 0034 LDCONST R13 K2
+ 0x88380313, // 0035 GETMBR R14 R1 K19
+ 0x8C381D14, // 0036 GETMET R14 R14 K20
+ 0x7C380200, // 0037 CALL R14 1
+ 0x8C3C1514, // 0038 GETMET R15 R10 K20
+ 0x7C3C0200, // 0039 CALL R15 1
+ 0x88400115, // 003A GETMBR R16 R0 K21
+ 0x8C402114, // 003B GETMET R16 R16 K20
+ 0x7C400200, // 003C CALL R16 1
+ 0x14441A08, // 003D LT R17 R13 R8
+ 0x78460013, // 003E JMPF R17 #0053
+ 0x9444200D, // 003F GETIDX R17 R16 R13
+ 0x3C48220B, // 0040 SHR R18 R17 R11
+ 0x544E00FE, // 0041 LDINT R19 255
+ 0x1C4C2213, // 0042 EQ R19 R17 R19
+ 0x784E0000, // 0043 JMPF R19 #0045
+ 0x5C481800, // 0044 MOVE R18 R12
+ 0x384C2516, // 0045 SHL R19 R18 K22
+ 0x004C1E13, // 0046 ADD R19 R15 R19
+ 0x94502702, // 0047 GETIDX R20 R19 K2
+ 0x983A0414, // 0048 SETIDX R14 K2 R20
+ 0x9450270E, // 0049 GETIDX R20 R19 K14
+ 0x983A1C14, // 004A SETIDX R14 K14 R20
+ 0x94502716, // 004B GETIDX R20 R19 K22
+ 0x983A2C14, // 004C SETIDX R14 K22 R20
+ 0x94502717, // 004D GETIDX R20 R19 K23
+ 0x983A2E14, // 004E SETIDX R14 K23 R20
+ 0x00341B0E, // 004F ADD R13 R13 K14
+ 0x54520003, // 0050 LDINT R20 4
+ 0x00381C14, // 0051 ADD R14 R14 R20
+ 0x7001FFE9, // 0052 JMP #003D
+ 0x7002000E, // 0053 JMP #0063
+ 0x582C0002, // 0054 LDCONST R11 K2
+ 0x14301608, // 0055 LT R12 R11 R8
+ 0x7832000B, // 0056 JMPF R12 #0063
+ 0x88300115, // 0057 GETMBR R12 R0 K21
+ 0x9430180B, // 0058 GETIDX R12 R12 R11
+ 0x8C340918, // 0059 GETMET R13 R4 K24
+ 0x5C3C1800, // 005A MOVE R15 R12
+ 0x5C400A00, // 005B MOVE R16 R5
+ 0x7C340600, // 005C CALL R13 3
+ 0x8C380319, // 005D GETMET R14 R1 K25
+ 0x5C401600, // 005E MOVE R16 R11
+ 0x5C441A00, // 005F MOVE R17 R13
+ 0x7C380600, // 0060 CALL R14 3
+ 0x002C170E, // 0061 ADD R11 R11 K14
+ 0x7001FFF1, // 0062 JMP #0055
+ 0x282C1208, // 0063 GE R11 R9 R8
+ 0x782E0009, // 0064 JMPF R11 #006F
+ 0x882C0115, // 0065 GETMBR R11 R0 K21
+ 0x942C1609, // 0066 GETIDX R11 R11 R9
+ 0x8C300918, // 0067 GETMET R12 R4 K24
+ 0x5C381600, // 0068 MOVE R14 R11
+ 0x5C3C0A00, // 0069 MOVE R15 R5
+ 0x7C300600, // 006A CALL R12 3
+ 0x8C340319, // 006B GETMET R13 R1 K25
+ 0x5C3C1200, // 006C MOVE R15 R9
+ 0x5C401800, // 006D MOVE R16 R12
+ 0x7C340600, // 006E CALL R13 3
+ 0x502C0200, // 006F LDBOOL R11 1 0
+ 0x80041600, // 0070 RET 1 R11
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_GradientMeterAnimation_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_GradientMeterAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x88040107, // 0000 GETMBR R1 R0 K7
+ 0x88080106, // 0001 GETMBR R2 R0 K6
+ 0x600C0018, // 0002 GETGBL R3 G24
+ 0x5810001A, // 0003 LDCONST R4 K26
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x881C0101, // 0006 GETMBR R7 R0 K1
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x80040600, // 0008 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: GradientMeterAnimation
+********************************************************************/
+extern const bclass be_class_PaletteGradientAnimation;
+be_local_class(GradientMeterAnimation,
+ 3,
+ &be_class_PaletteGradientAnimation,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(peak_hold, -1), be_const_bytes_instance(05000001E803) },
+ { be_const_key_weak(level, -1), be_const_bytes_instance(07000001FF0001FF00) },
+ })) ) } )) },
+ { be_const_key_weak(_level, -1), be_const_var(2) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_GradientMeterAnimation_tostring_closure) },
+ { be_const_key_weak(init, 0), be_const_closure(class_GradientMeterAnimation_init_closure) },
+ { be_const_key_weak(update, 1), be_const_closure(class_GradientMeterAnimation_update_closure) },
+ { be_const_key_weak(render, 2), be_const_closure(class_GradientMeterAnimation_render_closure) },
+ { be_const_key_weak(peak_time, -1), be_const_var(1) },
+ { be_const_key_weak(peak_level, -1), be_const_var(0) },
+ })),
+ be_str_weak(GradientMeterAnimation)
+);
+// compact class 'NoiseAnimation' ktab size: 49, total: 101 (saved 416 bytes)
+static const bvalue be_ktab_class_NoiseAnimation[49] = {
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(engine),
+ /* K2 */ be_nested_str_weak(strip_length),
+ /* K3 */ be_nested_str_weak(current_colors),
+ /* K4 */ be_nested_str_weak(resize),
+ /* K5 */ be_nested_str_weak(time_offset),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_const_int(-16777216),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(noise_table),
+ /* K10 */ be_nested_str_weak(color),
+ /* K11 */ be_nested_str_weak(animation),
+ /* K12 */ be_nested_str_weak(rich_palette),
+ /* K13 */ be_nested_str_weak(palette),
+ /* K14 */ be_nested_str_weak(PALETTE_RAINBOW),
+ /* K15 */ be_nested_str_weak(cycle_period),
+ /* K16 */ be_nested_str_weak(transition_type),
+ /* K17 */ be_nested_str_weak(brightness),
+ /* K18 */ be_nested_str_weak(int),
+ /* K19 */ be_nested_str_weak(add),
+ /* K20 */ be_nested_str_weak(setmember),
+ /* K21 */ be_nested_str_weak(seed),
+ /* K22 */ be_const_int(1103515245),
+ /* K23 */ be_const_int(2147483647),
+ /* K24 */ be_nested_str_weak(update),
+ /* K25 */ be_nested_str_weak(speed),
+ /* K26 */ be_nested_str_weak(start_time),
+ /* K27 */ be_nested_str_weak(tasmota),
+ /* K28 */ be_nested_str_weak(scale_uint),
+ /* K29 */ be_nested_str_weak(_calculate_noise),
+ /* K30 */ be_nested_str_weak(_fractal_noise),
+ /* K31 */ be_nested_str_weak(is_color_provider),
+ /* K32 */ be_nested_str_weak(get_color_for_value),
+ /* K33 */ be_nested_str_weak(resolve_value),
+ /* K34 */ be_nested_str_weak(on_param_changed),
+ /* K35 */ be_nested_str_weak(_init_noise_table),
+ /* K36 */ be_nested_str_weak(width),
+ /* K37 */ be_nested_str_weak(set_pixel_color),
+ /* K38 */ be_nested_str_weak(is_value_provider),
+ /* K39 */ be_nested_str_weak(0x_X2508x),
+ /* K40 */ be_nested_str_weak(NoiseAnimation_X28color_X3D_X25s_X2C_X20scale_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20octaves_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K41 */ be_nested_str_weak(scale),
+ /* K42 */ be_nested_str_weak(octaves),
+ /* K43 */ be_nested_str_weak(priority),
+ /* K44 */ be_nested_str_weak(is_running),
+ /* K45 */ be_nested_str_weak(start),
+ /* K46 */ be_nested_str_weak(persistence),
+ /* K47 */ be_nested_str_weak(_noise_1d),
+ /* K48 */ be_const_int(2),
+};
+
+
+extern const bclass be_class_NoiseAnimation;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_NoiseAnimation_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[44]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x88080502, // 0007 GETMBR R2 R2 K2
+ 0x600C0012, // 0008 GETGBL R3 G18
+ 0x7C0C0000, // 0009 CALL R3 0
+ 0x90020603, // 000A SETMBR R0 K3 R3
+ 0x880C0103, // 000B GETMBR R3 R0 K3
+ 0x8C0C0704, // 000C GETMET R3 R3 K4
+ 0x5C140400, // 000D MOVE R5 R2
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x90020B06, // 000F SETMBR R0 K5 K6
+ 0x580C0006, // 0010 LDCONST R3 K6
+ 0x14100602, // 0011 LT R4 R3 R2
+ 0x78120003, // 0012 JMPF R4 #0017
+ 0x88100103, // 0013 GETMBR R4 R0 K3
+ 0x98100707, // 0014 SETIDX R4 R3 K7
+ 0x000C0708, // 0015 ADD R3 R3 K8
+ 0x7001FFF9, // 0016 JMP #0011
+ 0x60100012, // 0017 GETGBL R4 G18
+ 0x7C100000, // 0018 CALL R4 0
+ 0x90021204, // 0019 SETMBR R0 K9 R4
+ 0x8810010A, // 001A GETMBR R4 R0 K10
+ 0x4C140000, // 001B LDNIL R5
+ 0x1C100805, // 001C EQ R4 R4 R5
+ 0x7812000C, // 001D JMPF R4 #002B
+ 0xB8121600, // 001E GETNGBL R4 K11
+ 0x8C10090C, // 001F GETMET R4 R4 K12
+ 0x5C180200, // 0020 MOVE R6 R1
+ 0x7C100400, // 0021 CALL R4 2
+ 0xB8161600, // 0022 GETNGBL R5 K11
+ 0x88140B0E, // 0023 GETMBR R5 R5 K14
+ 0x90121A05, // 0024 SETMBR R4 K13 R5
+ 0x54161387, // 0025 LDINT R5 5000
+ 0x90121E05, // 0026 SETMBR R4 K15 R5
+ 0x90122108, // 0027 SETMBR R4 K16 K8
+ 0x541600FE, // 0028 LDINT R5 255
+ 0x90122205, // 0029 SETMBR R4 K17 R5
+ 0x90021404, // 002A SETMBR R0 K10 R4
+ 0x80000000, // 002B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: setmember
+********************************************************************/
+be_local_closure(class_NoiseAnimation_setmember, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(setmember),
+ &be_const_str_solidified,
+ ( &(const binstruction[74]) { /* code */
+ 0x1C0C030A, // 0000 EQ R3 R1 K10
+ 0x780E003F, // 0001 JMPF R3 #0042
+ 0x600C0004, // 0002 GETGBL R3 G4
+ 0x5C100400, // 0003 MOVE R4 R2
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x1C0C0712, // 0005 EQ R3 R3 K18
+ 0x780E003A, // 0006 JMPF R3 #0042
+ 0x600C0015, // 0007 GETGBL R3 G21
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x8C100713, // 0009 GETMET R4 R3 K19
+ 0x58180006, // 000A LDCONST R6 K6
+ 0x581C0008, // 000B LDCONST R7 K8
+ 0x7C100600, // 000C CALL R4 3
+ 0x8C100713, // 000D GETMET R4 R3 K19
+ 0x58180006, // 000E LDCONST R6 K6
+ 0x581C0008, // 000F LDCONST R7 K8
+ 0x7C100600, // 0010 CALL R4 3
+ 0x8C100713, // 0011 GETMET R4 R3 K19
+ 0x58180006, // 0012 LDCONST R6 K6
+ 0x581C0008, // 0013 LDCONST R7 K8
+ 0x7C100600, // 0014 CALL R4 3
+ 0x8C100713, // 0015 GETMET R4 R3 K19
+ 0x58180006, // 0016 LDCONST R6 K6
+ 0x581C0008, // 0017 LDCONST R7 K8
+ 0x7C100600, // 0018 CALL R4 3
+ 0x8C100713, // 0019 GETMET R4 R3 K19
+ 0x541A00FE, // 001A LDINT R6 255
+ 0x581C0008, // 001B LDCONST R7 K8
+ 0x7C100600, // 001C CALL R4 3
+ 0x8C100713, // 001D GETMET R4 R3 K19
+ 0x541A000F, // 001E LDINT R6 16
+ 0x3C180406, // 001F SHR R6 R2 R6
+ 0x541E00FE, // 0020 LDINT R7 255
+ 0x2C180C07, // 0021 AND R6 R6 R7
+ 0x581C0008, // 0022 LDCONST R7 K8
+ 0x7C100600, // 0023 CALL R4 3
+ 0x8C100713, // 0024 GETMET R4 R3 K19
+ 0x541A0007, // 0025 LDINT R6 8
+ 0x3C180406, // 0026 SHR R6 R2 R6
+ 0x541E00FE, // 0027 LDINT R7 255
+ 0x2C180C07, // 0028 AND R6 R6 R7
+ 0x581C0008, // 0029 LDCONST R7 K8
+ 0x7C100600, // 002A CALL R4 3
+ 0x8C100713, // 002B GETMET R4 R3 K19
+ 0x541A00FE, // 002C LDINT R6 255
+ 0x2C180406, // 002D AND R6 R2 R6
+ 0x581C0008, // 002E LDCONST R7 K8
+ 0x7C100600, // 002F CALL R4 3
+ 0xB8121600, // 0030 GETNGBL R4 K11
+ 0x8C10090C, // 0031 GETMET R4 R4 K12
+ 0x88180101, // 0032 GETMBR R6 R0 K1
+ 0x7C100400, // 0033 CALL R4 2
+ 0x90121A03, // 0034 SETMBR R4 K13 R3
+ 0x54161387, // 0035 LDINT R5 5000
+ 0x90121E05, // 0036 SETMBR R4 K15 R5
+ 0x90122108, // 0037 SETMBR R4 K16 K8
+ 0x541600FE, // 0038 LDINT R5 255
+ 0x90122205, // 0039 SETMBR R4 K17 R5
+ 0x60140003, // 003A GETGBL R5 G3
+ 0x5C180000, // 003B MOVE R6 R0
+ 0x7C140200, // 003C CALL R5 1
+ 0x8C140B14, // 003D GETMET R5 R5 K20
+ 0x5C1C0200, // 003E MOVE R7 R1
+ 0x5C200800, // 003F MOVE R8 R4
+ 0x7C140600, // 0040 CALL R5 3
+ 0x70020006, // 0041 JMP #0049
+ 0x600C0003, // 0042 GETGBL R3 G3
+ 0x5C100000, // 0043 MOVE R4 R0
+ 0x7C0C0200, // 0044 CALL R3 1
+ 0x8C0C0714, // 0045 GETMET R3 R3 K20
+ 0x5C140200, // 0046 MOVE R5 R1
+ 0x5C180400, // 0047 MOVE R6 R2
+ 0x7C0C0600, // 0048 CALL R3 3
+ 0x80000000, // 0049 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _init_noise_table
+********************************************************************/
+be_local_closure(class_NoiseAnimation__init_noise_table, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(_init_noise_table),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x90021201, // 0002 SETMBR R0 K9 R1
+ 0x88040109, // 0003 GETMBR R1 R0 K9
+ 0x8C040304, // 0004 GETMET R1 R1 K4
+ 0x540E00FF, // 0005 LDINT R3 256
+ 0x7C040400, // 0006 CALL R1 2
+ 0x88040115, // 0007 GETMBR R1 R0 K21
+ 0x5C080200, // 0008 MOVE R2 R1
+ 0x580C0006, // 0009 LDCONST R3 K6
+ 0x541200FF, // 000A LDINT R4 256
+ 0x14100604, // 000B LT R4 R3 R4
+ 0x7812000A, // 000C JMPF R4 #0018
+ 0x08100516, // 000D MUL R4 R2 K22
+ 0x54163038, // 000E LDINT R5 12345
+ 0x00100805, // 000F ADD R4 R4 R5
+ 0x2C100917, // 0010 AND R4 R4 K23
+ 0x5C080800, // 0011 MOVE R2 R4
+ 0x88100109, // 0012 GETMBR R4 R0 K9
+ 0x541600FF, // 0013 LDINT R5 256
+ 0x10140405, // 0014 MOD R5 R2 R5
+ 0x98100605, // 0015 SETIDX R4 R3 R5
+ 0x000C0708, // 0016 ADD R3 R3 K8
+ 0x7001FFF1, // 0017 JMP #000A
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_NoiseAnimation_update, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080518, // 0003 GETMET R2 R2 K24
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080119, // 0006 GETMBR R2 R0 K25
+ 0x240C0506, // 0007 GT R3 R2 K6
+ 0x780E0011, // 0008 JMPF R3 #001B
+ 0x880C011A, // 0009 GETMBR R3 R0 K26
+ 0x040C0203, // 000A SUB R3 R1 R3
+ 0xB8123600, // 000B GETNGBL R4 K27
+ 0x8C10091C, // 000C GETMET R4 R4 K28
+ 0x5C180400, // 000D MOVE R6 R2
+ 0x581C0006, // 000E LDCONST R7 K6
+ 0x542200FE, // 000F LDINT R8 255
+ 0x58240006, // 0010 LDCONST R9 K6
+ 0x542A0004, // 0011 LDINT R10 5
+ 0x7C100C00, // 0012 CALL R4 6
+ 0x24140906, // 0013 GT R5 R4 K6
+ 0x78160005, // 0014 JMPF R5 #001B
+ 0x08140604, // 0015 MUL R5 R3 R4
+ 0x541A03E7, // 0016 LDINT R6 1000
+ 0x0C140A06, // 0017 DIV R5 R5 R6
+ 0x541A00FF, // 0018 LDINT R6 256
+ 0x10140A06, // 0019 MOD R5 R5 R6
+ 0x90020A05, // 001A SETMBR R0 K5 R5
+ 0x8C0C011D, // 001B GETMET R3 R0 K29
+ 0x5C140200, // 001C MOVE R5 R1
+ 0x7C0C0400, // 001D CALL R3 2
+ 0x80000000, // 001E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _calculate_noise
+********************************************************************/
+be_local_closure(class_NoiseAnimation__calculate_noise, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(_calculate_noise),
+ &be_const_str_solidified,
+ ( &(const binstruction[39]) { /* code */
+ 0x88080101, // 0000 GETMBR R2 R0 K1
+ 0x88080502, // 0001 GETMBR R2 R2 K2
+ 0x880C010A, // 0002 GETMBR R3 R0 K10
+ 0x58100006, // 0003 LDCONST R4 K6
+ 0x14140802, // 0004 LT R5 R4 R2
+ 0x7816001F, // 0005 JMPF R5 #0026
+ 0x8C14011E, // 0006 GETMET R5 R0 K30
+ 0x5C1C0800, // 0007 MOVE R7 R4
+ 0x88200105, // 0008 GETMBR R8 R0 K5
+ 0x7C140600, // 0009 CALL R5 3
+ 0x58180007, // 000A LDCONST R6 K7
+ 0xB81E1600, // 000B GETNGBL R7 K11
+ 0x8C1C0F1F, // 000C GETMET R7 R7 K31
+ 0x5C240600, // 000D MOVE R9 R3
+ 0x7C1C0400, // 000E CALL R7 2
+ 0x781E0009, // 000F JMPF R7 #001A
+ 0x881C0720, // 0010 GETMBR R7 R3 K32
+ 0x4C200000, // 0011 LDNIL R8
+ 0x201C0E08, // 0012 NE R7 R7 R8
+ 0x781E0005, // 0013 JMPF R7 #001A
+ 0x8C1C0720, // 0014 GETMET R7 R3 K32
+ 0x5C240A00, // 0015 MOVE R9 R5
+ 0x58280006, // 0016 LDCONST R10 K6
+ 0x7C1C0600, // 0017 CALL R7 3
+ 0x5C180E00, // 0018 MOVE R6 R7
+ 0x70020007, // 0019 JMP #0022
+ 0x8C1C0121, // 001A GETMET R7 R0 K33
+ 0x5C240600, // 001B MOVE R9 R3
+ 0x5828000A, // 001C LDCONST R10 K10
+ 0x542E0009, // 001D LDINT R11 10
+ 0x082C0A0B, // 001E MUL R11 R5 R11
+ 0x002C020B, // 001F ADD R11 R1 R11
+ 0x7C1C0800, // 0020 CALL R7 4
+ 0x5C180E00, // 0021 MOVE R6 R7
+ 0x881C0103, // 0022 GETMBR R7 R0 K3
+ 0x981C0806, // 0023 SETIDX R7 R4 R6
+ 0x00100908, // 0024 ADD R4 R4 K8
+ 0x7001FFDD, // 0025 JMP #0004
+ 0x80000000, // 0026 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_NoiseAnimation_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0722, // 0003 GETMET R3 R3 K34
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C0315, // 0007 EQ R3 R1 K21
+ 0x780E0001, // 0008 JMPF R3 #000B
+ 0x8C0C0123, // 0009 GETMET R3 R0 K35
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x880C0702, // 000C GETMBR R3 R3 K2
+ 0x6010000C, // 000D GETGBL R4 G12
+ 0x88140103, // 000E GETMBR R5 R0 K3
+ 0x7C100200, // 000F CALL R4 1
+ 0x20100803, // 0010 NE R4 R4 R3
+ 0x7812000C, // 0011 JMPF R4 #001F
+ 0x88100103, // 0012 GETMBR R4 R0 K3
+ 0x8C100904, // 0013 GETMET R4 R4 K4
+ 0x5C180600, // 0014 MOVE R6 R3
+ 0x7C100400, // 0015 CALL R4 2
+ 0x6010000C, // 0016 GETGBL R4 G12
+ 0x88140103, // 0017 GETMBR R5 R0 K3
+ 0x7C100200, // 0018 CALL R4 1
+ 0x14140803, // 0019 LT R5 R4 R3
+ 0x78160003, // 001A JMPF R5 #001F
+ 0x88140103, // 001B GETMBR R5 R0 K3
+ 0x98140907, // 001C SETIDX R5 R4 K7
+ 0x00100908, // 001D ADD R4 R4 K8
+ 0x7001FFF9, // 001E JMP #0019
+ 0x80000000, // 001F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_NoiseAnimation_render, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x58100006, // 0000 LDCONST R4 K6
+ 0x14140803, // 0001 LT R5 R4 R3
+ 0x78160009, // 0002 JMPF R5 #000D
+ 0x88140324, // 0003 GETMBR R5 R1 K36
+ 0x14140805, // 0004 LT R5 R4 R5
+ 0x78160004, // 0005 JMPF R5 #000B
+ 0x8C140325, // 0006 GETMET R5 R1 K37
+ 0x5C1C0800, // 0007 MOVE R7 R4
+ 0x88200103, // 0008 GETMBR R8 R0 K3
+ 0x94201004, // 0009 GETIDX R8 R8 R4
+ 0x7C140600, // 000A CALL R5 3
+ 0x00100908, // 000B ADD R4 R4 K8
+ 0x7001FFF3, // 000C JMP #0001
+ 0x50140200, // 000D LDBOOL R5 1 0
+ 0x80040A00, // 000E RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_NoiseAnimation_tostring, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x8804010A, // 0000 GETMBR R1 R0 K10
+ 0x4C080000, // 0001 LDNIL R2
+ 0xB80E1600, // 0002 GETNGBL R3 K11
+ 0x8C0C0726, // 0003 GETMET R3 R3 K38
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x600C0008, // 0007 GETGBL R3 G8
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x5C080600, // 000A MOVE R2 R3
+ 0x70020004, // 000B JMP #0011
+ 0x600C0018, // 000C GETGBL R3 G24
+ 0x58100027, // 000D LDCONST R4 K39
+ 0x5C140200, // 000E MOVE R5 R1
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x5C080600, // 0010 MOVE R2 R3
+ 0x600C0018, // 0011 GETGBL R3 G24
+ 0x58100028, // 0012 LDCONST R4 K40
+ 0x5C140400, // 0013 MOVE R5 R2
+ 0x88180129, // 0014 GETMBR R6 R0 K41
+ 0x881C0119, // 0015 GETMBR R7 R0 K25
+ 0x8820012A, // 0016 GETMBR R8 R0 K42
+ 0x8824012B, // 0017 GETMBR R9 R0 K43
+ 0x8828012C, // 0018 GETMBR R10 R0 K44
+ 0x7C0C0E00, // 0019 CALL R3 7
+ 0x80040600, // 001A RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(class_NoiseAnimation_start, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08052D, // 0003 GETMET R2 R2 K45
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x8C080123, // 0006 GETMET R2 R0 K35
+ 0x7C080200, // 0007 CALL R2 1
+ 0x90020B06, // 0008 SETMBR R0 K5 K6
+ 0x80040000, // 0009 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _noise_1d
+********************************************************************/
+be_local_closure(class_NoiseAnimation__noise_1d, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(_noise_1d),
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0x60080009, // 0000 GETGBL R2 G9
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x540E00FE, // 0003 LDINT R3 255
+ 0x2C080403, // 0004 AND R2 R2 R3
+ 0x600C0009, // 0005 GETGBL R3 G9
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x040C0203, // 0008 SUB R3 R1 R3
+ 0x88100109, // 0009 GETMBR R4 R0 K9
+ 0x94100802, // 000A GETIDX R4 R4 R2
+ 0x00140508, // 000B ADD R5 R2 K8
+ 0x541A00FE, // 000C LDINT R6 255
+ 0x2C140A06, // 000D AND R5 R5 R6
+ 0x88180109, // 000E GETMBR R6 R0 K9
+ 0x94140C05, // 000F GETIDX R5 R6 R5
+ 0xB81A3600, // 0010 GETNGBL R6 K27
+ 0x8C180D1C, // 0011 GETMET R6 R6 K28
+ 0x60200009, // 0012 GETGBL R8 G9
+ 0x542600FF, // 0013 LDINT R9 256
+ 0x08240609, // 0014 MUL R9 R3 R9
+ 0x7C200200, // 0015 CALL R8 1
+ 0x58240006, // 0016 LDCONST R9 K6
+ 0x542A00FF, // 0017 LDINT R10 256
+ 0x582C0006, // 0018 LDCONST R11 K6
+ 0x543200FE, // 0019 LDINT R12 255
+ 0x7C180C00, // 001A CALL R6 6
+ 0xB81E3600, // 001B GETNGBL R7 K27
+ 0x8C1C0F1C, // 001C GETMET R7 R7 K28
+ 0x5C240C00, // 001D MOVE R9 R6
+ 0x58280006, // 001E LDCONST R10 K6
+ 0x542E00FE, // 001F LDINT R11 255
+ 0x5C300800, // 0020 MOVE R12 R4
+ 0x5C340A00, // 0021 MOVE R13 R5
+ 0x7C1C0C00, // 0022 CALL R7 6
+ 0x80040E00, // 0023 RET 1 R7
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _fractal_noise
+********************************************************************/
+be_local_closure(class_NoiseAnimation__fractal_noise, /* name */
+ be_nested_proto(
+ 20, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_NoiseAnimation, /* shared constants */
+ be_str_weak(_fractal_noise),
+ &be_const_str_solidified,
+ ( &(const binstruction[62]) { /* code */
+ 0x580C0006, // 0000 LDCONST R3 K6
+ 0x541200FE, // 0001 LDINT R4 255
+ 0x88140129, // 0002 GETMBR R5 R0 K41
+ 0x8818012A, // 0003 GETMBR R6 R0 K42
+ 0x881C012E, // 0004 GETMBR R7 R0 K46
+ 0x5C200A00, // 0005 MOVE R8 R5
+ 0x58240006, // 0006 LDCONST R9 K6
+ 0x58280006, // 0007 LDCONST R10 K6
+ 0x142C1406, // 0008 LT R11 R10 R6
+ 0x782E0027, // 0009 JMPF R11 #0032
+ 0xB82E3600, // 000A GETNGBL R11 K27
+ 0x8C2C171C, // 000B GETMET R11 R11 K28
+ 0x08340208, // 000C MUL R13 R1 R8
+ 0x58380006, // 000D LDCONST R14 K6
+ 0x543E00FE, // 000E LDINT R15 255
+ 0x544200FE, // 000F LDINT R16 255
+ 0x083C1E10, // 0010 MUL R15 R15 R16
+ 0x58400006, // 0011 LDCONST R16 K6
+ 0x544600FE, // 0012 LDINT R17 255
+ 0x7C2C0C00, // 0013 CALL R11 6
+ 0x002C1602, // 0014 ADD R11 R11 R2
+ 0x8C30012F, // 0015 GETMET R12 R0 K47
+ 0x5C381600, // 0016 MOVE R14 R11
+ 0x7C300400, // 0017 CALL R12 2
+ 0xB8363600, // 0018 GETNGBL R13 K27
+ 0x8C341B1C, // 0019 GETMET R13 R13 K28
+ 0x5C3C1800, // 001A MOVE R15 R12
+ 0x58400006, // 001B LDCONST R16 K6
+ 0x544600FE, // 001C LDINT R17 255
+ 0x58480006, // 001D LDCONST R18 K6
+ 0x5C4C0800, // 001E MOVE R19 R4
+ 0x7C340C00, // 001F CALL R13 6
+ 0x000C060D, // 0020 ADD R3 R3 R13
+ 0x00241204, // 0021 ADD R9 R9 R4
+ 0xB8363600, // 0022 GETNGBL R13 K27
+ 0x8C341B1C, // 0023 GETMET R13 R13 K28
+ 0x5C3C0800, // 0024 MOVE R15 R4
+ 0x58400006, // 0025 LDCONST R16 K6
+ 0x544600FE, // 0026 LDINT R17 255
+ 0x58480006, // 0027 LDCONST R18 K6
+ 0x5C4C0E00, // 0028 MOVE R19 R7
+ 0x7C340C00, // 0029 CALL R13 6
+ 0x5C101A00, // 002A MOVE R4 R13
+ 0x08201130, // 002B MUL R8 R8 K48
+ 0x543600FE, // 002C LDINT R13 255
+ 0x2434100D, // 002D GT R13 R8 R13
+ 0x78360000, // 002E JMPF R13 #0030
+ 0x542200FE, // 002F LDINT R8 255
+ 0x00281508, // 0030 ADD R10 R10 K8
+ 0x7001FFD5, // 0031 JMP #0008
+ 0x242C1306, // 0032 GT R11 R9 K6
+ 0x782E0008, // 0033 JMPF R11 #003D
+ 0xB82E3600, // 0034 GETNGBL R11 K27
+ 0x8C2C171C, // 0035 GETMET R11 R11 K28
+ 0x5C340600, // 0036 MOVE R13 R3
+ 0x58380006, // 0037 LDCONST R14 K6
+ 0x5C3C1200, // 0038 MOVE R15 R9
+ 0x58400006, // 0039 LDCONST R16 K6
+ 0x544600FE, // 003A LDINT R17 255
+ 0x7C2C0C00, // 003B CALL R11 6
+ 0x5C0C1600, // 003C MOVE R3 R11
+ 0x80040600, // 003D RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: NoiseAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(NoiseAnimation,
+ 3,
+ &be_class_Animation,
+ be_nested_map(15,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(class_NoiseAnimation_init_closure) },
+ { be_const_key_weak(setmember, -1), be_const_closure(class_NoiseAnimation_setmember_closure) },
+ { be_const_key_weak(_init_noise_table, -1), be_const_closure(class_NoiseAnimation__init_noise_table_closure) },
+ { be_const_key_weak(PARAMS, 12), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(octaves, -1), be_const_bytes_instance(07000100040001) },
+ { be_const_key_weak(seed, 0), be_const_bytes_instance(07000002FFFF0000013930) },
+ { be_const_key_weak(speed, 3), be_const_bytes_instance(07000001FF00001E) },
+ { be_const_key_weak(persistence, 1), be_const_bytes_instance(07000001FF00018000) },
+ { be_const_key_weak(color, -1), be_const_bytes_instance(0406) },
+ { be_const_key_weak(scale, -1), be_const_bytes_instance(07000101FF000032) },
+ })) ) } )) },
+ { be_const_key_weak(update, 6), be_const_closure(class_NoiseAnimation_update_closure) },
+ { be_const_key_weak(time_offset, -1), be_const_var(1) },
+ { be_const_key_weak(_calculate_noise, -1), be_const_closure(class_NoiseAnimation__calculate_noise_closure) },
+ { be_const_key_weak(on_param_changed, 13), be_const_closure(class_NoiseAnimation_on_param_changed_closure) },
+ { be_const_key_weak(_noise_1d, -1), be_const_closure(class_NoiseAnimation__noise_1d_closure) },
+ { be_const_key_weak(noise_table, -1), be_const_var(2) },
+ { be_const_key_weak(tostring, 8), be_const_closure(class_NoiseAnimation_tostring_closure) },
+ { be_const_key_weak(start, -1), be_const_closure(class_NoiseAnimation_start_closure) },
+ { be_const_key_weak(current_colors, -1), be_const_var(0) },
+ { be_const_key_weak(render, -1), be_const_closure(class_NoiseAnimation_render_closure) },
+ { be_const_key_weak(_fractal_noise, -1), be_const_closure(class_NoiseAnimation__fractal_noise_closure) },
+ })),
+ be_str_weak(NoiseAnimation)
+);
+
+/********************************************************************
+** Solidified function: encode_constraints
+********************************************************************/
+be_local_closure(encode_constraints, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 13, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 3]) {
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(bool),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_const_int(3),
+ /* K3 */ be_nested_str_weak(instance),
+ /* K4 */ be_nested_str_weak(int),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(get_type_code),
+ &be_const_str_solidified,
+ ( &(const binstruction[50]) { /* code */
+ 0x60040004, // 0000 GETGBL R1 G4
+ 0x5C080000, // 0001 MOVE R2 R0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x4C080000, // 0003 LDNIL R2
+ 0x1C080002, // 0004 EQ R2 R0 R2
+ 0x780A0002, // 0005 JMPF R2 #0009
+ 0x540A0005, // 0006 LDINT R2 6
+ 0x80040400, // 0007 RET 1 R2
+ 0x70020027, // 0008 JMP #0031
+ 0x1C080300, // 0009 EQ R2 R1 K0
+ 0x780A0002, // 000A JMPF R2 #000E
+ 0x540A0004, // 000B LDINT R2 5
+ 0x80040400, // 000C RET 1 R2
+ 0x70020022, // 000D JMP #0031
+ 0x1C080301, // 000E EQ R2 R1 K1
+ 0x780A0001, // 000F JMPF R2 #0012
+ 0x80060400, // 0010 RET 1 K2
+ 0x7002001E, // 0011 JMP #0031
+ 0x1C080303, // 0012 EQ R2 R1 K3
+ 0x780A0007, // 0013 JMPF R2 #001C
+ 0x6008000F, // 0014 GETGBL R2 G15
+ 0x5C0C0000, // 0015 MOVE R3 R0
+ 0x60100015, // 0016 GETGBL R4 G21
+ 0x7C080400, // 0017 CALL R2 2
+ 0x780A0002, // 0018 JMPF R2 #001C
+ 0x540A0003, // 0019 LDINT R2 4
+ 0x80040400, // 001A RET 1 R2
+ 0x70020014, // 001B JMP #0031
+ 0x1C080304, // 001C EQ R2 R1 K4
+ 0x780A0011, // 001D JMPF R2 #0030
+ 0x5409FF7F, // 001E LDINT R2 -128
+ 0x28080002, // 001F GE R2 R0 R2
+ 0x780A0004, // 0020 JMPF R2 #0026
+ 0x540A007E, // 0021 LDINT R2 127
+ 0x18080002, // 0022 LE R2 R0 R2
+ 0x780A0001, // 0023 JMPF R2 #0026
+ 0x80060A00, // 0024 RET 1 K5
+ 0x70020008, // 0025 JMP #002F
+ 0x54097FFF, // 0026 LDINT R2 -32768
+ 0x28080002, // 0027 GE R2 R0 R2
+ 0x780A0004, // 0028 JMPF R2 #002E
+ 0x540A7FFE, // 0029 LDINT R2 32767
+ 0x18080002, // 002A LE R2 R0 R2
+ 0x780A0001, // 002B JMPF R2 #002E
+ 0x80060C00, // 002C RET 1 K6
+ 0x70020000, // 002D JMP #002F
+ 0x80060E00, // 002E RET 1 K7
+ 0x70020000, // 002F JMP #0031
+ 0x80060E00, // 0030 RET 1 K7
+ 0x80000000, // 0031 RET 0
+ })
+ ),
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(add),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_const_int(2),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_nested_str_weak(fromstring),
+ }),
+ be_str_weak(encode_value_with_type),
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0x68080000, // 0000 GETUPV R2 U0
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C0C0300, // 0003 GETMET R3 R1 K0
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x58180001, // 0005 LDCONST R6 K1
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x540E0005, // 0007 LDINT R3 6
+ 0x1C0C0403, // 0008 EQ R3 R2 R3
+ 0x780E0001, // 0009 JMPF R3 #000C
+ 0x80000600, // 000A RET 0
+ 0x7002003A, // 000B JMP #0047
+ 0x540E0004, // 000C LDINT R3 5
+ 0x1C0C0403, // 000D EQ R3 R2 R3
+ 0x780E0007, // 000E JMPF R3 #0017
+ 0x8C0C0300, // 000F GETMET R3 R1 K0
+ 0x78020001, // 0010 JMPF R0 #0013
+ 0x58140001, // 0011 LDCONST R5 K1
+ 0x70020000, // 0012 JMP #0014
+ 0x58140002, // 0013 LDCONST R5 K2
+ 0x58180001, // 0014 LDCONST R6 K1
+ 0x7C0C0600, // 0015 CALL R3 3
+ 0x7002002F, // 0016 JMP #0047
+ 0x1C0C0502, // 0017 EQ R3 R2 K2
+ 0x780E0005, // 0018 JMPF R3 #001F
+ 0x8C0C0300, // 0019 GETMET R3 R1 K0
+ 0x541600FE, // 001A LDINT R5 255
+ 0x2C140005, // 001B AND R5 R0 R5
+ 0x58180001, // 001C LDCONST R6 K1
+ 0x7C0C0600, // 001D CALL R3 3
+ 0x70020027, // 001E JMP #0047
+ 0x1C0C0501, // 001F EQ R3 R2 K1
+ 0x780E0005, // 0020 JMPF R3 #0027
+ 0x8C0C0300, // 0021 GETMET R3 R1 K0
+ 0x5416FFFE, // 0022 LDINT R5 65535
+ 0x2C140005, // 0023 AND R5 R0 R5
+ 0x58180003, // 0024 LDCONST R6 K3
+ 0x7C0C0600, // 0025 CALL R3 3
+ 0x7002001F, // 0026 JMP #0047
+ 0x1C0C0503, // 0027 EQ R3 R2 K3
+ 0x780E0004, // 0028 JMPF R3 #002E
+ 0x8C0C0300, // 0029 GETMET R3 R1 K0
+ 0x5C140000, // 002A MOVE R5 R0
+ 0x541A0003, // 002B LDINT R6 4
+ 0x7C0C0600, // 002C CALL R3 3
+ 0x70020018, // 002D JMP #0047
+ 0x1C0C0504, // 002E EQ R3 R2 K4
+ 0x780E000C, // 002F JMPF R3 #003D
+ 0x600C0015, // 0030 GETGBL R3 G21
+ 0x7C0C0000, // 0031 CALL R3 0
+ 0x8C0C0705, // 0032 GETMET R3 R3 K5
+ 0x5C140000, // 0033 MOVE R5 R0
+ 0x7C0C0400, // 0034 CALL R3 2
+ 0x8C100300, // 0035 GETMET R4 R1 K0
+ 0x6018000C, // 0036 GETGBL R6 G12
+ 0x5C1C0600, // 0037 MOVE R7 R3
+ 0x7C180200, // 0038 CALL R6 1
+ 0x581C0001, // 0039 LDCONST R7 K1
+ 0x7C100600, // 003A CALL R4 3
+ 0x40100203, // 003B CONNECT R4 R1 R3
+ 0x70020009, // 003C JMP #0047
+ 0x540E0003, // 003D LDINT R3 4
+ 0x1C0C0403, // 003E EQ R3 R2 R3
+ 0x780E0006, // 003F JMPF R3 #0047
+ 0x8C0C0300, // 0040 GETMET R3 R1 K0
+ 0x6014000C, // 0041 GETGBL R5 G12
+ 0x5C180000, // 0042 MOVE R6 R0
+ 0x7C140200, // 0043 CALL R5 1
+ 0x58180003, // 0044 LDCONST R6 K3
+ 0x7C0C0600, // 0045 CALL R3 3
+ 0x400C0200, // 0046 CONNECT R3 R1 R0
+ 0x80000000, // 0047 RET 0
+ })
+ ),
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(int),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(string),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_nested_str_weak(bytes),
+ /* K5 */ be_const_int(2),
+ /* K6 */ be_nested_str_weak(bool),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(any),
+ /* K9 */ be_nested_str_weak(instance),
+ /* K10 */ be_nested_str_weak(function),
+ }),
+ be_str_weak(get_explicit_type_code),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0x1C040100, // 0000 EQ R1 R0 K0
+ 0x78060001, // 0001 JMPF R1 #0004
+ 0x80060200, // 0002 RET 1 K1
+ 0x70020019, // 0003 JMP #001E
+ 0x1C040102, // 0004 EQ R1 R0 K2
+ 0x78060001, // 0005 JMPF R1 #0008
+ 0x80060600, // 0006 RET 1 K3
+ 0x70020015, // 0007 JMP #001E
+ 0x1C040104, // 0008 EQ R1 R0 K4
+ 0x78060001, // 0009 JMPF R1 #000C
+ 0x80060A00, // 000A RET 1 K5
+ 0x70020011, // 000B JMP #001E
+ 0x1C040106, // 000C EQ R1 R0 K6
+ 0x78060001, // 000D JMPF R1 #0010
+ 0x80060E00, // 000E RET 1 K7
+ 0x7002000D, // 000F JMP #001E
+ 0x1C040108, // 0010 EQ R1 R0 K8
+ 0x78060002, // 0011 JMPF R1 #0015
+ 0x54060003, // 0012 LDINT R1 4
+ 0x80040200, // 0013 RET 1 R1
+ 0x70020008, // 0014 JMP #001E
+ 0x1C040109, // 0015 EQ R1 R0 K9
+ 0x78060002, // 0016 JMPF R1 #001A
+ 0x54060004, // 0017 LDINT R1 5
+ 0x80040200, // 0018 RET 1 R1
+ 0x70020003, // 0019 JMP #001E
+ 0x1C04010A, // 001A EQ R1 R0 K10
+ 0x78060001, // 001B JMPF R1 #001E
+ 0x54060005, // 001C LDINT R1 6
+ 0x80040200, // 001D RET 1 R1
+ 0x54060003, // 001E LDINT R1 4
+ 0x80040200, // 001F RET 1 R1
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(resize),
+ /* K2 */ be_const_int(1),
+ /* K3 */ be_nested_str_weak(contains),
+ /* K4 */ be_nested_str_weak(type),
+ /* K5 */ be_nested_str_weak(min),
+ /* K6 */ be_nested_str_weak(max),
+ /* K7 */ be_const_int(2),
+ /* K8 */ be_nested_str_weak(default),
+ /* K9 */ be_nested_str_weak(add),
+ /* K10 */ be_nested_str_weak(enum),
+ /* K11 */ be_nested_str_weak(stop_iteration),
+ /* K12 */ be_nested_str_weak(nillable),
+ /* K13 */ be_nested_str_weak(set),
+ }),
+ be_str_weak(encode_single_constraint),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0x84040000, // 0000 CLOSURE R1 P0
+ 0x84080001, // 0001 CLOSURE R2 P1
+ 0x580C0000, // 0002 LDCONST R3 K0
+ 0x60100015, // 0003 GETGBL R4 G21
+ 0x7C100000, // 0004 CALL R4 0
+ 0x8C140901, // 0005 GETMET R5 R4 K1
+ 0x581C0002, // 0006 LDCONST R7 K2
+ 0x7C140400, // 0007 CALL R5 2
+ 0x84140002, // 0008 CLOSURE R5 P2
+ 0x4C180000, // 0009 LDNIL R6
+ 0x8C1C0103, // 000A GETMET R7 R0 K3
+ 0x58240004, // 000B LDCONST R9 K4
+ 0x7C1C0400, // 000C CALL R7 2
+ 0x781E0003, // 000D JMPF R7 #0012
+ 0x5C1C0A00, // 000E MOVE R7 R5
+ 0x94200104, // 000F GETIDX R8 R0 K4
+ 0x7C1C0200, // 0010 CALL R7 1
+ 0x5C180E00, // 0011 MOVE R6 R7
+ 0x8C1C0103, // 0012 GETMET R7 R0 K3
+ 0x58240005, // 0013 LDCONST R9 K5
+ 0x7C1C0400, // 0014 CALL R7 2
+ 0x781E0004, // 0015 JMPF R7 #001B
+ 0x300C0702, // 0016 OR R3 R3 K2
+ 0x5C1C0400, // 0017 MOVE R7 R2
+ 0x94200105, // 0018 GETIDX R8 R0 K5
+ 0x5C240800, // 0019 MOVE R9 R4
+ 0x7C1C0400, // 001A CALL R7 2
+ 0x8C1C0103, // 001B GETMET R7 R0 K3
+ 0x58240006, // 001C LDCONST R9 K6
+ 0x7C1C0400, // 001D CALL R7 2
+ 0x781E0004, // 001E JMPF R7 #0024
+ 0x300C0707, // 001F OR R3 R3 K7
+ 0x5C1C0400, // 0020 MOVE R7 R2
+ 0x94200106, // 0021 GETIDX R8 R0 K6
+ 0x5C240800, // 0022 MOVE R9 R4
+ 0x7C1C0400, // 0023 CALL R7 2
+ 0x8C1C0103, // 0024 GETMET R7 R0 K3
+ 0x58240008, // 0025 LDCONST R9 K8
+ 0x7C1C0400, // 0026 CALL R7 2
+ 0x781E0005, // 0027 JMPF R7 #002E
+ 0x541E0003, // 0028 LDINT R7 4
+ 0x300C0607, // 0029 OR R3 R3 R7
+ 0x5C1C0400, // 002A MOVE R7 R2
+ 0x94200108, // 002B GETIDX R8 R0 K8
+ 0x5C240800, // 002C MOVE R9 R4
+ 0x7C1C0400, // 002D CALL R7 2
+ 0x4C1C0000, // 002E LDNIL R7
+ 0x201C0C07, // 002F NE R7 R6 R7
+ 0x781E0005, // 0030 JMPF R7 #0037
+ 0x541E0007, // 0031 LDINT R7 8
+ 0x300C0607, // 0032 OR R3 R3 R7
+ 0x8C1C0909, // 0033 GETMET R7 R4 K9
+ 0x5C240C00, // 0034 MOVE R9 R6
+ 0x58280002, // 0035 LDCONST R10 K2
+ 0x7C1C0600, // 0036 CALL R7 3
+ 0x8C1C0103, // 0037 GETMET R7 R0 K3
+ 0x5824000A, // 0038 LDCONST R9 K10
+ 0x7C1C0400, // 0039 CALL R7 2
+ 0x781E0016, // 003A JMPF R7 #0052
+ 0x541E000F, // 003B LDINT R7 16
+ 0x300C0607, // 003C OR R3 R3 R7
+ 0x941C010A, // 003D GETIDX R7 R0 K10
+ 0x8C200909, // 003E GETMET R8 R4 K9
+ 0x6028000C, // 003F GETGBL R10 G12
+ 0x5C2C0E00, // 0040 MOVE R11 R7
+ 0x7C280200, // 0041 CALL R10 1
+ 0x582C0002, // 0042 LDCONST R11 K2
+ 0x7C200600, // 0043 CALL R8 3
+ 0x60200010, // 0044 GETGBL R8 G16
+ 0x5C240E00, // 0045 MOVE R9 R7
+ 0x7C200200, // 0046 CALL R8 1
+ 0xA8020006, // 0047 EXBLK 0 #004F
+ 0x5C241000, // 0048 MOVE R9 R8
+ 0x7C240000, // 0049 CALL R9 0
+ 0x5C280400, // 004A MOVE R10 R2
+ 0x5C2C1200, // 004B MOVE R11 R9
+ 0x5C300800, // 004C MOVE R12 R4
+ 0x7C280400, // 004D CALL R10 2
+ 0x7001FFF8, // 004E JMP #0048
+ 0x5820000B, // 004F LDCONST R8 K11
+ 0xAC200200, // 0050 CATCH R8 1 0
+ 0xB0080000, // 0051 RAISE 2 R0 R0
+ 0x8C1C0103, // 0052 GETMET R7 R0 K3
+ 0x5824000C, // 0053 LDCONST R9 K12
+ 0x7C1C0400, // 0054 CALL R7 2
+ 0x781E0003, // 0055 JMPF R7 #005A
+ 0x941C010C, // 0056 GETIDX R7 R0 K12
+ 0x781E0001, // 0057 JMPF R7 #005A
+ 0x541E001F, // 0058 LDINT R7 32
+ 0x300C0607, // 0059 OR R3 R3 R7
+ 0x8C1C090D, // 005A GETMET R7 R4 K13
+ 0x58240000, // 005B LDCONST R9 K0
+ 0x5C280600, // 005C MOVE R10 R3
+ 0x582C0002, // 005D LDCONST R11 K2
+ 0x7C1C0800, // 005E CALL R7 4
+ 0xA0000000, // 005F CLOSE R0
+ 0x80040800, // 0060 RET 1 R4
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(keys),
+ /* K1 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(encode_constraints),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x84040000, // 0000 CLOSURE R1 P0
+ 0x60080013, // 0001 GETGBL R2 G19
+ 0x7C080000, // 0002 CALL R2 0
+ 0x600C0010, // 0003 GETGBL R3 G16
+ 0x8C100100, // 0004 GETMET R4 R0 K0
+ 0x7C100200, // 0005 CALL R4 1
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0xA8020006, // 0007 EXBLK 0 #000F
+ 0x5C100600, // 0008 MOVE R4 R3
+ 0x7C100000, // 0009 CALL R4 0
+ 0x5C140200, // 000A MOVE R5 R1
+ 0x94180004, // 000B GETIDX R6 R0 R4
+ 0x7C140200, // 000C CALL R5 1
+ 0x98080805, // 000D SETIDX R2 R4 R5
+ 0x7001FFF8, // 000E JMP #0008
+ 0x580C0001, // 000F LDCONST R3 K1
+ 0xAC0C0200, // 0010 CATCH R3 1 0
+ 0xB0080000, // 0011 RAISE 2 R0 R0
+ 0x80040400, // 0012 RET 1 R2
})
)
);
@@ -329,59 +2319,33 @@ be_local_closure(set_event_active, /* name */
/********************************************************************
-** Solidified function: noise_rainbow
+** Solidified function: trigger_event
********************************************************************/
-be_local_closure(noise_rainbow, /* name */
+be_local_closure(trigger_event, /* name */
be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
+ 6, /* nstack */
+ 2, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
+ ( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(noise_animation),
- /* K2 */ be_nested_str_weak(rich_palette),
- /* K3 */ be_nested_str_weak(palette),
- /* K4 */ be_nested_str_weak(PALETTE_RAINBOW),
- /* K5 */ be_nested_str_weak(cycle_period),
- /* K6 */ be_nested_str_weak(transition_type),
- /* K7 */ be_const_int(1),
- /* K8 */ be_nested_str_weak(brightness),
- /* K9 */ be_nested_str_weak(color),
- /* K10 */ be_nested_str_weak(scale),
- /* K11 */ be_nested_str_weak(speed),
- /* K12 */ be_nested_str_weak(octaves),
+ /* K1 */ be_nested_str_weak(event_manager),
+ /* K2 */ be_nested_str_weak(trigger_event),
}),
- be_str_weak(noise_rainbow),
+ be_str_weak(trigger_event),
&be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x8C080502, // 0005 GETMET R2 R2 K2
- 0x5C100000, // 0006 MOVE R4 R0
- 0x7C080400, // 0007 CALL R2 2
- 0xB80E0000, // 0008 GETNGBL R3 K0
- 0x880C0704, // 0009 GETMBR R3 R3 K4
- 0x900A0603, // 000A SETMBR R2 K3 R3
- 0x540E1387, // 000B LDINT R3 5000
- 0x900A0A03, // 000C SETMBR R2 K5 R3
- 0x900A0D07, // 000D SETMBR R2 K6 K7
- 0x540E00FE, // 000E LDINT R3 255
- 0x900A1003, // 000F SETMBR R2 K8 R3
- 0x90061202, // 0010 SETMBR R1 K9 R2
- 0x540E0031, // 0011 LDINT R3 50
- 0x90061403, // 0012 SETMBR R1 K10 R3
- 0x540E001D, // 0013 LDINT R3 30
- 0x90061603, // 0014 SETMBR R1 K11 R3
- 0x90061907, // 0015 SETMBR R1 K12 K7
- 0x80040200, // 0016 RET 1 R1
+ ( &(const binstruction[ 7]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x88080501, // 0001 GETMBR R2 R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x7C080600, // 0005 CALL R2 3
+ 0x80000000, // 0006 RET 0
})
)
);
@@ -389,9 +2353,9 @@ be_local_closure(noise_rainbow, /* name */
/********************************************************************
-** Solidified function: twinkle_solid
+** Solidified function: triangle
********************************************************************/
-be_local_closure(twinkle_solid, /* name */
+be_local_closure(triangle, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -401,184 +2365,45 @@ be_local_closure(twinkle_solid, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
+ ( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(twinkle_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_const_int(-16744193),
- /* K4 */ be_nested_str_weak(density),
- /* K5 */ be_nested_str_weak(twinkle_speed),
- /* K6 */ be_nested_str_weak(fade_speed),
- /* K7 */ be_nested_str_weak(min_brightness),
- /* K8 */ be_nested_str_weak(max_brightness),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(TRIANGLE),
}),
- be_str_weak(twinkle_solid),
+ be_str_weak(triangle),
&be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
+ ( &(const binstruction[ 8]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0
0x7C040400, // 0003 CALL R1 2
- 0x90060503, // 0004 SETMBR R1 K2 K3
- 0x540A0063, // 0005 LDINT R2 100
- 0x90060802, // 0006 SETMBR R1 K4 R2
- 0x540A0005, // 0007 LDINT R2 6
- 0x90060A02, // 0008 SETMBR R1 K5 R2
- 0x540A00B3, // 0009 LDINT R2 180
- 0x90060C02, // 000A SETMBR R1 K6 R2
- 0x540A001F, // 000B LDINT R2 32
- 0x90060E02, // 000C SETMBR R1 K7 R2
- 0x540A00FE, // 000D LDINT R2 255
- 0x90061002, // 000E SETMBR R1 K8 R2
- 0x80040200, // 000F RET 1 R1
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
})
)
);
/*******************************************************************/
-// compact class 'CompositeColorProvider' ktab size: 16, total: 28 (saved 96 bytes)
-static const bvalue be_ktab_class_CompositeColorProvider[16] = {
- /* K0 */ be_nested_str_weak(providers),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_const_int(0),
- /* K3 */ be_const_int(1),
- /* K4 */ be_nested_str_weak(get_color_for_value),
- /* K5 */ be_nested_str_weak(brightness),
- /* K6 */ be_nested_str_weak(apply_brightness),
- /* K7 */ be_nested_str_weak(_blend_colors),
- /* K8 */ be_nested_str_weak(produce_value),
- /* K9 */ be_nested_str_weak(CompositeColorProvider_X28providers_X3D_X25s_X2C_X20blend_mode_X3D_X25s_X29),
- /* K10 */ be_nested_str_weak(blend_mode),
- /* K11 */ be_const_real_hex(0x437F0000),
- /* K12 */ be_const_int(2),
- /* K13 */ be_nested_str_weak(tasmota),
- /* K14 */ be_nested_str_weak(scale_uint),
- /* K15 */ be_nested_str_weak(init),
+// compact class 'StripLengthProvider' ktab size: 4, total: 6 (saved 16 bytes)
+static const bvalue be_ktab_class_StripLengthProvider[4] = {
+ /* K0 */ be_nested_str_weak(engine),
+ /* K1 */ be_nested_str_weak(strip_length),
+ /* K2 */ be_nested_str_weak(unknown),
+ /* K3 */ be_nested_str_weak(StripLengthProvider_X28length_X3D_X25s_X29),
};
-extern const bclass be_class_CompositeColorProvider;
-
-/********************************************************************
-** Solidified function: add_provider
-********************************************************************/
-be_local_closure(class_CompositeColorProvider_add_provider, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
- be_str_weak(add_provider),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x80040000, // 0004 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_color_for_value
-********************************************************************/
-be_local_closure(class_CompositeColorProvider_get_color_for_value, /* name */
- be_nested_proto(
- 10, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
- be_str_weak(get_color_for_value),
- &be_const_str_solidified,
- ( &(const binstruction[63]) { /* code */
- 0x600C000C, // 0000 GETGBL R3 G12
- 0x88100100, // 0001 GETMBR R4 R0 K0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x1C0C0702, // 0003 EQ R3 R3 K2
- 0x780E0001, // 0004 JMPF R3 #0007
- 0x540DFFFE, // 0005 LDINT R3 -1
- 0x80040600, // 0006 RET 1 R3
- 0x600C000C, // 0007 GETGBL R3 G12
- 0x88100100, // 0008 GETMBR R4 R0 K0
- 0x7C0C0200, // 0009 CALL R3 1
- 0x1C0C0703, // 000A EQ R3 R3 K3
- 0x780E000F, // 000B JMPF R3 #001C
- 0x880C0100, // 000C GETMBR R3 R0 K0
- 0x940C0702, // 000D GETIDX R3 R3 K2
- 0x8C0C0704, // 000E GETMET R3 R3 K4
- 0x5C140200, // 000F MOVE R5 R1
- 0x5C180400, // 0010 MOVE R6 R2
- 0x7C0C0600, // 0011 CALL R3 3
- 0x88100105, // 0012 GETMBR R4 R0 K5
- 0x541600FE, // 0013 LDINT R5 255
- 0x20140805, // 0014 NE R5 R4 R5
- 0x78160004, // 0015 JMPF R5 #001B
- 0x8C140106, // 0016 GETMET R5 R0 K6
- 0x5C1C0600, // 0017 MOVE R7 R3
- 0x5C200800, // 0018 MOVE R8 R4
- 0x7C140600, // 0019 CALL R5 3
- 0x80040A00, // 001A RET 1 R5
- 0x80040600, // 001B RET 1 R3
- 0x880C0100, // 001C GETMBR R3 R0 K0
- 0x940C0702, // 001D GETIDX R3 R3 K2
- 0x8C0C0704, // 001E GETMET R3 R3 K4
- 0x5C140200, // 001F MOVE R5 R1
- 0x5C180400, // 0020 MOVE R6 R2
- 0x7C0C0600, // 0021 CALL R3 3
- 0x58100003, // 0022 LDCONST R4 K3
- 0x6014000C, // 0023 GETGBL R5 G12
- 0x88180100, // 0024 GETMBR R6 R0 K0
- 0x7C140200, // 0025 CALL R5 1
- 0x14140805, // 0026 LT R5 R4 R5
- 0x7816000C, // 0027 JMPF R5 #0035
- 0x88140100, // 0028 GETMBR R5 R0 K0
- 0x94140A04, // 0029 GETIDX R5 R5 R4
- 0x8C140B04, // 002A GETMET R5 R5 K4
- 0x5C1C0200, // 002B MOVE R7 R1
- 0x5C200400, // 002C MOVE R8 R2
- 0x7C140600, // 002D CALL R5 3
- 0x8C180107, // 002E GETMET R6 R0 K7
- 0x5C200600, // 002F MOVE R8 R3
- 0x5C240A00, // 0030 MOVE R9 R5
- 0x7C180600, // 0031 CALL R6 3
- 0x5C0C0C00, // 0032 MOVE R3 R6
- 0x00100903, // 0033 ADD R4 R4 K3
- 0x7001FFED, // 0034 JMP #0023
- 0x88140105, // 0035 GETMBR R5 R0 K5
- 0x541A00FE, // 0036 LDINT R6 255
- 0x20180A06, // 0037 NE R6 R5 R6
- 0x781A0004, // 0038 JMPF R6 #003E
- 0x8C180106, // 0039 GETMET R6 R0 K6
- 0x5C200600, // 003A MOVE R8 R3
- 0x5C240A00, // 003B MOVE R9 R5
- 0x7C180600, // 003C CALL R6 3
- 0x80040C00, // 003D RET 1 R6
- 0x80040600, // 003E RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
+extern const bclass be_class_StripLengthProvider;
/********************************************************************
** Solidified function: produce_value
********************************************************************/
-be_local_closure(class_CompositeColorProvider_produce_value, /* name */
+be_local_closure(class_StripLengthProvider_produce_value, /* name */
be_nested_proto(
- 10, /* nstack */
+ 4, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -586,73 +2411,13 @@ be_local_closure(class_CompositeColorProvider_produce_value, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
+ &be_ktab_class_StripLengthProvider, /* shared constants */
be_str_weak(produce_value),
&be_const_str_solidified,
- ( &(const binstruction[63]) { /* code */
- 0x600C000C, // 0000 GETGBL R3 G12
- 0x88100100, // 0001 GETMBR R4 R0 K0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x1C0C0702, // 0003 EQ R3 R3 K2
- 0x780E0001, // 0004 JMPF R3 #0007
- 0x540DFFFE, // 0005 LDINT R3 -1
- 0x80040600, // 0006 RET 1 R3
- 0x600C000C, // 0007 GETGBL R3 G12
- 0x88100100, // 0008 GETMBR R4 R0 K0
- 0x7C0C0200, // 0009 CALL R3 1
- 0x1C0C0703, // 000A EQ R3 R3 K3
- 0x780E000F, // 000B JMPF R3 #001C
- 0x880C0100, // 000C GETMBR R3 R0 K0
- 0x940C0702, // 000D GETIDX R3 R3 K2
- 0x8C0C0708, // 000E GETMET R3 R3 K8
- 0x5C140200, // 000F MOVE R5 R1
- 0x5C180400, // 0010 MOVE R6 R2
- 0x7C0C0600, // 0011 CALL R3 3
- 0x88100105, // 0012 GETMBR R4 R0 K5
- 0x541600FE, // 0013 LDINT R5 255
- 0x20140805, // 0014 NE R5 R4 R5
- 0x78160004, // 0015 JMPF R5 #001B
- 0x8C140106, // 0016 GETMET R5 R0 K6
- 0x5C1C0600, // 0017 MOVE R7 R3
- 0x5C200800, // 0018 MOVE R8 R4
- 0x7C140600, // 0019 CALL R5 3
- 0x80040A00, // 001A RET 1 R5
- 0x80040600, // 001B RET 1 R3
- 0x880C0100, // 001C GETMBR R3 R0 K0
- 0x940C0702, // 001D GETIDX R3 R3 K2
- 0x8C0C0708, // 001E GETMET R3 R3 K8
- 0x5C140200, // 001F MOVE R5 R1
- 0x5C180400, // 0020 MOVE R6 R2
- 0x7C0C0600, // 0021 CALL R3 3
- 0x58100003, // 0022 LDCONST R4 K3
- 0x6014000C, // 0023 GETGBL R5 G12
- 0x88180100, // 0024 GETMBR R6 R0 K0
- 0x7C140200, // 0025 CALL R5 1
- 0x14140805, // 0026 LT R5 R4 R5
- 0x7816000C, // 0027 JMPF R5 #0035
- 0x88140100, // 0028 GETMBR R5 R0 K0
- 0x94140A04, // 0029 GETIDX R5 R5 R4
- 0x8C140B08, // 002A GETMET R5 R5 K8
- 0x5C1C0200, // 002B MOVE R7 R1
- 0x5C200400, // 002C MOVE R8 R2
- 0x7C140600, // 002D CALL R5 3
- 0x8C180107, // 002E GETMET R6 R0 K7
- 0x5C200600, // 002F MOVE R8 R3
- 0x5C240A00, // 0030 MOVE R9 R5
- 0x7C180600, // 0031 CALL R6 3
- 0x5C0C0C00, // 0032 MOVE R3 R6
- 0x00100903, // 0033 ADD R4 R4 K3
- 0x7001FFED, // 0034 JMP #0023
- 0x88140105, // 0035 GETMBR R5 R0 K5
- 0x541A00FE, // 0036 LDINT R6 255
- 0x20180A06, // 0037 NE R6 R5 R6
- 0x781A0004, // 0038 JMPF R6 #003E
- 0x8C180106, // 0039 GETMET R6 R0 K6
- 0x5C200600, // 003A MOVE R8 R3
- 0x5C240A00, // 003B MOVE R9 R5
- 0x7C180600, // 003C CALL R6 3
- 0x80040C00, // 003D RET 1 R6
- 0x80040600, // 003E RET 1 R3
+ ( &(const binstruction[ 3]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x880C0701, // 0001 GETMBR R3 R3 K1
+ 0x80040600, // 0002 RET 1 R3
})
)
);
@@ -662,7 +2427,7 @@ be_local_closure(class_CompositeColorProvider_produce_value, /* name */
/********************************************************************
** Solidified function: tostring
********************************************************************/
-be_local_closure(class_CompositeColorProvider_tostring, /* name */
+be_local_closure(class_StripLengthProvider_tostring, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
@@ -672,18 +2437,23 @@ be_local_closure(class_CompositeColorProvider_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
+ &be_ktab_class_StripLengthProvider, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080009, // 0001 LDCONST R2 K9
- 0x600C000C, // 0002 GETGBL R3 G12
- 0x88100100, // 0003 GETMBR R4 R0 K0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x8810010A, // 0005 GETMBR R4 R0 K10
- 0x7C040600, // 0006 CALL R1 3
- 0x80040200, // 0007 RET 1 R1
+ ( &(const binstruction[13]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x20040202, // 0002 NE R1 R1 R2
+ 0x78060002, // 0003 JMPF R1 #0007
+ 0x88040100, // 0004 GETMBR R1 R0 K0
+ 0x88040301, // 0005 GETMBR R1 R1 K1
+ 0x70020000, // 0006 JMP #0008
+ 0x58040002, // 0007 LDCONST R1 K2
+ 0x60080018, // 0008 GETGBL R2 G24
+ 0x580C0003, // 0009 LDCONST R3 K3
+ 0x5C100200, // 000A MOVE R4 R1
+ 0x7C080400, // 000B CALL R2 2
+ 0x80040400, // 000C RET 1 R2
})
)
);
@@ -691,11 +2461,90 @@ be_local_closure(class_CompositeColorProvider_tostring, /* name */
/********************************************************************
-** Solidified function: _blend_colors
+** Solidified class: StripLengthProvider
********************************************************************/
-be_local_closure(class_CompositeColorProvider__blend_colors, /* name */
+extern const bclass be_class_ValueProvider;
+be_local_class(StripLengthProvider,
+ 0,
+ &be_class_ValueProvider,
+ be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, -1), be_const_closure(class_StripLengthProvider_tostring_closure) },
+ { be_const_key_weak(produce_value, 0), be_const_closure(class_StripLengthProvider_produce_value_closure) },
+ })),
+ be_str_weak(StripLengthProvider)
+);
+
+/********************************************************************
+** Solidified function: unregister_event_handler
+********************************************************************/
+be_local_closure(unregister_event_handler, /* name */
be_nested_proto(
- 23, /* nstack */
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(event_manager),
+ /* K2 */ be_nested_str_weak(unregister_handler),
+ }),
+ be_str_weak(unregister_event_handler),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x8C040302, // 0002 GETMET R1 R1 K2
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'ColorCycleColorProvider' ktab size: 25, total: 52 (saved 216 bytes)
+static const bvalue be_ktab_class_ColorCycleColorProvider[25] = {
+ /* K0 */ be_nested_str_weak(cycle_period),
+ /* K1 */ be_nested_str_weak(_get_palette_size),
+ /* K2 */ be_const_int(1),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(current_index),
+ /* K5 */ be_nested_str_weak(_get_color_at_index),
+ /* K6 */ be_nested_str_weak(brightness),
+ /* K7 */ be_nested_str_weak(apply_brightness),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(scale_uint),
+ /* K10 */ be_nested_str_weak(ColorCycleColorProvider_X28palette_size_X3D_X25s_X2C_X20cycle_period_X3D_X25s_X2C_X20mode_X3D_X25s_X2C_X20current_index_X3D_X25s_X29),
+ /* K11 */ be_nested_str_weak(manual),
+ /* K12 */ be_nested_str_weak(auto),
+ /* K13 */ be_nested_str_weak(palette),
+ /* K14 */ be_nested_str_weak(on_param_changed),
+ /* K15 */ be_nested_str_weak(palette_size),
+ /* K16 */ be_nested_str_weak(values),
+ /* K17 */ be_nested_str_weak(value_error),
+ /* K18 */ be_nested_str_weak(Parameter_X20_X27palette_size_X27_X20is_X20read_X2Donly),
+ /* K19 */ be_nested_str_weak(next),
+ /* K20 */ be_nested_str_weak(_adjust_index),
+ /* K21 */ be_nested_str_weak(member),
+ /* K22 */ be_nested_str_weak(init),
+ /* K23 */ be_nested_str_weak(get),
+ /* K24 */ be_const_int(-16777216),
+};
+
+
+extern const bclass be_class_ColorCycleColorProvider;
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_produce_value, /* name */
+ be_nested_proto(
+ 13, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -703,161 +2552,66 @@ be_local_closure(class_CompositeColorProvider__blend_colors, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
- be_str_weak(_blend_colors),
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(produce_value),
&be_const_str_solidified,
- ( &(const binstruction[151]) { /* code */
- 0x880C010A, // 0000 GETMBR R3 R0 K10
- 0x54120017, // 0001 LDINT R4 24
- 0x3C100204, // 0002 SHR R4 R1 R4
- 0x541600FE, // 0003 LDINT R5 255
- 0x2C100805, // 0004 AND R4 R4 R5
- 0x5416000F, // 0005 LDINT R5 16
- 0x3C140205, // 0006 SHR R5 R1 R5
- 0x541A00FE, // 0007 LDINT R6 255
- 0x2C140A06, // 0008 AND R5 R5 R6
- 0x541A0007, // 0009 LDINT R6 8
- 0x3C180206, // 000A SHR R6 R1 R6
- 0x541E00FE, // 000B LDINT R7 255
- 0x2C180C07, // 000C AND R6 R6 R7
- 0x541E00FE, // 000D LDINT R7 255
- 0x2C1C0207, // 000E AND R7 R1 R7
- 0x54220017, // 000F LDINT R8 24
- 0x3C200408, // 0010 SHR R8 R2 R8
- 0x542600FE, // 0011 LDINT R9 255
- 0x2C201009, // 0012 AND R8 R8 R9
- 0x5426000F, // 0013 LDINT R9 16
- 0x3C240409, // 0014 SHR R9 R2 R9
- 0x542A00FE, // 0015 LDINT R10 255
- 0x2C24120A, // 0016 AND R9 R9 R10
- 0x542A0007, // 0017 LDINT R10 8
- 0x3C28040A, // 0018 SHR R10 R2 R10
- 0x542E00FE, // 0019 LDINT R11 255
- 0x2C28140B, // 001A AND R10 R10 R11
- 0x542E00FE, // 001B LDINT R11 255
- 0x2C2C040B, // 001C AND R11 R2 R11
- 0x4C300000, // 001D LDNIL R12
- 0x4C340000, // 001E LDNIL R13
- 0x4C380000, // 001F LDNIL R14
- 0x4C3C0000, // 0020 LDNIL R15
- 0x1C400702, // 0021 EQ R16 R3 K2
- 0x7842001C, // 0022 JMPF R16 #0040
- 0x0C40110B, // 0023 DIV R16 R8 K11
- 0x60440009, // 0024 GETGBL R17 G9
- 0x044A0610, // 0025 SUB R18 K3 R16
- 0x08480E12, // 0026 MUL R18 R7 R18
- 0x084C1610, // 0027 MUL R19 R11 R16
- 0x00482413, // 0028 ADD R18 R18 R19
- 0x7C440200, // 0029 CALL R17 1
- 0x5C342200, // 002A MOVE R13 R17
- 0x60440009, // 002B GETGBL R17 G9
- 0x044A0610, // 002C SUB R18 K3 R16
- 0x08480C12, // 002D MUL R18 R6 R18
- 0x084C1410, // 002E MUL R19 R10 R16
- 0x00482413, // 002F ADD R18 R18 R19
- 0x7C440200, // 0030 CALL R17 1
- 0x5C382200, // 0031 MOVE R14 R17
- 0x60440009, // 0032 GETGBL R17 G9
- 0x044A0610, // 0033 SUB R18 K3 R16
- 0x08480A12, // 0034 MUL R18 R5 R18
- 0x084C1210, // 0035 MUL R19 R9 R16
- 0x00482413, // 0036 ADD R18 R18 R19
- 0x7C440200, // 0037 CALL R17 1
- 0x5C3C2200, // 0038 MOVE R15 R17
- 0x24440808, // 0039 GT R17 R4 R8
- 0x78460001, // 003A JMPF R17 #003D
- 0x5C440800, // 003B MOVE R17 R4
- 0x70020000, // 003C JMP #003E
- 0x5C441000, // 003D MOVE R17 R8
- 0x5C302200, // 003E MOVE R12 R17
- 0x7002004C, // 003F JMP #008D
- 0x1C400703, // 0040 EQ R16 R3 K3
- 0x78420021, // 0041 JMPF R16 #0064
- 0x00400E0B, // 0042 ADD R16 R7 R11
- 0x5C342000, // 0043 MOVE R13 R16
- 0x00400C0A, // 0044 ADD R16 R6 R10
- 0x5C382000, // 0045 MOVE R14 R16
- 0x00400A09, // 0046 ADD R16 R5 R9
- 0x5C3C2000, // 0047 MOVE R15 R16
- 0x24400808, // 0048 GT R16 R4 R8
- 0x78420001, // 0049 JMPF R16 #004C
- 0x5C400800, // 004A MOVE R16 R4
- 0x70020000, // 004B JMP #004D
- 0x5C401000, // 004C MOVE R16 R8
- 0x5C302000, // 004D MOVE R12 R16
- 0x544200FE, // 004E LDINT R16 255
- 0x24401A10, // 004F GT R16 R13 R16
- 0x78420001, // 0050 JMPF R16 #0053
- 0x544200FE, // 0051 LDINT R16 255
- 0x70020000, // 0052 JMP #0054
- 0x5C401A00, // 0053 MOVE R16 R13
- 0x5C342000, // 0054 MOVE R13 R16
- 0x544200FE, // 0055 LDINT R16 255
- 0x24401C10, // 0056 GT R16 R14 R16
- 0x78420001, // 0057 JMPF R16 #005A
- 0x544200FE, // 0058 LDINT R16 255
- 0x70020000, // 0059 JMP #005B
- 0x5C401C00, // 005A MOVE R16 R14
- 0x5C382000, // 005B MOVE R14 R16
- 0x544200FE, // 005C LDINT R16 255
- 0x24401E10, // 005D GT R16 R15 R16
- 0x78420001, // 005E JMPF R16 #0061
- 0x544200FE, // 005F LDINT R16 255
- 0x70020000, // 0060 JMP #0062
- 0x5C401E00, // 0061 MOVE R16 R15
- 0x5C3C2000, // 0062 MOVE R15 R16
- 0x70020028, // 0063 JMP #008D
- 0x1C40070C, // 0064 EQ R16 R3 K12
- 0x78420026, // 0065 JMPF R16 #008D
- 0xB8421A00, // 0066 GETNGBL R16 K13
- 0x8C40210E, // 0067 GETMET R16 R16 K14
- 0x08480E0B, // 0068 MUL R18 R7 R11
- 0x584C0002, // 0069 LDCONST R19 K2
- 0x545200FE, // 006A LDINT R20 255
- 0x545600FE, // 006B LDINT R21 255
- 0x08502815, // 006C MUL R20 R20 R21
- 0x58540002, // 006D LDCONST R21 K2
- 0x545A00FE, // 006E LDINT R22 255
- 0x7C400C00, // 006F CALL R16 6
- 0x5C342000, // 0070 MOVE R13 R16
- 0xB8421A00, // 0071 GETNGBL R16 K13
- 0x8C40210E, // 0072 GETMET R16 R16 K14
- 0x08480C0A, // 0073 MUL R18 R6 R10
- 0x584C0002, // 0074 LDCONST R19 K2
- 0x545200FE, // 0075 LDINT R20 255
- 0x545600FE, // 0076 LDINT R21 255
- 0x08502815, // 0077 MUL R20 R20 R21
- 0x58540002, // 0078 LDCONST R21 K2
- 0x545A00FE, // 0079 LDINT R22 255
- 0x7C400C00, // 007A CALL R16 6
- 0x5C382000, // 007B MOVE R14 R16
- 0xB8421A00, // 007C GETNGBL R16 K13
- 0x8C40210E, // 007D GETMET R16 R16 K14
- 0x08480A09, // 007E MUL R18 R5 R9
- 0x584C0002, // 007F LDCONST R19 K2
- 0x545200FE, // 0080 LDINT R20 255
- 0x545600FE, // 0081 LDINT R21 255
- 0x08502815, // 0082 MUL R20 R20 R21
- 0x58540002, // 0083 LDCONST R21 K2
- 0x545A00FE, // 0084 LDINT R22 255
- 0x7C400C00, // 0085 CALL R16 6
- 0x5C3C2000, // 0086 MOVE R15 R16
- 0x24400808, // 0087 GT R16 R4 R8
- 0x78420001, // 0088 JMPF R16 #008B
- 0x5C400800, // 0089 MOVE R16 R4
- 0x70020000, // 008A JMP #008C
- 0x5C401000, // 008B MOVE R16 R8
- 0x5C302000, // 008C MOVE R12 R16
- 0x54420017, // 008D LDINT R16 24
- 0x38401810, // 008E SHL R16 R12 R16
- 0x5446000F, // 008F LDINT R17 16
- 0x38441E11, // 0090 SHL R17 R15 R17
- 0x30402011, // 0091 OR R16 R16 R17
- 0x54460007, // 0092 LDINT R17 8
- 0x38441C11, // 0093 SHL R17 R14 R17
- 0x30402011, // 0094 OR R16 R16 R17
- 0x3040200D, // 0095 OR R16 R16 R13
- 0x80042000, // 0096 RET 1 R16
+ ( &(const binstruction[56]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C100101, // 0001 GETMET R4 R0 K1
+ 0x7C100200, // 0002 CALL R4 1
+ 0x18140902, // 0003 LE R5 R4 K2
+ 0x74160001, // 0004 JMPT R5 #0007
+ 0x1C140703, // 0005 EQ R5 R3 K3
+ 0x78160015, // 0006 JMPF R5 #001D
+ 0x88140104, // 0007 GETMBR R5 R0 K4
+ 0x28180A04, // 0008 GE R6 R5 R4
+ 0x781A0001, // 0009 JMPF R6 #000C
+ 0x04180902, // 000A SUB R6 R4 K2
+ 0x5C140C00, // 000B MOVE R5 R6
+ 0x14180B03, // 000C LT R6 R5 K3
+ 0x781A0000, // 000D JMPF R6 #000F
+ 0x58140003, // 000E LDCONST R5 K3
+ 0x90020805, // 000F SETMBR R0 K4 R5
+ 0x8C180105, // 0010 GETMET R6 R0 K5
+ 0x88200104, // 0011 GETMBR R8 R0 K4
+ 0x7C180400, // 0012 CALL R6 2
+ 0x881C0106, // 0013 GETMBR R7 R0 K6
+ 0x542200FE, // 0014 LDINT R8 255
+ 0x20200E08, // 0015 NE R8 R7 R8
+ 0x78220004, // 0016 JMPF R8 #001C
+ 0x8C200107, // 0017 GETMET R8 R0 K7
+ 0x5C280C00, // 0018 MOVE R10 R6
+ 0x5C2C0E00, // 0019 MOVE R11 R7
+ 0x7C200600, // 001A CALL R8 3
+ 0x80041000, // 001B RET 1 R8
+ 0x80040C00, // 001C RET 1 R6
+ 0x10140403, // 001D MOD R5 R2 R3
+ 0xB81A1000, // 001E GETNGBL R6 K8
+ 0x8C180D09, // 001F GETMET R6 R6 K9
+ 0x5C200A00, // 0020 MOVE R8 R5
+ 0x58240003, // 0021 LDCONST R9 K3
+ 0x04280702, // 0022 SUB R10 R3 K2
+ 0x582C0003, // 0023 LDCONST R11 K3
+ 0x04300902, // 0024 SUB R12 R4 K2
+ 0x7C180C00, // 0025 CALL R6 6
+ 0x281C0C04, // 0026 GE R7 R6 R4
+ 0x781E0001, // 0027 JMPF R7 #002A
+ 0x041C0902, // 0028 SUB R7 R4 K2
+ 0x5C180E00, // 0029 MOVE R6 R7
+ 0x90020806, // 002A SETMBR R0 K4 R6
+ 0x8C1C0105, // 002B GETMET R7 R0 K5
+ 0x5C240C00, // 002C MOVE R9 R6
+ 0x7C1C0400, // 002D CALL R7 2
+ 0x88200106, // 002E GETMBR R8 R0 K6
+ 0x542600FE, // 002F LDINT R9 255
+ 0x20241009, // 0030 NE R9 R8 R9
+ 0x78260004, // 0031 JMPF R9 #0037
+ 0x8C240107, // 0032 GETMET R9 R0 K7
+ 0x5C2C0E00, // 0033 MOVE R11 R7
+ 0x5C301000, // 0034 MOVE R12 R8
+ 0x7C240600, // 0035 CALL R9 3
+ 0x80041200, // 0036 RET 1 R9
+ 0x80040E00, // 0037 RET 1 R7
})
)
);
@@ -865,9 +2619,163 @@ be_local_closure(class_CompositeColorProvider__blend_colors, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: _adjust_index
********************************************************************/
-be_local_closure(class_CompositeColorProvider_init, /* name */
+be_local_closure(class_ColorCycleColorProvider__adjust_index, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(_adjust_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x8C040101, // 0000 GETMET R1 R0 K1
+ 0x7C040200, // 0001 CALL R1 1
+ 0x24080303, // 0002 GT R2 R1 K3
+ 0x780A0009, // 0003 JMPF R2 #000E
+ 0x88080104, // 0004 GETMBR R2 R0 K4
+ 0x10080401, // 0005 MOD R2 R2 R1
+ 0x140C0503, // 0006 LT R3 R2 K3
+ 0x780E0000, // 0007 JMPF R3 #0009
+ 0x00080401, // 0008 ADD R2 R2 R1
+ 0x880C0104, // 0009 GETMBR R3 R0 K4
+ 0x200C0602, // 000A NE R3 R3 R2
+ 0x780E0000, // 000B JMPF R3 #000D
+ 0x90020802, // 000C SETMBR R0 K4 R2
+ 0x70020000, // 000D JMP #000F
+ 0x90020903, // 000E SETMBR R0 K4 K3
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x5808000A, // 0001 LDCONST R2 K10
+ 0x8C0C0101, // 0002 GETMET R3 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x88100100, // 0004 GETMBR R4 R0 K0
+ 0x88140100, // 0005 GETMBR R5 R0 K0
+ 0x78160001, // 0006 JMPF R5 #0009
+ 0x5814000B, // 0007 LDCONST R5 K11
+ 0x70020000, // 0008 JMP #000A
+ 0x5814000C, // 0009 LDCONST R5 K12
+ 0x88180104, // 000A GETMBR R6 R0 K4
+ 0x7C040A00, // 000B CALL R1 5
+ 0x80040200, // 000C RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _get_palette_size
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider__get_palette_size, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(_get_palette_size),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x8808010D, // 0001 GETMBR R2 R0 K13
+ 0x7C040200, // 0002 CALL R1 1
+ 0x540A0003, // 0003 LDINT R2 4
+ 0x0C040202, // 0004 DIV R1 R1 R2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C070E, // 0003 GETMET R3 R3 K14
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C030F, // 0007 EQ R3 R1 K15
+ 0x780E0005, // 0008 JMPF R3 #000F
+ 0x880C0110, // 0009 GETMBR R3 R0 K16
+ 0x8C100101, // 000A GETMET R4 R0 K1
+ 0x7C100200, // 000B CALL R4 1
+ 0x980E1E04, // 000C SETIDX R3 K15 R4
+ 0xB0062312, // 000D RAISE 1 K17 K18
+ 0x7002000A, // 000E JMP #001A
+ 0x1C0C0313, // 000F EQ R3 R1 K19
+ 0x780E0008, // 0010 JMPF R3 #001A
+ 0x200C0503, // 0011 NE R3 R2 K3
+ 0x780E0006, // 0012 JMPF R3 #001A
+ 0x880C0104, // 0013 GETMBR R3 R0 K4
+ 0x000C0602, // 0014 ADD R3 R3 R2
+ 0x90020803, // 0015 SETMBR R0 K4 R3
+ 0x8C0C0114, // 0016 GETMET R3 R0 K20
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x880C0110, // 0018 GETMBR R3 R0 K16
+ 0x980E2703, // 0019 SETIDX R3 K19 K3
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: member
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_member, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -877,20 +2785,24 @@ be_local_closure(class_CompositeColorProvider_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CompositeColorProvider, /* shared constants */
- be_str_weak(init),
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(member),
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08050F, // 0003 GETMET R2 R2 K15
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x60080012, // 0006 GETGBL R2 G18
- 0x7C080000, // 0007 CALL R2 0
- 0x90020002, // 0008 SETMBR R0 K0 R2
- 0x80000000, // 0009 RET 0
+ ( &(const binstruction[14]) { /* code */
+ 0x1C08030F, // 0000 EQ R2 R1 K15
+ 0x780A0003, // 0001 JMPF R2 #0006
+ 0x8C080101, // 0002 GETMET R2 R0 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x80040400, // 0004 RET 1 R2
+ 0x70020006, // 0005 JMP #000D
+ 0x60080003, // 0006 GETGBL R2 G3
+ 0x5C0C0000, // 0007 MOVE R3 R0
+ 0x7C080200, // 0008 CALL R2 1
+ 0x8C080515, // 0009 GETMET R2 R2 K21
+ 0x5C100200, // 000A MOVE R4 R1
+ 0x7C080400, // 000B CALL R2 2
+ 0x80040400, // 000C RET 1 R2
+ 0x80000000, // 000D RET 0
})
)
);
@@ -898,28 +2810,189 @@ be_local_closure(class_CompositeColorProvider_init, /* name */
/********************************************************************
-** Solidified class: CompositeColorProvider
+** Solidified function: get_color_for_value
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_get_color_for_value, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(get_color_for_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[53]) { /* code */
+ 0x8C0C0101, // 0000 GETMET R3 R0 K1
+ 0x7C0C0200, // 0001 CALL R3 1
+ 0x1C100703, // 0002 EQ R4 R3 K3
+ 0x78120000, // 0003 JMPF R4 #0005
+ 0x80060600, // 0004 RET 1 K3
+ 0x1C100702, // 0005 EQ R4 R3 K2
+ 0x7812000C, // 0006 JMPF R4 #0014
+ 0x8C100105, // 0007 GETMET R4 R0 K5
+ 0x58180003, // 0008 LDCONST R6 K3
+ 0x7C100400, // 0009 CALL R4 2
+ 0x88140106, // 000A GETMBR R5 R0 K6
+ 0x541A00FE, // 000B LDINT R6 255
+ 0x20180A06, // 000C NE R6 R5 R6
+ 0x781A0004, // 000D JMPF R6 #0013
+ 0x8C180107, // 000E GETMET R6 R0 K7
+ 0x5C200800, // 000F MOVE R8 R4
+ 0x5C240A00, // 0010 MOVE R9 R5
+ 0x7C180600, // 0011 CALL R6 3
+ 0x80040C00, // 0012 RET 1 R6
+ 0x80040800, // 0013 RET 1 R4
+ 0x14100303, // 0014 LT R4 R1 K3
+ 0x78120001, // 0015 JMPF R4 #0018
+ 0x58040003, // 0016 LDCONST R1 K3
+ 0x70020003, // 0017 JMP #001C
+ 0x541200FE, // 0018 LDINT R4 255
+ 0x24100204, // 0019 GT R4 R1 R4
+ 0x78120000, // 001A JMPF R4 #001C
+ 0x540600FE, // 001B LDINT R1 255
+ 0xB8121000, // 001C GETNGBL R4 K8
+ 0x8C100909, // 001D GETMET R4 R4 K9
+ 0x5C180200, // 001E MOVE R6 R1
+ 0x581C0003, // 001F LDCONST R7 K3
+ 0x542200FE, // 0020 LDINT R8 255
+ 0x58240003, // 0021 LDCONST R9 K3
+ 0x04280702, // 0022 SUB R10 R3 K2
+ 0x7C100C00, // 0023 CALL R4 6
+ 0x28140803, // 0024 GE R5 R4 R3
+ 0x78160001, // 0025 JMPF R5 #0028
+ 0x04140702, // 0026 SUB R5 R3 K2
+ 0x5C100A00, // 0027 MOVE R4 R5
+ 0x8C140105, // 0028 GETMET R5 R0 K5
+ 0x5C1C0800, // 0029 MOVE R7 R4
+ 0x7C140400, // 002A CALL R5 2
+ 0x88180106, // 002B GETMBR R6 R0 K6
+ 0x541E00FE, // 002C LDINT R7 255
+ 0x201C0C07, // 002D NE R7 R6 R7
+ 0x781E0004, // 002E JMPF R7 #0034
+ 0x8C1C0107, // 002F GETMET R7 R0 K7
+ 0x5C240A00, // 0030 MOVE R9 R5
+ 0x5C280C00, // 0031 MOVE R10 R6
+ 0x7C1C0600, // 0032 CALL R7 3
+ 0x80040E00, // 0033 RET 1 R7
+ 0x80040A00, // 0034 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider_init, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080516, // 0003 GETMET R2 R2 K22
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x8808010D, // 0006 GETMBR R2 R0 K13
+ 0x90020903, // 0007 SETMBR R0 K4 K3
+ 0x880C0110, // 0008 GETMBR R3 R0 K16
+ 0x8C100101, // 0009 GETMET R4 R0 K1
+ 0x7C100200, // 000A CALL R4 1
+ 0x980E1E04, // 000B SETIDX R3 K15 R4
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _get_color_at_index
+********************************************************************/
+be_local_closure(class_ColorCycleColorProvider__get_color_at_index, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorCycleColorProvider, /* shared constants */
+ be_str_weak(_get_color_at_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0x8808010D, // 0000 GETMBR R2 R0 K13
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x5C100400, // 0002 MOVE R4 R2
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x54120003, // 0004 LDINT R4 4
+ 0x0C0C0604, // 0005 DIV R3 R3 R4
+ 0x1C100703, // 0006 EQ R4 R3 K3
+ 0x74120003, // 0007 JMPT R4 #000C
+ 0x28100203, // 0008 GE R4 R1 R3
+ 0x74120001, // 0009 JMPT R4 #000C
+ 0x14100303, // 000A LT R4 R1 K3
+ 0x78120000, // 000B JMPF R4 #000D
+ 0x80060600, // 000C RET 1 K3
+ 0x8C100517, // 000D GETMET R4 R2 K23
+ 0x541A0003, // 000E LDINT R6 4
+ 0x08180206, // 000F MUL R6 R1 R6
+ 0x541DFFFB, // 0010 LDINT R7 -4
+ 0x7C100600, // 0011 CALL R4 3
+ 0x30100918, // 0012 OR R4 R4 K24
+ 0x80040800, // 0013 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: ColorCycleColorProvider
********************************************************************/
extern const bclass be_class_ColorProvider;
-be_local_class(CompositeColorProvider,
+be_local_class(ColorCycleColorProvider,
1,
&be_class_ColorProvider,
- be_nested_map(8,
+ be_nested_map(11,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(add_provider, -1), be_const_closure(class_CompositeColorProvider_add_provider_closure) },
- { be_const_key_weak(get_color_for_value, 7), be_const_closure(class_CompositeColorProvider_get_color_for_value_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_CompositeColorProvider_init_closure) },
- { be_const_key_weak(PARAMS, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(1,
+ { be_const_key_weak(_get_color_at_index, -1), be_const_closure(class_ColorCycleColorProvider__get_color_at_index_closure) },
+ { be_const_key_weak(current_index, -1), be_const_var(0) },
+ { be_const_key_weak(_adjust_index, 1), be_const_closure(class_ColorCycleColorProvider__adjust_index_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_ColorCycleColorProvider_tostring_closure) },
+ { be_const_key_weak(_get_palette_size, -1), be_const_closure(class_ColorCycleColorProvider__get_palette_size_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ColorCycleColorProvider_on_param_changed_closure) },
+ { be_const_key_weak(member, -1), be_const_closure(class_ColorCycleColorProvider_member_closure) },
+ { be_const_key_weak(get_color_for_value, -1), be_const_closure(class_ColorCycleColorProvider_get_color_for_value_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(blend_mode, -1), be_const_bytes_instance(14000003000000010002) },
+ { be_const_key_weak(palette, 2), be_const_bytes_instance(0C040C00FF0000FFFF00FF00FFFF000002) },
+ { be_const_key_weak(palette_size, -1), be_const_bytes_instance(0C000300) },
+ { be_const_key_weak(next, 1), be_const_bytes_instance(040000) },
+ { be_const_key_weak(cycle_period, -1), be_const_bytes_instance(050000018813) },
})) ) } )) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_CompositeColorProvider_tostring_closure) },
- { be_const_key_weak(providers, 4), be_const_var(0) },
- { be_const_key_weak(_blend_colors, -1), be_const_closure(class_CompositeColorProvider__blend_colors_closure) },
- { be_const_key_weak(produce_value, -1), be_const_closure(class_CompositeColorProvider_produce_value_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_ColorCycleColorProvider_init_closure) },
+ { be_const_key_weak(produce_value, 0), be_const_closure(class_ColorCycleColorProvider_produce_value_closure) },
})),
- be_str_weak(CompositeColorProvider)
+ be_str_weak(ColorCycleColorProvider)
);
// compact class 'EventManager' ktab size: 30, total: 61 (saved 248 bytes)
static const bvalue be_ktab_class_EventManager[30] = {
@@ -1498,9 +3571,9 @@ be_local_class(EventManager,
);
/********************************************************************
-** Solidified function: twinkle_intense
+** Solidified function: twinkle_solid
********************************************************************/
-be_local_closure(twinkle_intense, /* name */
+be_local_closure(twinkle_solid, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -1510,36 +3583,411 @@ be_local_closure(twinkle_intense, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
+ ( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
/* K1 */ be_nested_str_weak(twinkle_animation),
/* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(density),
- /* K4 */ be_nested_str_weak(twinkle_speed),
- /* K5 */ be_nested_str_weak(fade_speed),
- /* K6 */ be_nested_str_weak(min_brightness),
- /* K7 */ be_nested_str_weak(max_brightness),
+ /* K3 */ be_const_int(-16744193),
+ /* K4 */ be_nested_str_weak(density),
+ /* K5 */ be_nested_str_weak(twinkle_speed),
+ /* K6 */ be_nested_str_weak(fade_speed),
+ /* K7 */ be_nested_str_weak(min_brightness),
+ /* K8 */ be_nested_str_weak(max_brightness),
}),
- be_str_weak(twinkle_intense),
+ be_str_weak(twinkle_solid),
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
+ ( &(const binstruction[16]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0
0x7C040400, // 0003 CALL R1 2
- 0x5408FFFF, // 0004 LDINT R2 -65536
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x540A00C7, // 0006 LDINT R2 200
- 0x90060602, // 0007 SETMBR R1 K3 R2
- 0x540A000B, // 0008 LDINT R2 12
- 0x90060802, // 0009 SETMBR R1 K4 R2
- 0x540A00DB, // 000A LDINT R2 220
- 0x90060A02, // 000B SETMBR R1 K5 R2
- 0x540A003F, // 000C LDINT R2 64
- 0x90060C02, // 000D SETMBR R1 K6 R2
- 0x540A00FE, // 000E LDINT R2 255
- 0x90060E02, // 000F SETMBR R1 K7 R2
- 0x80040200, // 0010 RET 1 R1
+ 0x90060503, // 0004 SETMBR R1 K2 K3
+ 0x540A0063, // 0005 LDINT R2 100
+ 0x90060802, // 0006 SETMBR R1 K4 R2
+ 0x540A0005, // 0007 LDINT R2 6
+ 0x90060A02, // 0008 SETMBR R1 K5 R2
+ 0x540A00B3, // 0009 LDINT R2 180
+ 0x90060C02, // 000A SETMBR R1 K6 R2
+ 0x540A001F, // 000B LDINT R2 32
+ 0x90060E02, // 000C SETMBR R1 K7 R2
+ 0x540A00FE, // 000D LDINT R2 255
+ 0x90061002, // 000E SETMBR R1 K8 R2
+ 0x80040200, // 000F RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+extern const bclass be_class_ParameterizedObject;
+// compact class 'ParameterizedObject' ktab size: 59, total: 124 (saved 520 bytes)
+static const bvalue be_ktab_class_ParameterizedObject[59] = {
+ /* K0 */ be_const_class(be_class_ParameterizedObject),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(_MASK),
+ /* K4 */ be_nested_str_weak(find),
+ /* K5 */ be_const_int(2),
+ /* K6 */ be_nested_str_weak(_TYPES),
+ /* K7 */ be_nested_str_weak(push),
+ /* K8 */ be_nested_str_weak(has_param),
+ /* K9 */ be_nested_str_weak(_set_parameter_value),
+ /* K10 */ be_nested_str_weak(_X27_X25s_X27_X20object_X20has_X20no_X20attribute_X20_X27_X25s_X27),
+ /* K11 */ be_nested_str_weak(attribute_error),
+ /* K12 */ be_nested_str_weak(_get_param_def),
+ /* K13 */ be_nested_str_weak(animation),
+ /* K14 */ be_nested_str_weak(is_value_provider),
+ /* K15 */ be_nested_str_weak(constraint_mask),
+ /* K16 */ be_nested_str_weak(nillable),
+ /* K17 */ be_nested_str_weak(default),
+ /* K18 */ be_nested_str_weak(constraint_find),
+ /* K19 */ be_nested_str_weak(_X27_X25s_X27_X20does_X20not_X20accept_X20nil_X20values),
+ /* K20 */ be_nested_str_weak(value_error),
+ /* K21 */ be_nested_str_weak(type),
+ /* K22 */ be_nested_str_weak(int),
+ /* K23 */ be_nested_str_weak(time),
+ /* K24 */ be_nested_str_weak(percentage),
+ /* K25 */ be_nested_str_weak(color),
+ /* K26 */ be_nested_str_weak(palette),
+ /* K27 */ be_nested_str_weak(bytes),
+ /* K28 */ be_nested_str_weak(any),
+ /* K29 */ be_nested_str_weak(real),
+ /* K30 */ be_nested_str_weak(math),
+ /* K31 */ be_nested_str_weak(round),
+ /* K32 */ be_nested_str_weak(instance),
+ /* K33 */ be_nested_str_weak(_X27_X25s_X27_X20expects_X20type_X20_X27_X25s_X27_X20but_X20got_X20_X27_X25s_X27_X20_X28value_X3A_X20_X25s_X29),
+ /* K34 */ be_nested_str_weak(min),
+ /* K35 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20below_X20minimum_X20_X25s),
+ /* K36 */ be_nested_str_weak(max),
+ /* K37 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20above_X20maximum_X20_X25s),
+ /* K38 */ be_nested_str_weak(enum),
+ /* K39 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20not_X20in_X20allowed_X20values_X20_X25s),
+ /* K40 */ be_nested_str_weak(values),
+ /* K41 */ be_nested_str_weak(contains),
+ /* K42 */ be_nested_str_weak(resolve_value),
+ /* K43 */ be_nested_str_weak(engine),
+ /* K44 */ be_nested_str_weak(time_ms),
+ /* K45 */ be_nested_str_weak(is_running),
+ /* K46 */ be_nested_str_weak(start_time),
+ /* K47 */ be_nested_str_weak(introspect),
+ /* K48 */ be_nested_str_weak(PARAMS),
+ /* K49 */ be_nested_str_weak(keys),
+ /* K50 */ be_nested_str_weak(stop_iteration),
+ /* K51 */ be_nested_str_weak(missing_X20engine_X20parameter),
+ /* K52 */ be_nested_str_weak(_init_parameter_values),
+ /* K53 */ be_nested_str_weak(toptr),
+ /* K54 */ be_nested_str_weak(_validate_param),
+ /* K55 */ be_nested_str_weak(on_param_changed),
+ /* K56 */ be_nested_str_weak(_X25s_X28running_X3D_X25s_X29),
+ /* K57 */ be_nested_str_weak(produce_value),
+ /* K58 */ be_nested_str_weak(member),
+};
+
+
+extern const bclass be_class_ParameterizedObject;
+
+/********************************************************************
+** Solidified function: constraint_find
+********************************************************************/
+be_local_closure(class_ParameterizedObject_constraint_find, /* name */
+ be_nested_proto(
+ 17, /* nstack */
+ 3, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(2),
+ /* K3 */ be_const_int(3),
+ /* K4 */ be_nested_str_weak(get),
+ }),
+ be_str_weak(_skip_typed_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0x6008000C, // 0000 GETGBL R2 G12
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x28080202, // 0003 GE R2 R1 R2
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0x80060000, // 0005 RET 1 K0
+ 0x94080001, // 0006 GETIDX R2 R0 R1
+ 0x540E0005, // 0007 LDINT R3 6
+ 0x1C0C0403, // 0008 EQ R3 R2 R3
+ 0x780E0001, // 0009 JMPF R3 #000C
+ 0x80060200, // 000A RET 1 K1
+ 0x70020021, // 000B JMP #002E
+ 0x540E0004, // 000C LDINT R3 5
+ 0x1C0C0403, // 000D EQ R3 R2 R3
+ 0x780E0001, // 000E JMPF R3 #0011
+ 0x80060400, // 000F RET 1 K2
+ 0x7002001C, // 0010 JMP #002E
+ 0x1C0C0500, // 0011 EQ R3 R2 K0
+ 0x780E0001, // 0012 JMPF R3 #0015
+ 0x80060400, // 0013 RET 1 K2
+ 0x70020018, // 0014 JMP #002E
+ 0x1C0C0501, // 0015 EQ R3 R2 K1
+ 0x780E0001, // 0016 JMPF R3 #0019
+ 0x80060600, // 0017 RET 1 K3
+ 0x70020014, // 0018 JMP #002E
+ 0x1C0C0502, // 0019 EQ R3 R2 K2
+ 0x780E0002, // 001A JMPF R3 #001E
+ 0x540E0004, // 001B LDINT R3 5
+ 0x80040600, // 001C RET 1 R3
+ 0x7002000F, // 001D JMP #002E
+ 0x1C0C0503, // 001E EQ R3 R2 K3
+ 0x780E0004, // 001F JMPF R3 #0025
+ 0x000C0301, // 0020 ADD R3 R1 K1
+ 0x940C0003, // 0021 GETIDX R3 R0 R3
+ 0x000E0403, // 0022 ADD R3 K2 R3
+ 0x80040600, // 0023 RET 1 R3
+ 0x70020008, // 0024 JMP #002E
+ 0x540E0003, // 0025 LDINT R3 4
+ 0x1C0C0403, // 0026 EQ R3 R2 R3
+ 0x780E0005, // 0027 JMPF R3 #002E
+ 0x8C0C0104, // 0028 GETMET R3 R0 K4
+ 0x00140301, // 0029 ADD R5 R1 K1
+ 0x58180002, // 002A LDCONST R6 K2
+ 0x7C0C0600, // 002B CALL R3 3
+ 0x000E0603, // 002C ADD R3 K3 R3
+ 0x80040600, // 002D RET 1 R3
+ 0x80060000, // 002E RET 1 K0
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_const_int(1),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(get),
+ /* K3 */ be_const_int(2),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_nested_str_weak(asstring),
+ }),
+ be_str_weak(_read_typed_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[83]) { /* code */
+ 0x6008000C, // 0000 GETGBL R2 G12
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x28080202, // 0003 GE R2 R1 R2
+ 0x780A0001, // 0004 JMPF R2 #0007
+ 0x4C080000, // 0005 LDNIL R2
+ 0x80040400, // 0006 RET 1 R2
+ 0x94080001, // 0007 GETIDX R2 R0 R1
+ 0x00040300, // 0008 ADD R1 R1 K0
+ 0x540E0005, // 0009 LDINT R3 6
+ 0x1C0C0403, // 000A EQ R3 R2 R3
+ 0x780E0002, // 000B JMPF R3 #000F
+ 0x4C0C0000, // 000C LDNIL R3
+ 0x80040600, // 000D RET 1 R3
+ 0x70020041, // 000E JMP #0051
+ 0x540E0004, // 000F LDINT R3 5
+ 0x1C0C0403, // 0010 EQ R3 R2 R3
+ 0x780E0003, // 0011 JMPF R3 #0016
+ 0x940C0001, // 0012 GETIDX R3 R0 R1
+ 0x200C0701, // 0013 NE R3 R3 K1
+ 0x80040600, // 0014 RET 1 R3
+ 0x7002003A, // 0015 JMP #0051
+ 0x1C0C0501, // 0016 EQ R3 R2 K1
+ 0x780E0009, // 0017 JMPF R3 #0022
+ 0x940C0001, // 0018 GETIDX R3 R0 R1
+ 0x5412007E, // 0019 LDINT R4 127
+ 0x24100604, // 001A GT R4 R3 R4
+ 0x78120002, // 001B JMPF R4 #001F
+ 0x541200FF, // 001C LDINT R4 256
+ 0x04100604, // 001D SUB R4 R3 R4
+ 0x70020000, // 001E JMP #0020
+ 0x5C100600, // 001F MOVE R4 R3
+ 0x80040800, // 0020 RET 1 R4
+ 0x7002002E, // 0021 JMP #0051
+ 0x1C0C0500, // 0022 EQ R3 R2 K0
+ 0x780E000C, // 0023 JMPF R3 #0031
+ 0x8C0C0102, // 0024 GETMET R3 R0 K2
+ 0x5C140200, // 0025 MOVE R5 R1
+ 0x58180003, // 0026 LDCONST R6 K3
+ 0x7C0C0600, // 0027 CALL R3 3
+ 0x54127FFE, // 0028 LDINT R4 32767
+ 0x24100604, // 0029 GT R4 R3 R4
+ 0x78120002, // 002A JMPF R4 #002E
+ 0x5412FFFF, // 002B LDINT R4 65536
+ 0x04100604, // 002C SUB R4 R3 R4
+ 0x70020000, // 002D JMP #002F
+ 0x5C100600, // 002E MOVE R4 R3
+ 0x80040800, // 002F RET 1 R4
+ 0x7002001F, // 0030 JMP #0051
+ 0x1C0C0503, // 0031 EQ R3 R2 K3
+ 0x780E0005, // 0032 JMPF R3 #0039
+ 0x8C0C0102, // 0033 GETMET R3 R0 K2
+ 0x5C140200, // 0034 MOVE R5 R1
+ 0x541A0003, // 0035 LDINT R6 4
+ 0x7C0C0600, // 0036 CALL R3 3
+ 0x80040600, // 0037 RET 1 R3
+ 0x70020017, // 0038 JMP #0051
+ 0x1C0C0504, // 0039 EQ R3 R2 K4
+ 0x780E0008, // 003A JMPF R3 #0044
+ 0x940C0001, // 003B GETIDX R3 R0 R1
+ 0x00100300, // 003C ADD R4 R1 K0
+ 0x00140203, // 003D ADD R5 R1 R3
+ 0x40100805, // 003E CONNECT R4 R4 R5
+ 0x94100004, // 003F GETIDX R4 R0 R4
+ 0x8C100905, // 0040 GETMET R4 R4 K5
+ 0x7C100200, // 0041 CALL R4 1
+ 0x80040800, // 0042 RET 1 R4
+ 0x7002000C, // 0043 JMP #0051
+ 0x540E0003, // 0044 LDINT R3 4
+ 0x1C0C0403, // 0045 EQ R3 R2 R3
+ 0x780E0009, // 0046 JMPF R3 #0051
+ 0x8C0C0102, // 0047 GETMET R3 R0 K2
+ 0x5C140200, // 0048 MOVE R5 R1
+ 0x58180003, // 0049 LDCONST R6 K3
+ 0x7C0C0600, // 004A CALL R3 3
+ 0x00100303, // 004B ADD R4 R1 K3
+ 0x00140203, // 004C ADD R5 R1 R3
+ 0x00140B00, // 004D ADD R5 R5 K0
+ 0x40100805, // 004E CONNECT R4 R4 R5
+ 0x94100004, // 004F GETIDX R4 R0 R4
+ 0x80040800, // 0050 RET 1 R4
+ 0x4C0C0000, // 0051 LDNIL R3
+ 0x80040600, // 0052 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(constraint_find),
+ &be_const_str_solidified,
+ ( &(const binstruction[112]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x84100000, // 0001 CLOSURE R4 P0
+ 0x84140001, // 0002 CLOSURE R5 P1
+ 0x6018000C, // 0003 GETGBL R6 G12
+ 0x5C1C0000, // 0004 MOVE R7 R0
+ 0x7C180200, // 0005 CALL R6 1
+ 0x14180D01, // 0006 LT R6 R6 K1
+ 0x781A0000, // 0007 JMPF R6 #0009
+ 0x80040400, // 0008 RET 1 R2
+ 0x94180102, // 0009 GETIDX R6 R0 K2
+ 0x581C0001, // 000A LDCONST R7 K1
+ 0x88200703, // 000B GETMBR R8 R3 K3
+ 0x8C201104, // 000C GETMET R8 R8 K4
+ 0x5C280200, // 000D MOVE R10 R1
+ 0x7C200400, // 000E CALL R8 2
+ 0x4C240000, // 000F LDNIL R9
+ 0x1C241009, // 0010 EQ R9 R8 R9
+ 0x78260000, // 0011 JMPF R9 #0013
+ 0x80040400, // 0012 RET 1 R2
+ 0x38220208, // 0013 SHL R8 K1 R8
+ 0x2C240C08, // 0014 AND R9 R6 R8
+ 0x74260000, // 0015 JMPT R9 #0017
+ 0x80040400, // 0016 RET 1 R2
+ 0x5426001F, // 0017 LDINT R9 32
+ 0x1C241009, // 0018 EQ R9 R8 R9
+ 0x78260001, // 0019 JMPF R9 #001C
+ 0x50240200, // 001A LDBOOL R9 1 0
+ 0x80041200, // 001B RET 1 R9
+ 0x24241101, // 001C GT R9 R8 K1
+ 0x78260006, // 001D JMPF R9 #0025
+ 0x2C240D01, // 001E AND R9 R6 K1
+ 0x78260004, // 001F JMPF R9 #0025
+ 0x5C240800, // 0020 MOVE R9 R4
+ 0x5C280000, // 0021 MOVE R10 R0
+ 0x5C2C0E00, // 0022 MOVE R11 R7
+ 0x7C240400, // 0023 CALL R9 2
+ 0x001C0E09, // 0024 ADD R7 R7 R9
+ 0x24241105, // 0025 GT R9 R8 K5
+ 0x78260006, // 0026 JMPF R9 #002E
+ 0x2C240D05, // 0027 AND R9 R6 K5
+ 0x78260004, // 0028 JMPF R9 #002E
+ 0x5C240800, // 0029 MOVE R9 R4
+ 0x5C280000, // 002A MOVE R10 R0
+ 0x5C2C0E00, // 002B MOVE R11 R7
+ 0x7C240400, // 002C CALL R9 2
+ 0x001C0E09, // 002D ADD R7 R7 R9
+ 0x54260003, // 002E LDINT R9 4
+ 0x24241009, // 002F GT R9 R8 R9
+ 0x78260007, // 0030 JMPF R9 #0039
+ 0x54260003, // 0031 LDINT R9 4
+ 0x2C240C09, // 0032 AND R9 R6 R9
+ 0x78260004, // 0033 JMPF R9 #0039
+ 0x5C240800, // 0034 MOVE R9 R4
+ 0x5C280000, // 0035 MOVE R10 R0
+ 0x5C2C0E00, // 0036 MOVE R11 R7
+ 0x7C240400, // 0037 CALL R9 2
+ 0x001C0E09, // 0038 ADD R7 R7 R9
+ 0x54260007, // 0039 LDINT R9 8
+ 0x24241009, // 003A GT R9 R8 R9
+ 0x78260003, // 003B JMPF R9 #0040
+ 0x54260007, // 003C LDINT R9 8
+ 0x2C240C09, // 003D AND R9 R6 R9
+ 0x78260000, // 003E JMPF R9 #0040
+ 0x001C0F01, // 003F ADD R7 R7 K1
+ 0x6024000C, // 0040 GETGBL R9 G12
+ 0x5C280000, // 0041 MOVE R10 R0
+ 0x7C240200, // 0042 CALL R9 1
+ 0x28240E09, // 0043 GE R9 R7 R9
+ 0x78260000, // 0044 JMPF R9 #0046
+ 0x80040400, // 0045 RET 1 R2
+ 0x54260007, // 0046 LDINT R9 8
+ 0x1C241009, // 0047 EQ R9 R8 R9
+ 0x78260009, // 0048 JMPF R9 #0053
+ 0x94240007, // 0049 GETIDX R9 R0 R7
+ 0x6028000C, // 004A GETGBL R10 G12
+ 0x882C0706, // 004B GETMBR R11 R3 K6
+ 0x7C280200, // 004C CALL R10 1
+ 0x1428120A, // 004D LT R10 R9 R10
+ 0x782A0002, // 004E JMPF R10 #0052
+ 0x88280706, // 004F GETMBR R10 R3 K6
+ 0x94281409, // 0050 GETIDX R10 R10 R9
+ 0x80041400, // 0051 RET 1 R10
+ 0x80040400, // 0052 RET 1 R2
+ 0x5426000F, // 0053 LDINT R9 16
+ 0x1C241009, // 0054 EQ R9 R8 R9
+ 0x78260014, // 0055 JMPF R9 #006B
+ 0x94240007, // 0056 GETIDX R9 R0 R7
+ 0x001C0F01, // 0057 ADD R7 R7 K1
+ 0x60280012, // 0058 GETGBL R10 G18
+ 0x7C280000, // 0059 CALL R10 0
+ 0x582C0002, // 005A LDCONST R11 K2
+ 0x14301609, // 005B LT R12 R11 R9
+ 0x7832000C, // 005C JMPF R12 #006A
+ 0x8C301507, // 005D GETMET R12 R10 K7
+ 0x5C380A00, // 005E MOVE R14 R5
+ 0x5C3C0000, // 005F MOVE R15 R0
+ 0x5C400E00, // 0060 MOVE R16 R7
+ 0x7C380400, // 0061 CALL R14 2
+ 0x7C300400, // 0062 CALL R12 2
+ 0x5C340800, // 0063 MOVE R13 R4
+ 0x5C380000, // 0064 MOVE R14 R0
+ 0x5C3C0E00, // 0065 MOVE R15 R7
+ 0x7C340400, // 0066 CALL R13 2
+ 0x001C0E0D, // 0067 ADD R7 R7 R13
+ 0x002C1701, // 0068 ADD R11 R11 K1
+ 0x7001FFF0, // 0069 JMP #005B
+ 0x80041400, // 006A RET 1 R10
+ 0x5C240A00, // 006B MOVE R9 R5
+ 0x5C280000, // 006C MOVE R10 R0
+ 0x5C2C0E00, // 006D MOVE R11 R7
+ 0x7C240400, // 006E CALL R9 2
+ 0x80041200, // 006F RET 1 R9
})
)
);
@@ -1547,9 +3995,1648 @@ be_local_closure(twinkle_intense, /* name */
/********************************************************************
-** Solidified function: wave_single_sine
+** Solidified function: setmember
********************************************************************/
-be_local_closure(wave_single_sine, /* name */
+be_local_closure(class_ParameterizedObject_setmember, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(setmember),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x8C0C0108, // 0000 GETMET R3 R0 K8
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x780E0004, // 0003 JMPF R3 #0009
+ 0x8C0C0109, // 0004 GETMET R3 R0 K9
+ 0x5C140200, // 0005 MOVE R5 R1
+ 0x5C180400, // 0006 MOVE R6 R2
+ 0x7C0C0600, // 0007 CALL R3 3
+ 0x70020007, // 0008 JMP #0011
+ 0x600C0018, // 0009 GETGBL R3 G24
+ 0x5810000A, // 000A LDCONST R4 K10
+ 0x60140005, // 000B GETGBL R5 G5
+ 0x5C180000, // 000C MOVE R6 R0
+ 0x7C140200, // 000D CALL R5 1
+ 0x5C180200, // 000E MOVE R6 R1
+ 0x7C0C0600, // 000F CALL R3 3
+ 0xB0061603, // 0010 RAISE 1 K11 R3
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _validate_param
+********************************************************************/
+be_local_closure(class_ParameterizedObject__validate_param, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_validate_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[186]) { /* code */
+ 0x8C0C010C, // 0000 GETMET R3 R0 K12
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x4C100000, // 0003 LDNIL R4
+ 0x1C100604, // 0004 EQ R4 R3 R4
+ 0x78120007, // 0005 JMPF R4 #000E
+ 0x60100018, // 0006 GETGBL R4 G24
+ 0x5814000A, // 0007 LDCONST R5 K10
+ 0x60180005, // 0008 GETGBL R6 G5
+ 0x5C1C0000, // 0009 MOVE R7 R0
+ 0x7C180200, // 000A CALL R6 1
+ 0x5C1C0200, // 000B MOVE R7 R1
+ 0x7C100600, // 000C CALL R4 3
+ 0xB0061604, // 000D RAISE 1 K11 R4
+ 0xB8121A00, // 000E GETNGBL R4 K13
+ 0x8C10090E, // 000F GETMET R4 R4 K14
+ 0x5C180400, // 0010 MOVE R6 R2
+ 0x7C100400, // 0011 CALL R4 2
+ 0x78120000, // 0012 JMPF R4 #0014
+ 0x80040400, // 0013 RET 1 R2
+ 0x4C100000, // 0014 LDNIL R4
+ 0x1C100404, // 0015 EQ R4 R2 R4
+ 0x78120014, // 0016 JMPF R4 #002C
+ 0x8C10010F, // 0017 GETMET R4 R0 K15
+ 0x5C180600, // 0018 MOVE R6 R3
+ 0x581C0010, // 0019 LDCONST R7 K16
+ 0x7C100600, // 001A CALL R4 3
+ 0x78120000, // 001B JMPF R4 #001D
+ 0x80040400, // 001C RET 1 R2
+ 0x8C10010F, // 001D GETMET R4 R0 K15
+ 0x5C180600, // 001E MOVE R6 R3
+ 0x581C0011, // 001F LDCONST R7 K17
+ 0x7C100600, // 0020 CALL R4 3
+ 0x78120004, // 0021 JMPF R4 #0027
+ 0x8C100112, // 0022 GETMET R4 R0 K18
+ 0x5C180600, // 0023 MOVE R6 R3
+ 0x581C0011, // 0024 LDCONST R7 K17
+ 0x7C100600, // 0025 CALL R4 3
+ 0x80040800, // 0026 RET 1 R4
+ 0x60100018, // 0027 GETGBL R4 G24
+ 0x58140013, // 0028 LDCONST R5 K19
+ 0x5C180200, // 0029 MOVE R6 R1
+ 0x7C100400, // 002A CALL R4 2
+ 0xB0062804, // 002B RAISE 1 K20 R4
+ 0x8C100112, // 002C GETMET R4 R0 K18
+ 0x5C180600, // 002D MOVE R6 R3
+ 0x581C0015, // 002E LDCONST R7 K21
+ 0x58200016, // 002F LDCONST R8 K22
+ 0x7C100800, // 0030 CALL R4 4
+ 0x1C140917, // 0031 EQ R5 R4 K23
+ 0x74160003, // 0032 JMPT R5 #0037
+ 0x1C140918, // 0033 EQ R5 R4 K24
+ 0x74160001, // 0034 JMPT R5 #0037
+ 0x1C140919, // 0035 EQ R5 R4 K25
+ 0x78160001, // 0036 JMPF R5 #0039
+ 0x58100016, // 0037 LDCONST R4 K22
+ 0x70020002, // 0038 JMP #003C
+ 0x1C14091A, // 0039 EQ R5 R4 K26
+ 0x78160000, // 003A JMPF R5 #003C
+ 0x5810001B, // 003B LDCONST R4 K27
+ 0x60140004, // 003C GETGBL R5 G4
+ 0x5C180400, // 003D MOVE R6 R2
+ 0x7C140200, // 003E CALL R5 1
+ 0x2018091C, // 003F NE R6 R4 K28
+ 0x781A0031, // 0040 JMPF R6 #0073
+ 0x1C180916, // 0041 EQ R6 R4 K22
+ 0x781A000A, // 0042 JMPF R6 #004E
+ 0x1C180B1D, // 0043 EQ R6 R5 K29
+ 0x781A0008, // 0044 JMPF R6 #004E
+ 0xA41A3C00, // 0045 IMPORT R6 K30
+ 0x601C0009, // 0046 GETGBL R7 G9
+ 0x8C200D1F, // 0047 GETMET R8 R6 K31
+ 0x5C280400, // 0048 MOVE R10 R2
+ 0x7C200400, // 0049 CALL R8 2
+ 0x7C1C0200, // 004A CALL R7 1
+ 0x5C080E00, // 004B MOVE R2 R7
+ 0x58140016, // 004C LDCONST R5 K22
+ 0x70020024, // 004D JMP #0073
+ 0x1C18091B, // 004E EQ R6 R4 K27
+ 0x781A0018, // 004F JMPF R6 #0069
+ 0x1C180B20, // 0050 EQ R6 R5 K32
+ 0x781A0006, // 0051 JMPF R6 #0059
+ 0x6018000F, // 0052 GETGBL R6 G15
+ 0x5C1C0400, // 0053 MOVE R7 R2
+ 0x60200015, // 0054 GETGBL R8 G21
+ 0x7C180400, // 0055 CALL R6 2
+ 0x781A0001, // 0056 JMPF R6 #0059
+ 0x5814001B, // 0057 LDCONST R5 K27
+ 0x7002000E, // 0058 JMP #0068
+ 0x20180B20, // 0059 NE R6 R5 K32
+ 0x741A0004, // 005A JMPT R6 #0060
+ 0x6018000F, // 005B GETGBL R6 G15
+ 0x5C1C0400, // 005C MOVE R7 R2
+ 0x60200015, // 005D GETGBL R8 G21
+ 0x7C180400, // 005E CALL R6 2
+ 0x741A0007, // 005F JMPT R6 #0068
+ 0x60180018, // 0060 GETGBL R6 G24
+ 0x581C0021, // 0061 LDCONST R7 K33
+ 0x5C200200, // 0062 MOVE R8 R1
+ 0x5C240800, // 0063 MOVE R9 R4
+ 0x5C280A00, // 0064 MOVE R10 R5
+ 0x5C2C0400, // 0065 MOVE R11 R2
+ 0x7C180A00, // 0066 CALL R6 5
+ 0xB0062806, // 0067 RAISE 1 K20 R6
+ 0x70020009, // 0068 JMP #0073
+ 0x20180805, // 0069 NE R6 R4 R5
+ 0x781A0007, // 006A JMPF R6 #0073
+ 0x60180018, // 006B GETGBL R6 G24
+ 0x581C0021, // 006C LDCONST R7 K33
+ 0x5C200200, // 006D MOVE R8 R1
+ 0x5C240800, // 006E MOVE R9 R4
+ 0x5C280A00, // 006F MOVE R10 R5
+ 0x5C2C0400, // 0070 MOVE R11 R2
+ 0x7C180A00, // 0071 CALL R6 5
+ 0xB0062806, // 0072 RAISE 1 K20 R6
+ 0x1C180B16, // 0073 EQ R6 R5 K22
+ 0x781A0023, // 0074 JMPF R6 #0099
+ 0x8C18010F, // 0075 GETMET R6 R0 K15
+ 0x5C200600, // 0076 MOVE R8 R3
+ 0x58240022, // 0077 LDCONST R9 K34
+ 0x7C180600, // 0078 CALL R6 3
+ 0x781A000C, // 0079 JMPF R6 #0087
+ 0x8C180112, // 007A GETMET R6 R0 K18
+ 0x5C200600, // 007B MOVE R8 R3
+ 0x58240022, // 007C LDCONST R9 K34
+ 0x7C180600, // 007D CALL R6 3
+ 0x141C0406, // 007E LT R7 R2 R6
+ 0x781E0006, // 007F JMPF R7 #0087
+ 0x601C0018, // 0080 GETGBL R7 G24
+ 0x58200023, // 0081 LDCONST R8 K35
+ 0x5C240200, // 0082 MOVE R9 R1
+ 0x5C280400, // 0083 MOVE R10 R2
+ 0x5C2C0C00, // 0084 MOVE R11 R6
+ 0x7C1C0800, // 0085 CALL R7 4
+ 0xB0062807, // 0086 RAISE 1 K20 R7
+ 0x8C18010F, // 0087 GETMET R6 R0 K15
+ 0x5C200600, // 0088 MOVE R8 R3
+ 0x58240024, // 0089 LDCONST R9 K36
+ 0x7C180600, // 008A CALL R6 3
+ 0x781A000C, // 008B JMPF R6 #0099
+ 0x8C180112, // 008C GETMET R6 R0 K18
+ 0x5C200600, // 008D MOVE R8 R3
+ 0x58240024, // 008E LDCONST R9 K36
+ 0x7C180600, // 008F CALL R6 3
+ 0x241C0406, // 0090 GT R7 R2 R6
+ 0x781E0006, // 0091 JMPF R7 #0099
+ 0x601C0018, // 0092 GETGBL R7 G24
+ 0x58200025, // 0093 LDCONST R8 K37
+ 0x5C240200, // 0094 MOVE R9 R1
+ 0x5C280400, // 0095 MOVE R10 R2
+ 0x5C2C0C00, // 0096 MOVE R11 R6
+ 0x7C1C0800, // 0097 CALL R7 4
+ 0xB0062807, // 0098 RAISE 1 K20 R7
+ 0x8C18010F, // 0099 GETMET R6 R0 K15
+ 0x5C200600, // 009A MOVE R8 R3
+ 0x58240026, // 009B LDCONST R9 K38
+ 0x7C180600, // 009C CALL R6 3
+ 0x781A001A, // 009D JMPF R6 #00B9
+ 0x50180000, // 009E LDBOOL R6 0 0
+ 0x8C1C0112, // 009F GETMET R7 R0 K18
+ 0x5C240600, // 00A0 MOVE R9 R3
+ 0x58280026, // 00A1 LDCONST R10 K38
+ 0x7C1C0600, // 00A2 CALL R7 3
+ 0x6020000C, // 00A3 GETGBL R8 G12
+ 0x5C240E00, // 00A4 MOVE R9 R7
+ 0x7C200200, // 00A5 CALL R8 1
+ 0x58240002, // 00A6 LDCONST R9 K2
+ 0x14281208, // 00A7 LT R10 R9 R8
+ 0x782A0006, // 00A8 JMPF R10 #00B0
+ 0x94280E09, // 00A9 GETIDX R10 R7 R9
+ 0x1C2C040A, // 00AA EQ R11 R2 R10
+ 0x782E0001, // 00AB JMPF R11 #00AE
+ 0x50180200, // 00AC LDBOOL R6 1 0
+ 0x70020001, // 00AD JMP #00B0
+ 0x00241301, // 00AE ADD R9 R9 K1
+ 0x7001FFF6, // 00AF JMP #00A7
+ 0x5C280C00, // 00B0 MOVE R10 R6
+ 0x742A0006, // 00B1 JMPT R10 #00B9
+ 0x60280018, // 00B2 GETGBL R10 G24
+ 0x582C0027, // 00B3 LDCONST R11 K39
+ 0x5C300200, // 00B4 MOVE R12 R1
+ 0x5C340400, // 00B5 MOVE R13 R2
+ 0x5C380E00, // 00B6 MOVE R14 R7
+ 0x7C280800, // 00B7 CALL R10 4
+ 0xB006280A, // 00B8 RAISE 1 K20 R10
+ 0x80040400, // 00B9 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_ParameterizedObject_update, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _resolve_parameter_value
+********************************************************************/
+be_local_closure(class_ParameterizedObject__resolve_parameter_value, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_resolve_parameter_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0x880C0128, // 0000 GETMBR R3 R0 K40
+ 0x8C0C0729, // 0001 GETMET R3 R3 K41
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x740E0011, // 0004 JMPT R3 #0017
+ 0x8C0C010C, // 0005 GETMET R3 R0 K12
+ 0x5C140200, // 0006 MOVE R5 R1
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x4C100000, // 0008 LDNIL R4
+ 0x20100604, // 0009 NE R4 R3 R4
+ 0x78120009, // 000A JMPF R4 #0015
+ 0x8C10010F, // 000B GETMET R4 R0 K15
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x581C0011, // 000D LDCONST R7 K17
+ 0x7C100600, // 000E CALL R4 3
+ 0x78120004, // 000F JMPF R4 #0015
+ 0x8C100112, // 0010 GETMET R4 R0 K18
+ 0x5C180600, // 0011 MOVE R6 R3
+ 0x581C0011, // 0012 LDCONST R7 K17
+ 0x7C100600, // 0013 CALL R4 3
+ 0x80040800, // 0014 RET 1 R4
+ 0x4C100000, // 0015 LDNIL R4
+ 0x80040800, // 0016 RET 1 R4
+ 0x880C0128, // 0017 GETMBR R3 R0 K40
+ 0x940C0601, // 0018 GETIDX R3 R3 R1
+ 0x8C10012A, // 0019 GETMET R4 R0 K42
+ 0x5C180600, // 001A MOVE R6 R3
+ 0x5C1C0200, // 001B MOVE R7 R1
+ 0x5C200400, // 001C MOVE R8 R2
+ 0x7C100800, // 001D CALL R4 4
+ 0x80040800, // 001E RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: constraint_mask
+********************************************************************/
+be_local_closure(class_ParameterizedObject_constraint_mask, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(constraint_mask),
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x200C0003, // 0002 NE R3 R0 R3
+ 0x780E000F, // 0003 JMPF R3 #0014
+ 0x600C000C, // 0004 GETGBL R3 G12
+ 0x5C100000, // 0005 MOVE R4 R0
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x240C0702, // 0007 GT R3 R3 K2
+ 0x780E000A, // 0008 JMPF R3 #0014
+ 0x880C0503, // 0009 GETMBR R3 R2 K3
+ 0x8C0C0704, // 000A GETMET R3 R3 K4
+ 0x5C140200, // 000B MOVE R5 R1
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x4C100000, // 000D LDNIL R4
+ 0x20100604, // 000E NE R4 R3 R4
+ 0x78120003, // 000F JMPF R4 #0014
+ 0x94100102, // 0010 GETIDX R4 R0 K2
+ 0x38160203, // 0011 SHL R5 K1 R3
+ 0x2C100805, // 0012 AND R4 R4 R5
+ 0x80040800, // 0013 RET 1 R4
+ 0x80060400, // 0014 RET 1 K2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: member
+********************************************************************/
+be_local_closure(class_ParameterizedObject_member, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(member),
+ &be_const_str_solidified,
+ ( &(const binstruction[58]) { /* code */
+ 0x88080128, // 0000 GETMBR R2 R0 K40
+ 0x8C080504, // 0001 GETMET R2 R2 K4
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0403, // 0005 NE R3 R2 R3
+ 0x780E000D, // 0006 JMPF R3 #0015
+ 0x600C0004, // 0007 GETGBL R3 G4
+ 0x5C100400, // 0008 MOVE R4 R2
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x200C0720, // 000A NE R3 R3 K32
+ 0x780E0000, // 000B JMPF R3 #000D
+ 0x80040400, // 000C RET 1 R2
+ 0x8C0C012A, // 000D GETMET R3 R0 K42
+ 0x5C140400, // 000E MOVE R5 R2
+ 0x5C180200, // 000F MOVE R6 R1
+ 0x881C012B, // 0010 GETMBR R7 R0 K43
+ 0x881C0F2C, // 0011 GETMBR R7 R7 K44
+ 0x7C0C0800, // 0012 CALL R3 4
+ 0x80040600, // 0013 RET 1 R3
+ 0x70020023, // 0014 JMP #0039
+ 0x880C0128, // 0015 GETMBR R3 R0 K40
+ 0x8C0C0729, // 0016 GETMET R3 R3 K41
+ 0x5C140200, // 0017 MOVE R5 R1
+ 0x7C0C0400, // 0018 CALL R3 2
+ 0x780E0002, // 0019 JMPF R3 #001D
+ 0x4C0C0000, // 001A LDNIL R3
+ 0x80040600, // 001B RET 1 R3
+ 0x7002001B, // 001C JMP #0039
+ 0x8C0C010C, // 001D GETMET R3 R0 K12
+ 0x5C140200, // 001E MOVE R5 R1
+ 0x7C0C0400, // 001F CALL R3 2
+ 0x4C100000, // 0020 LDNIL R4
+ 0x20100604, // 0021 NE R4 R3 R4
+ 0x7812000D, // 0022 JMPF R4 #0031
+ 0x8C10010F, // 0023 GETMET R4 R0 K15
+ 0x5C180600, // 0024 MOVE R6 R3
+ 0x581C0011, // 0025 LDCONST R7 K17
+ 0x7C100600, // 0026 CALL R4 3
+ 0x78120005, // 0027 JMPF R4 #002E
+ 0x8C100112, // 0028 GETMET R4 R0 K18
+ 0x5C180600, // 0029 MOVE R6 R3
+ 0x581C0011, // 002A LDCONST R7 K17
+ 0x7C100600, // 002B CALL R4 3
+ 0x80040800, // 002C RET 1 R4
+ 0x70020001, // 002D JMP #0030
+ 0x4C100000, // 002E LDNIL R4
+ 0x80040800, // 002F RET 1 R4
+ 0x70020007, // 0030 JMP #0039
+ 0x60100018, // 0031 GETGBL R4 G24
+ 0x5814000A, // 0032 LDCONST R5 K10
+ 0x60180005, // 0033 GETGBL R6 G5
+ 0x5C1C0000, // 0034 MOVE R7 R0
+ 0x7C180200, // 0035 CALL R6 1
+ 0x5C1C0200, // 0036 MOVE R7 R1
+ 0x7C100600, // 0037 CALL R4 3
+ 0xB0061604, // 0038 RAISE 1 K11 R4
+ 0x80000000, // 0039 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(class_ParameterizedObject_start, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x8808012B, // 0003 GETMBR R2 R0 K43
+ 0x8804052C, // 0004 GETMBR R1 R2 K44
+ 0x50080200, // 0005 LDBOOL R2 1 0
+ 0x90025A02, // 0006 SETMBR R0 K45 R2
+ 0x8808012E, // 0007 GETMBR R2 R0 K46
+ 0x4C0C0000, // 0008 LDNIL R3
+ 0x20080403, // 0009 NE R2 R2 R3
+ 0x780A0000, // 000A JMPF R2 #000C
+ 0x90025C01, // 000B SETMBR R0 K46 R1
+ 0x80040000, // 000C RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: stop
+********************************************************************/
+be_local_closure(class_ParameterizedObject_stop, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(stop),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x50040000, // 0000 LDBOOL R1 0 0
+ 0x90025A01, // 0001 SETMBR R0 K45 R1
+ 0x80040000, // 0002 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _init_parameter_values
+********************************************************************/
+be_local_closure(class_ParameterizedObject__init_parameter_values, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_init_parameter_values),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0xA4065E00, // 0000 IMPORT R1 K47
+ 0x60080006, // 0001 GETGBL R2 G6
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0403, // 0005 NE R3 R2 R3
+ 0x780E0026, // 0006 JMPF R3 #002E
+ 0x8C0C0329, // 0007 GETMET R3 R1 K41
+ 0x5C140400, // 0008 MOVE R5 R2
+ 0x58180030, // 0009 LDCONST R6 K48
+ 0x7C0C0600, // 000A CALL R3 3
+ 0x780E001C, // 000B JMPF R3 #0029
+ 0x880C0530, // 000C GETMBR R3 R2 K48
+ 0x60100010, // 000D GETGBL R4 G16
+ 0x8C140731, // 000E GETMET R5 R3 K49
+ 0x7C140200, // 000F CALL R5 1
+ 0x7C100200, // 0010 CALL R4 1
+ 0xA8020013, // 0011 EXBLK 0 #0026
+ 0x5C140800, // 0012 MOVE R5 R4
+ 0x7C140000, // 0013 CALL R5 0
+ 0x88180128, // 0014 GETMBR R6 R0 K40
+ 0x8C180D29, // 0015 GETMET R6 R6 K41
+ 0x5C200A00, // 0016 MOVE R8 R5
+ 0x7C180400, // 0017 CALL R6 2
+ 0x741A000B, // 0018 JMPT R6 #0025
+ 0x94180605, // 0019 GETIDX R6 R3 R5
+ 0x8C1C010F, // 001A GETMET R7 R0 K15
+ 0x5C240C00, // 001B MOVE R9 R6
+ 0x58280011, // 001C LDCONST R10 K17
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x781E0005, // 001E JMPF R7 #0025
+ 0x881C0128, // 001F GETMBR R7 R0 K40
+ 0x8C200112, // 0020 GETMET R8 R0 K18
+ 0x5C280C00, // 0021 MOVE R10 R6
+ 0x582C0011, // 0022 LDCONST R11 K17
+ 0x7C200600, // 0023 CALL R8 3
+ 0x981C0A08, // 0024 SETIDX R7 R5 R8
+ 0x7001FFEB, // 0025 JMP #0012
+ 0x58100032, // 0026 LDCONST R4 K50
+ 0xAC100200, // 0027 CATCH R4 1 0
+ 0xB0080000, // 0028 RAISE 2 R0 R0
+ 0x600C0003, // 0029 GETGBL R3 G3
+ 0x5C100400, // 002A MOVE R4 R2
+ 0x7C0C0200, // 002B CALL R3 1
+ 0x5C080600, // 002C MOVE R2 R3
+ 0x7001FFD5, // 002D JMP #0004
+ 0x80000000, // 002E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_ParameterizedObject_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x740A0004, // 0002 JMPT R2 #0008
+ 0x60080004, // 0003 GETGBL R2 G4
+ 0x5C0C0200, // 0004 MOVE R3 R1
+ 0x7C080200, // 0005 CALL R2 1
+ 0x20080520, // 0006 NE R2 R2 K32
+ 0x780A0000, // 0007 JMPF R2 #0009
+ 0xB0062933, // 0008 RAISE 1 K20 K51
+ 0x90025601, // 0009 SETMBR R0 K43 R1
+ 0x60080013, // 000A GETGBL R2 G19
+ 0x7C080000, // 000B CALL R2 0
+ 0x90025002, // 000C SETMBR R0 K40 R2
+ 0x50080000, // 000D LDBOOL R2 0 0
+ 0x90025A02, // 000E SETMBR R0 K45 R2
+ 0x8C080134, // 000F GETMET R2 R0 K52
+ 0x7C080200, // 0010 CALL R2 1
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _fix_time_ms
+********************************************************************/
+be_local_closure(class_ParameterizedObject__fix_time_ms, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_fix_time_ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x8808012B, // 0003 GETMBR R2 R0 K43
+ 0x8804052C, // 0004 GETMBR R1 R2 K44
+ 0x8808012E, // 0005 GETMBR R2 R0 K46
+ 0x4C0C0000, // 0006 LDNIL R3
+ 0x1C080403, // 0007 EQ R2 R2 R3
+ 0x780A0000, // 0008 JMPF R2 #000A
+ 0x90025C01, // 0009 SETMBR R0 K46 R1
+ 0x80040200, // 000A RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: has_param
+********************************************************************/
+be_local_closure(class_ParameterizedObject_has_param, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(has_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C08010C, // 0000 GETMET R2 R0 K12
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x4C0C0000, // 0003 LDNIL R3
+ 0x20080403, // 0004 NE R2 R2 R3
+ 0x80040400, // 0005 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ==
+********************************************************************/
+be_local_closure(class_ParameterizedObject__X3D_X3D, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_X3D_X3D),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xA40A5E00, // 0000 IMPORT R2 K47
+ 0x8C0C0535, // 0001 GETMET R3 R2 K53
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x8C100535, // 0004 GETMET R4 R2 K53
+ 0x5C180200, // 0005 MOVE R6 R1
+ 0x7C100400, // 0006 CALL R4 2
+ 0x1C0C0604, // 0007 EQ R3 R3 R4
+ 0x80040600, // 0008 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_param
+********************************************************************/
+be_local_closure(class_ParameterizedObject_set_param, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(set_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x8C0C0108, // 0000 GETMET R3 R0 K8
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x740E0001, // 0003 JMPT R3 #0006
+ 0x500C0000, // 0004 LDBOOL R3 0 0
+ 0x80040600, // 0005 RET 1 R3
+ 0xA8020008, // 0006 EXBLK 0 #0010
+ 0x8C0C0109, // 0007 GETMET R3 R0 K9
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x5C180400, // 0009 MOVE R6 R2
+ 0x7C0C0600, // 000A CALL R3 3
+ 0x500C0200, // 000B LDBOOL R3 1 0
+ 0xA8040001, // 000C EXBLK 1 1
+ 0x80040600, // 000D RET 1 R3
+ 0xA8040001, // 000E EXBLK 1 1
+ 0x70020006, // 000F JMP #0017
+ 0x580C0014, // 0010 LDCONST R3 K20
+ 0xAC0C0201, // 0011 CATCH R3 1 1
+ 0x70020002, // 0012 JMP #0016
+ 0x50100000, // 0013 LDBOOL R4 0 0
+ 0x80040800, // 0014 RET 1 R4
+ 0x70020000, // 0015 JMP #0017
+ 0xB0080000, // 0016 RAISE 2 R0 R0
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_ParameterizedObject_on_param_changed, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: !=
+********************************************************************/
+be_local_closure(class_ParameterizedObject__X21_X3D, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_X21_X3D),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x1C080001, // 0000 EQ R2 R0 R1
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0x50080001, // 0002 LDBOOL R2 0 1
+ 0x50080200, // 0003 LDBOOL R2 1 0
+ 0x80040400, // 0004 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _set_parameter_value
+********************************************************************/
+be_local_closure(class_ParameterizedObject__set_parameter_value, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_set_parameter_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xB80E1A00, // 0000 GETNGBL R3 K13
+ 0x8C0C070E, // 0001 GETMET R3 R3 K14
+ 0x5C140400, // 0002 MOVE R5 R2
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x740E0004, // 0004 JMPT R3 #000A
+ 0x8C0C0136, // 0005 GETMET R3 R0 K54
+ 0x5C140200, // 0006 MOVE R5 R1
+ 0x5C180400, // 0007 MOVE R6 R2
+ 0x7C0C0600, // 0008 CALL R3 3
+ 0x5C080600, // 0009 MOVE R2 R3
+ 0x880C0128, // 000A GETMBR R3 R0 K40
+ 0x980C0202, // 000B SETIDX R3 R1 R2
+ 0x8C0C0137, // 000C GETMET R3 R0 K55
+ 0x5C140200, // 000D MOVE R5 R1
+ 0x5C180400, // 000E MOVE R6 R2
+ 0x7C0C0600, // 000F CALL R3 3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tobool
+********************************************************************/
+be_local_closure(class_ParameterizedObject_tobool, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(tobool),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x50040200, // 0000 LDBOOL R1 1 0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_ParameterizedObject_tostring, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080038, // 0001 LDCONST R2 K56
+ 0x600C0005, // 0002 GETGBL R3 G5
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x8810012D, // 0005 GETMBR R4 R0 K45
+ 0x7C040600, // 0006 CALL R1 3
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: resolve_value
+********************************************************************/
+be_local_closure(class_ParameterizedObject_resolve_value, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(resolve_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0xB8121A00, // 0000 GETNGBL R4 K13
+ 0x8C10090E, // 0001 GETMET R4 R4 K14
+ 0x5C180200, // 0002 MOVE R6 R1
+ 0x7C100400, // 0003 CALL R4 2
+ 0x7812001A, // 0004 JMPF R4 #0020
+ 0x8C100339, // 0005 GETMET R4 R1 K57
+ 0x5C180400, // 0006 MOVE R6 R2
+ 0x5C1C0600, // 0007 MOVE R7 R3
+ 0x7C100600, // 0008 CALL R4 3
+ 0x4C140000, // 0009 LDNIL R5
+ 0x1C140805, // 000A EQ R5 R4 R5
+ 0x78160011, // 000B JMPF R5 #001E
+ 0x8C14010C, // 000C GETMET R5 R0 K12
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x8C18010F, // 000F GETMET R6 R0 K15
+ 0x5C200A00, // 0010 MOVE R8 R5
+ 0x58240010, // 0011 LDCONST R9 K16
+ 0x7C180600, // 0012 CALL R6 3
+ 0x741A0009, // 0013 JMPT R6 #001E
+ 0x8C18010F, // 0014 GETMET R6 R0 K15
+ 0x5C200A00, // 0015 MOVE R8 R5
+ 0x58240011, // 0016 LDCONST R9 K17
+ 0x7C180600, // 0017 CALL R6 3
+ 0x781A0004, // 0018 JMPF R6 #001E
+ 0x8C180112, // 0019 GETMET R6 R0 K18
+ 0x5C200A00, // 001A MOVE R8 R5
+ 0x58240011, // 001B LDCONST R9 K17
+ 0x7C180600, // 001C CALL R6 3
+ 0x5C100C00, // 001D MOVE R4 R6
+ 0x80040800, // 001E RET 1 R4
+ 0x70020000, // 001F JMP #0021
+ 0x80040200, // 0020 RET 1 R1
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_param_value
+********************************************************************/
+be_local_closure(class_ParameterizedObject_get_param_value, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(get_param_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C08013A, // 0000 GETMET R2 R0 K58
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x80040400, // 0003 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _get_param_def
+********************************************************************/
+be_local_closure(class_ParameterizedObject__get_param_def, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(_get_param_def),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0xA40A5E00, // 0000 IMPORT R2 K47
+ 0x600C0006, // 0001 GETGBL R3 G6
+ 0x5C100000, // 0002 MOVE R4 R0
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x4C100000, // 0004 LDNIL R4
+ 0x20100604, // 0005 NE R4 R3 R4
+ 0x78120010, // 0006 JMPF R4 #0018
+ 0x8C100529, // 0007 GETMET R4 R2 K41
+ 0x5C180600, // 0008 MOVE R6 R3
+ 0x581C0030, // 0009 LDCONST R7 K48
+ 0x7C100600, // 000A CALL R4 3
+ 0x78120006, // 000B JMPF R4 #0013
+ 0x88100730, // 000C GETMBR R4 R3 K48
+ 0x8C140929, // 000D GETMET R5 R4 K41
+ 0x5C1C0200, // 000E MOVE R7 R1
+ 0x7C140400, // 000F CALL R5 2
+ 0x78160001, // 0010 JMPF R5 #0013
+ 0x94140801, // 0011 GETIDX R5 R4 R1
+ 0x80040A00, // 0012 RET 1 R5
+ 0x60100003, // 0013 GETGBL R4 G3
+ 0x5C140600, // 0014 MOVE R5 R3
+ 0x7C100200, // 0015 CALL R4 1
+ 0x5C0C0800, // 0016 MOVE R3 R4
+ 0x7001FFEB, // 0017 JMP #0004
+ 0x4C100000, // 0018 LDNIL R4
+ 0x80040800, // 0019 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_param
+********************************************************************/
+be_local_closure(class_ParameterizedObject_get_param, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ParameterizedObject, /* shared constants */
+ be_str_weak(get_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x880C0128, // 0000 GETMBR R3 R0 K40
+ 0x8C0C0729, // 0001 GETMET R3 R3 K41
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x780E0002, // 0004 JMPF R3 #0008
+ 0x880C0128, // 0005 GETMBR R3 R0 K40
+ 0x940C0601, // 0006 GETIDX R3 R3 R1
+ 0x80040600, // 0007 RET 1 R3
+ 0x8C0C010C, // 0008 GETMET R3 R0 K12
+ 0x5C140200, // 0009 MOVE R5 R1
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x4C100000, // 000B LDNIL R4
+ 0x20100604, // 000C NE R4 R3 R4
+ 0x7812000A, // 000D JMPF R4 #0019
+ 0x8C10010F, // 000E GETMET R4 R0 K15
+ 0x5C180600, // 000F MOVE R6 R3
+ 0x581C0011, // 0010 LDCONST R7 K17
+ 0x7C100600, // 0011 CALL R4 3
+ 0x78120005, // 0012 JMPF R4 #0019
+ 0x8C100112, // 0013 GETMET R4 R0 K18
+ 0x5C180600, // 0014 MOVE R6 R3
+ 0x581C0011, // 0015 LDCONST R7 K17
+ 0x5C200400, // 0016 MOVE R8 R2
+ 0x7C100800, // 0017 CALL R4 4
+ 0x80040800, // 0018 RET 1 R4
+ 0x80040400, // 0019 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: ParameterizedObject
+********************************************************************/
+be_local_class(ParameterizedObject,
+ 4,
+ NULL,
+ be_nested_map(30,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(constraint_find, 10), be_const_static_closure(class_ParameterizedObject_constraint_find_closure) },
+ { be_const_key_weak(setmember, 20), be_const_closure(class_ParameterizedObject_setmember_closure) },
+ { be_const_key_weak(get_param, -1), be_const_closure(class_ParameterizedObject_get_param_closure) },
+ { be_const_key_weak(values, -1), be_const_var(0) },
+ { be_const_key_weak(update, -1), be_const_closure(class_ParameterizedObject_update_closure) },
+ { be_const_key_weak(_TYPES, 18), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(7,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_nested_str_weak(int),
+ be_nested_str_weak(string),
+ be_nested_str_weak(bytes),
+ be_nested_str_weak(bool),
+ be_nested_str_weak(any),
+ be_nested_str_weak(instance),
+ be_nested_str_weak(function),
+ })) ) } )) },
+ { be_const_key_weak(_resolve_parameter_value, -1), be_const_closure(class_ParameterizedObject__resolve_parameter_value_closure) },
+ { be_const_key_weak(constraint_mask, 21), be_const_static_closure(class_ParameterizedObject_constraint_mask_closure) },
+ { be_const_key_weak(_get_param_def, -1), be_const_closure(class_ParameterizedObject__get_param_def_closure) },
+ { be_const_key_weak(get_param_value, -1), be_const_closure(class_ParameterizedObject_get_param_value_closure) },
+ { be_const_key_weak(_MASK, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(6,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_nested_str_weak(min),
+ be_nested_str_weak(max),
+ be_nested_str_weak(default),
+ be_nested_str_weak(type),
+ be_nested_str_weak(enum),
+ be_nested_str_weak(nillable),
+ })) ) } )) },
+ { be_const_key_weak(start, -1), be_const_closure(class_ParameterizedObject_start_closure) },
+ { be_const_key_weak(is_running, -1), be_const_var(3) },
+ { be_const_key_weak(_init_parameter_values, -1), be_const_closure(class_ParameterizedObject__init_parameter_values_closure) },
+ { be_const_key_weak(has_param, 13), be_const_closure(class_ParameterizedObject_has_param_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_ParameterizedObject_init_closure) },
+ { be_const_key_weak(_fix_time_ms, -1), be_const_closure(class_ParameterizedObject__fix_time_ms_closure) },
+ { be_const_key_weak(stop, 14), be_const_closure(class_ParameterizedObject_stop_closure) },
+ { be_const_key_weak(_X3D_X3D, -1), be_const_closure(class_ParameterizedObject__X3D_X3D_closure) },
+ { be_const_key_weak(set_param, -1), be_const_closure(class_ParameterizedObject_set_param_closure) },
+ { be_const_key_weak(_X21_X3D, 26), be_const_closure(class_ParameterizedObject__X21_X3D_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ParameterizedObject_on_param_changed_closure) },
+ { be_const_key_weak(_set_parameter_value, -1), be_const_closure(class_ParameterizedObject__set_parameter_value_closure) },
+ { be_const_key_weak(engine, -1), be_const_var(1) },
+ { be_const_key_weak(tobool, -1), be_const_closure(class_ParameterizedObject_tobool_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_ParameterizedObject_tostring_closure) },
+ { be_const_key_weak(member, 12), be_const_closure(class_ParameterizedObject_member_closure) },
+ { be_const_key_weak(start_time, 9), be_const_var(2) },
+ { be_const_key_weak(_validate_param, 8), be_const_closure(class_ParameterizedObject__validate_param_closure) },
+ { be_const_key_weak(resolve_value, 2), be_const_closure(class_ParameterizedObject_resolve_value_closure) },
+ })),
+ be_str_weak(ParameterizedObject)
+);
+
+/********************************************************************
+** Solidified function: twinkle_gentle
+********************************************************************/
+be_local_closure(twinkle_gentle, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(twinkle_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(density),
+ /* K4 */ be_nested_str_weak(twinkle_speed),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(fade_speed),
+ /* K7 */ be_nested_str_weak(min_brightness),
+ /* K8 */ be_nested_str_weak(max_brightness),
+ }),
+ be_str_weak(twinkle_gentle),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x5409D6FF, // 0004 LDINT R2 -10496
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x540A003F, // 0006 LDINT R2 64
+ 0x90060602, // 0007 SETMBR R1 K3 R2
+ 0x90060905, // 0008 SETMBR R1 K4 K5
+ 0x540A0077, // 0009 LDINT R2 120
+ 0x90060C02, // 000A SETMBR R1 K6 R2
+ 0x540A000F, // 000B LDINT R2 16
+ 0x90060E02, // 000C SETMBR R1 K7 R2
+ 0x540A00B3, // 000D LDINT R2 180
+ 0x90061002, // 000E SETMBR R1 K8 R2
+ 0x80040200, // 000F RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_color_provider
+********************************************************************/
+be_local_closure(is_color_provider, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(color_provider),
+ }),
+ be_str_weak(is_color_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x6004000F, // 0000 GETGBL R1 G15
+ 0x5C080000, // 0001 MOVE R2 R0
+ 0xB80E0000, // 0002 GETNGBL R3 K0
+ 0x880C0701, // 0003 GETMBR R3 R3 K1
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_event_handlers
+********************************************************************/
+be_local_closure(get_event_handlers, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(event_manager),
+ /* K2 */ be_nested_str_weak(get_handlers),
+ }),
+ be_str_weak(get_event_handlers),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x8C040302, // 0002 GETMET R1 R1 K2
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: bounce
+********************************************************************/
+be_local_closure(bounce, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(BOUNCE),
+ }),
+ be_str_weak(bounce),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: pulsating_color_provider
+********************************************************************/
+be_local_closure(pulsating_color_provider, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(breathe_color),
+ /* K2 */ be_nested_str_weak(curve_factor),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_nested_str_weak(duration),
+ }),
+ be_str_weak(pulsating_color_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x90060503, // 0004 SETMBR R1 K2 K3
+ 0x540A03E7, // 0005 LDINT R2 1000
+ 0x90060802, // 0006 SETMBR R1 K4 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: noise_fractal
+********************************************************************/
+be_local_closure(noise_fractal, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(noise_animation),
+ /* K2 */ be_nested_str_weak(rich_palette),
+ /* K3 */ be_nested_str_weak(palette),
+ /* K4 */ be_nested_str_weak(PALETTE_RAINBOW),
+ /* K5 */ be_nested_str_weak(cycle_period),
+ /* K6 */ be_nested_str_weak(transition_type),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(brightness),
+ /* K9 */ be_nested_str_weak(color),
+ /* K10 */ be_nested_str_weak(scale),
+ /* K11 */ be_nested_str_weak(speed),
+ /* K12 */ be_nested_str_weak(octaves),
+ /* K13 */ be_const_int(3),
+ /* K14 */ be_nested_str_weak(persistence),
+ }),
+ be_str_weak(noise_fractal),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x8C080502, // 0005 GETMET R2 R2 K2
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0xB80E0000, // 0008 GETNGBL R3 K0
+ 0x880C0704, // 0009 GETMBR R3 R3 K4
+ 0x900A0603, // 000A SETMBR R2 K3 R3
+ 0x540E1387, // 000B LDINT R3 5000
+ 0x900A0A03, // 000C SETMBR R2 K5 R3
+ 0x900A0D07, // 000D SETMBR R2 K6 K7
+ 0x540E00FE, // 000E LDINT R3 255
+ 0x900A1003, // 000F SETMBR R2 K8 R3
+ 0x90061202, // 0010 SETMBR R1 K9 R2
+ 0x540E001D, // 0011 LDINT R3 30
+ 0x90061403, // 0012 SETMBR R1 K10 R3
+ 0x540E0013, // 0013 LDINT R3 20
+ 0x90061603, // 0014 SETMBR R1 K11 R3
+ 0x9006190D, // 0015 SETMBR R1 K12 K13
+ 0x540E007F, // 0016 LDINT R3 128
+ 0x90061C03, // 0017 SETMBR R1 K14 R3
+ 0x80040200, // 0018 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+extern const bclass be_class_ColorProvider;
+// compact class 'ColorProvider' ktab size: 10, total: 11 (saved 8 bytes)
+static const bvalue be_ktab_class_ColorProvider[10] = {
+ /* K0 */ be_nested_str_weak(produce_value),
+ /* K1 */ be_nested_str_weak(color),
+ /* K2 */ be_nested_str_weak(_color_lut),
+ /* K3 */ be_const_class(be_class_ColorProvider),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(scale_uint),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_const_int(-16777216),
+ /* K8 */ be_nested_str_weak(init),
+ /* K9 */ be_nested_str_weak(_lut_dirty),
+};
+
+
+extern const bclass be_class_ColorProvider;
+
+/********************************************************************
+** Solidified function: get_color_for_value
+********************************************************************/
+be_local_closure(class_ColorProvider_get_color_for_value, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorProvider, /* shared constants */
+ be_str_weak(get_color_for_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C0C0100, // 0000 GETMET R3 R0 K0
+ 0x58140001, // 0001 LDCONST R5 K1
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C0C0600, // 0003 CALL R3 3
+ 0x80040600, // 0004 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_lut
+********************************************************************/
+be_local_closure(class_ColorProvider_get_lut, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorProvider, /* shared constants */
+ be_str_weak(get_lut),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040102, // 0000 GETMBR R1 R0 K2
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: apply_brightness
+********************************************************************/
+be_local_closure(class_ColorProvider_apply_brightness, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 2, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorProvider, /* shared constants */
+ be_str_weak(apply_brightness),
+ &be_const_str_solidified,
+ ( &(const binstruction[51]) { /* code */
+ 0x58080003, // 0000 LDCONST R2 K3
+ 0x540E00FE, // 0001 LDINT R3 255
+ 0x1C0C0203, // 0002 EQ R3 R1 R3
+ 0x780E0000, // 0003 JMPF R3 #0005
+ 0x80040000, // 0004 RET 1 R0
+ 0x540E000F, // 0005 LDINT R3 16
+ 0x3C0C0003, // 0006 SHR R3 R0 R3
+ 0x541200FE, // 0007 LDINT R4 255
+ 0x2C0C0604, // 0008 AND R3 R3 R4
+ 0x54120007, // 0009 LDINT R4 8
+ 0x3C100004, // 000A SHR R4 R0 R4
+ 0x541600FE, // 000B LDINT R5 255
+ 0x2C100805, // 000C AND R4 R4 R5
+ 0x541600FE, // 000D LDINT R5 255
+ 0x2C140005, // 000E AND R5 R0 R5
+ 0xB81A0800, // 000F GETNGBL R6 K4
+ 0x8C180D05, // 0010 GETMET R6 R6 K5
+ 0x5C200600, // 0011 MOVE R8 R3
+ 0x58240006, // 0012 LDCONST R9 K6
+ 0x542A00FE, // 0013 LDINT R10 255
+ 0x582C0006, // 0014 LDCONST R11 K6
+ 0x5C300200, // 0015 MOVE R12 R1
+ 0x7C180C00, // 0016 CALL R6 6
+ 0x5C0C0C00, // 0017 MOVE R3 R6
+ 0xB81A0800, // 0018 GETNGBL R6 K4
+ 0x8C180D05, // 0019 GETMET R6 R6 K5
+ 0x5C200800, // 001A MOVE R8 R4
+ 0x58240006, // 001B LDCONST R9 K6
+ 0x542A00FE, // 001C LDINT R10 255
+ 0x582C0006, // 001D LDCONST R11 K6
+ 0x5C300200, // 001E MOVE R12 R1
+ 0x7C180C00, // 001F CALL R6 6
+ 0x5C100C00, // 0020 MOVE R4 R6
+ 0xB81A0800, // 0021 GETNGBL R6 K4
+ 0x8C180D05, // 0022 GETMET R6 R6 K5
+ 0x5C200A00, // 0023 MOVE R8 R5
+ 0x58240006, // 0024 LDCONST R9 K6
+ 0x542A00FE, // 0025 LDINT R10 255
+ 0x582C0006, // 0026 LDCONST R11 K6
+ 0x5C300200, // 0027 MOVE R12 R1
+ 0x7C180C00, // 0028 CALL R6 6
+ 0x5C140C00, // 0029 MOVE R5 R6
+ 0x2C180107, // 002A AND R6 R0 K7
+ 0x541E000F, // 002B LDINT R7 16
+ 0x381C0607, // 002C SHL R7 R3 R7
+ 0x30180C07, // 002D OR R6 R6 R7
+ 0x541E0007, // 002E LDINT R7 8
+ 0x381C0807, // 002F SHL R7 R4 R7
+ 0x30180C07, // 0030 OR R6 R6 R7
+ 0x30180C05, // 0031 OR R6 R6 R5
+ 0x80040C00, // 0032 RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_ColorProvider_produce_value, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x540DFFFE, // 0000 LDINT R3 -1
+ 0x80040600, // 0001 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_ColorProvider_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ColorProvider, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080508, // 0003 GETMET R2 R2 K8
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x4C080000, // 0006 LDNIL R2
+ 0x90020402, // 0007 SETMBR R0 K2 R2
+ 0x50080200, // 0008 LDBOOL R2 1 0
+ 0x90021202, // 0009 SETMBR R0 K9 R2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: ColorProvider
+********************************************************************/
+extern const bclass be_class_ValueProvider;
+be_local_class(ColorProvider,
+ 2,
+ &be_class_ValueProvider,
+ be_nested_map(9,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(LUT_FACTOR, 8), be_const_int(1) },
+ { be_const_key_weak(get_lut, 7), be_const_closure(class_ColorProvider_get_lut_closure) },
+ { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_ColorProvider_get_color_for_value_closure) },
+ { be_const_key_weak(produce_value, -1), be_const_closure(class_ColorProvider_produce_value_closure) },
+ { be_const_key_weak(_lut_dirty, -1), be_const_var(1) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
+ })) ) } )) },
+ { be_const_key_weak(init, 5), be_const_closure(class_ColorProvider_init_closure) },
+ { be_const_key_weak(_color_lut, -1), be_const_var(0) },
+ { be_const_key_weak(apply_brightness, -1), be_const_static_closure(class_ColorProvider_apply_brightness_closure) },
+ })),
+ be_str_weak(ColorProvider)
+);
+
+/********************************************************************
+** Solidified function: noise_single_color
+********************************************************************/
+be_local_closure(noise_single_color, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -1561,33 +5648,787 @@ be_local_closure(wave_single_sine, /* name */
1, /* has constants */
( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(wave_animation),
+ /* K1 */ be_nested_str_weak(noise_animation),
/* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(wave_type),
- /* K4 */ be_const_int(0),
- /* K5 */ be_nested_str_weak(frequency),
- /* K6 */ be_nested_str_weak(wave_speed),
+ /* K3 */ be_nested_str_weak(scale),
+ /* K4 */ be_nested_str_weak(speed),
+ /* K5 */ be_nested_str_weak(octaves),
+ /* K6 */ be_const_int(1),
}),
- be_str_weak(wave_single_sine),
+ be_str_weak(noise_single_color),
&be_const_str_solidified,
( &(const binstruction[12]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0
0x7C040400, // 0003 CALL R1 2
- 0x5408FFFF, // 0004 LDINT R2 -65536
+ 0x5409FFFE, // 0004 LDINT R2 -1
0x90060402, // 0005 SETMBR R1 K2 R2
- 0x90060704, // 0006 SETMBR R1 K3 K4
- 0x540A001F, // 0007 LDINT R2 32
- 0x90060A02, // 0008 SETMBR R1 K5 R2
- 0x540A0031, // 0009 LDINT R2 50
- 0x90060C02, // 000A SETMBR R1 K6 R2
+ 0x540A0031, // 0006 LDINT R2 50
+ 0x90060602, // 0007 SETMBR R1 K3 R2
+ 0x540A001D, // 0008 LDINT R2 30
+ 0x90060802, // 0009 SETMBR R1 K4 R2
+ 0x90060B06, // 000A SETMBR R1 K5 K6
0x80040200, // 000B RET 1 R1
})
)
);
/*******************************************************************/
+extern const bclass be_class_AnimationMath;
+// compact class 'AnimationMath' ktab size: 13, total: 31 (saved 144 bytes)
+static const bvalue be_ktab_class_AnimationMath[13] = {
+ /* K0 */ be_const_class(be_class_AnimationMath),
+ /* K1 */ be_nested_str_weak(math),
+ /* K2 */ be_nested_str_weak(int),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_const_real_hex(0x437F0000),
+ /* K5 */ be_nested_str_weak(sqrt),
+ /* K6 */ be_nested_str_weak(max),
+ /* K7 */ be_nested_str_weak(round),
+ /* K8 */ be_nested_str_weak(abs),
+ /* K9 */ be_nested_str_weak(tasmota),
+ /* K10 */ be_nested_str_weak(scale_int),
+ /* K11 */ be_nested_str_weak(sine_int),
+ /* K12 */ be_nested_str_weak(min),
+};
+
+
+extern const bclass be_class_AnimationMath;
+
+/********************************************************************
+** Solidified function: sqrt
+********************************************************************/
+be_local_closure(class_AnimationMath_sqrt, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(sqrt),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x600C0004, // 0002 GETGBL R3 G4
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x1C0C0702, // 0005 EQ R3 R3 K2
+ 0x780E000E, // 0006 JMPF R3 #0016
+ 0x280C0103, // 0007 GE R3 R0 K3
+ 0x780E000C, // 0008 JMPF R3 #0016
+ 0x540E00FE, // 0009 LDINT R3 255
+ 0x180C0003, // 000A LE R3 R0 R3
+ 0x780E0009, // 000B JMPF R3 #0016
+ 0x0C0C0104, // 000C DIV R3 R0 K4
+ 0x60100009, // 000D GETGBL R4 G9
+ 0x8C140505, // 000E GETMET R5 R2 K5
+ 0x5C1C0600, // 000F MOVE R7 R3
+ 0x7C140400, // 0010 CALL R5 2
+ 0x541A00FE, // 0011 LDINT R6 255
+ 0x08140A06, // 0012 MUL R5 R5 R6
+ 0x7C100200, // 0013 CALL R4 1
+ 0x80040800, // 0014 RET 1 R4
+ 0x70020003, // 0015 JMP #001A
+ 0x8C0C0505, // 0016 GETMET R3 R2 K5
+ 0x5C140000, // 0017 MOVE R5 R0
+ 0x7C0C0400, // 0018 CALL R3 2
+ 0x80040600, // 0019 RET 1 R3
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: max
+********************************************************************/
+be_local_closure(class_AnimationMath_max, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 13, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(max),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x600C0016, // 0002 GETGBL R3 G22
+ 0x88100506, // 0003 GETMBR R4 R2 K6
+ 0x5C140000, // 0004 MOVE R5 R0
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x80040600, // 0006 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: round
+********************************************************************/
+be_local_closure(class_AnimationMath_round, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(round),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x600C0009, // 0002 GETGBL R3 G9
+ 0x8C100507, // 0003 GETMET R4 R2 K7
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C100400, // 0005 CALL R4 2
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x80040600, // 0007 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: abs
+********************************************************************/
+be_local_closure(class_AnimationMath_abs, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(abs),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x8C0C0508, // 0002 GETMET R3 R2 K8
+ 0x5C140000, // 0003 MOVE R5 R0
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x80040600, // 0005 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: cos
+********************************************************************/
+be_local_closure(class_AnimationMath_cos, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(cos),
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xB80A1200, // 0001 GETNGBL R2 K9
+ 0x8C08050A, // 0002 GETMET R2 R2 K10
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x58140003, // 0004 LDCONST R5 K3
+ 0x541A00FE, // 0005 LDINT R6 255
+ 0x581C0003, // 0006 LDCONST R7 K3
+ 0x54227FFE, // 0007 LDINT R8 32767
+ 0x7C080C00, // 0008 CALL R2 6
+ 0xB80E1200, // 0009 GETNGBL R3 K9
+ 0x8C0C070B, // 000A GETMET R3 R3 K11
+ 0x54161FFF, // 000B LDINT R5 8192
+ 0x04140405, // 000C SUB R5 R2 R5
+ 0x7C0C0400, // 000D CALL R3 2
+ 0xB8121200, // 000E GETNGBL R4 K9
+ 0x8C10090A, // 000F GETMET R4 R4 K10
+ 0x5C180600, // 0010 MOVE R6 R3
+ 0x541DEFFF, // 0011 LDINT R7 -4096
+ 0x54220FFF, // 0012 LDINT R8 4096
+ 0x5425FF00, // 0013 LDINT R9 -255
+ 0x542A00FE, // 0014 LDINT R10 255
+ 0x7C100C00, // 0015 CALL R4 6
+ 0x80040800, // 0016 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: sin
+********************************************************************/
+be_local_closure(class_AnimationMath_sin, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(sin),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xB80A1200, // 0001 GETNGBL R2 K9
+ 0x8C08050A, // 0002 GETMET R2 R2 K10
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x58140003, // 0004 LDCONST R5 K3
+ 0x541A00FE, // 0005 LDINT R6 255
+ 0x581C0003, // 0006 LDCONST R7 K3
+ 0x54227FFE, // 0007 LDINT R8 32767
+ 0x7C080C00, // 0008 CALL R2 6
+ 0xB80E1200, // 0009 GETNGBL R3 K9
+ 0x8C0C070B, // 000A GETMET R3 R3 K11
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x7C0C0400, // 000C CALL R3 2
+ 0xB8121200, // 000D GETNGBL R4 K9
+ 0x8C10090A, // 000E GETMET R4 R4 K10
+ 0x5C180600, // 000F MOVE R6 R3
+ 0x541DEFFF, // 0010 LDINT R7 -4096
+ 0x54220FFF, // 0011 LDINT R8 4096
+ 0x5425FF00, // 0012 LDINT R9 -255
+ 0x542A00FE, // 0013 LDINT R10 255
+ 0x7C100C00, // 0014 CALL R4 6
+ 0x80040800, // 0015 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: scale
+********************************************************************/
+be_local_closure(class_AnimationMath_scale, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 5, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(scale),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x58140000, // 0000 LDCONST R5 K0
+ 0xB81A1200, // 0001 GETNGBL R6 K9
+ 0x8C180D0A, // 0002 GETMET R6 R6 K10
+ 0x5C200000, // 0003 MOVE R8 R0
+ 0x5C240200, // 0004 MOVE R9 R1
+ 0x5C280400, // 0005 MOVE R10 R2
+ 0x5C2C0600, // 0006 MOVE R11 R3
+ 0x5C300800, // 0007 MOVE R12 R4
+ 0x7C180C00, // 0008 CALL R6 6
+ 0x80040C00, // 0009 RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: min
+********************************************************************/
+be_local_closure(class_AnimationMath_min, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 13, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_AnimationMath, /* shared constants */
+ be_str_weak(min),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x600C0016, // 0002 GETGBL R3 G22
+ 0x8810050C, // 0003 GETMBR R4 R2 K12
+ 0x5C140000, // 0004 MOVE R5 R0
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x80040600, // 0006 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: AnimationMath
+********************************************************************/
+be_local_class(AnimationMath,
+ 0,
+ NULL,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(min, -1), be_const_static_closure(class_AnimationMath_min_closure) },
+ { be_const_key_weak(max, 2), be_const_static_closure(class_AnimationMath_max_closure) },
+ { be_const_key_weak(scale, -1), be_const_static_closure(class_AnimationMath_scale_closure) },
+ { be_const_key_weak(round, 6), be_const_static_closure(class_AnimationMath_round_closure) },
+ { be_const_key_weak(cos, -1), be_const_static_closure(class_AnimationMath_cos_closure) },
+ { be_const_key_weak(sin, -1), be_const_static_closure(class_AnimationMath_sin_closure) },
+ { be_const_key_weak(abs, -1), be_const_static_closure(class_AnimationMath_abs_closure) },
+ { be_const_key_weak(sqrt, 0), be_const_static_closure(class_AnimationMath_sqrt_closure) },
+ })),
+ be_str_weak(AnimationMath)
+);
+
+/********************************************************************
+** Solidified function: sine_osc
+********************************************************************/
+be_local_closure(sine_osc, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(SINE),
+ }),
+ be_str_weak(sine_osc),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'BeaconAnimation' ktab size: 15, total: 19 (saved 32 bytes)
+static const bvalue be_ktab_class_BeaconAnimation[15] = {
+ /* K0 */ be_nested_str_weak(back_color),
+ /* K1 */ be_nested_str_weak(pos),
+ /* K2 */ be_nested_str_weak(slew_size),
+ /* K3 */ be_nested_str_weak(beacon_size),
+ /* K4 */ be_nested_str_weak(color),
+ /* K5 */ be_const_int(-16777216),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(fill_pixels),
+ /* K8 */ be_nested_str_weak(pixels),
+ /* K9 */ be_nested_str_weak(tasmota),
+ /* K10 */ be_nested_str_weak(scale_int),
+ /* K11 */ be_const_int(1),
+ /* K12 */ be_nested_str_weak(blend_linear),
+ /* K13 */ be_nested_str_weak(set_pixel_color),
+ /* K14 */ be_nested_str_weak(BeaconAnimation_X28color_X3D0x_X2508x_X2C_X20pos_X3D_X25s_X2C_X20beacon_size_X3D_X25s_X2C_X20slew_size_X3D_X25s_X29),
+};
+
+
+extern const bclass be_class_BeaconAnimation;
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_BeaconAnimation_render, /* name */
+ be_nested_proto(
+ 23, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BeaconAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x88140101, // 0001 GETMBR R5 R0 K1
+ 0x88180102, // 0002 GETMBR R6 R0 K2
+ 0x881C0103, // 0003 GETMBR R7 R0 K3
+ 0x88200104, // 0004 GETMBR R8 R0 K4
+ 0x20240905, // 0005 NE R9 R4 K5
+ 0x78260006, // 0006 JMPF R9 #000E
+ 0x2C240905, // 0007 AND R9 R4 K5
+ 0x20241306, // 0008 NE R9 R9 K6
+ 0x78260003, // 0009 JMPF R9 #000E
+ 0x8C240307, // 000A GETMET R9 R1 K7
+ 0x882C0308, // 000B GETMBR R11 R1 K8
+ 0x5C300800, // 000C MOVE R12 R4
+ 0x7C240600, // 000D CALL R9 3
+ 0x5C240A00, // 000E MOVE R9 R5
+ 0x00280A07, // 000F ADD R10 R5 R7
+ 0x142C1306, // 0010 LT R11 R9 K6
+ 0x782E0000, // 0011 JMPF R11 #0013
+ 0x58240006, // 0012 LDCONST R9 K6
+ 0x282C1403, // 0013 GE R11 R10 R3
+ 0x782E0000, // 0014 JMPF R11 #0016
+ 0x5C280600, // 0015 MOVE R10 R3
+ 0x8C2C0307, // 0016 GETMET R11 R1 K7
+ 0x88340308, // 0017 GETMBR R13 R1 K8
+ 0x5C381000, // 0018 MOVE R14 R8
+ 0x5C3C1200, // 0019 MOVE R15 R9
+ 0x5C401400, // 001A MOVE R16 R10
+ 0x7C2C0A00, // 001B CALL R11 5
+ 0x4C2C0000, // 001C LDNIL R11
+ 0x24300D06, // 001D GT R12 R6 K6
+ 0x7832003F, // 001E JMPF R12 #005F
+ 0x04300A06, // 001F SUB R12 R5 R6
+ 0x5C340A00, // 0020 MOVE R13 R5
+ 0x14381906, // 0021 LT R14 R12 K6
+ 0x783A0000, // 0022 JMPF R14 #0024
+ 0x58300006, // 0023 LDCONST R12 K6
+ 0x28381A03, // 0024 GE R14 R13 R3
+ 0x783A0000, // 0025 JMPF R14 #0027
+ 0x5C340600, // 0026 MOVE R13 R3
+ 0x5C2C1800, // 0027 MOVE R11 R12
+ 0x1438160D, // 0028 LT R14 R11 R13
+ 0x783A0013, // 0029 JMPF R14 #003E
+ 0xB83A1200, // 002A GETNGBL R14 K9
+ 0x8C381D0A, // 002B GETMET R14 R14 K10
+ 0x5C401600, // 002C MOVE R16 R11
+ 0x04440A06, // 002D SUB R17 R5 R6
+ 0x0444230B, // 002E SUB R17 R17 K11
+ 0x5C480A00, // 002F MOVE R18 R5
+ 0x544E00FE, // 0030 LDINT R19 255
+ 0x58500006, // 0031 LDCONST R20 K6
+ 0x7C380C00, // 0032 CALL R14 6
+ 0x8C3C030C, // 0033 GETMET R15 R1 K12
+ 0x5C440800, // 0034 MOVE R17 R4
+ 0x5C481000, // 0035 MOVE R18 R8
+ 0x5C4C1C00, // 0036 MOVE R19 R14
+ 0x7C3C0800, // 0037 CALL R15 4
+ 0x8C40030D, // 0038 GETMET R16 R1 K13
+ 0x5C481600, // 0039 MOVE R18 R11
+ 0x5C4C1E00, // 003A MOVE R19 R15
+ 0x7C400600, // 003B CALL R16 3
+ 0x002C170B, // 003C ADD R11 R11 K11
+ 0x7001FFE9, // 003D JMP #0028
+ 0x00380A07, // 003E ADD R14 R5 R7
+ 0x003C0A07, // 003F ADD R15 R5 R7
+ 0x003C1E06, // 0040 ADD R15 R15 R6
+ 0x14401D06, // 0041 LT R16 R14 K6
+ 0x78420000, // 0042 JMPF R16 #0044
+ 0x58380006, // 0043 LDCONST R14 K6
+ 0x28401E03, // 0044 GE R16 R15 R3
+ 0x78420000, // 0045 JMPF R16 #0047
+ 0x5C3C0600, // 0046 MOVE R15 R3
+ 0x5C2C1C00, // 0047 MOVE R11 R14
+ 0x1440160F, // 0048 LT R16 R11 R15
+ 0x78420014, // 0049 JMPF R16 #005F
+ 0xB8421200, // 004A GETNGBL R16 K9
+ 0x8C40210A, // 004B GETMET R16 R16 K10
+ 0x5C481600, // 004C MOVE R18 R11
+ 0x004C0A07, // 004D ADD R19 R5 R7
+ 0x044C270B, // 004E SUB R19 R19 K11
+ 0x00500A07, // 004F ADD R20 R5 R7
+ 0x00502806, // 0050 ADD R20 R20 R6
+ 0x58540006, // 0051 LDCONST R21 K6
+ 0x545A00FE, // 0052 LDINT R22 255
+ 0x7C400C00, // 0053 CALL R16 6
+ 0x8C44030C, // 0054 GETMET R17 R1 K12
+ 0x5C4C0800, // 0055 MOVE R19 R4
+ 0x5C501000, // 0056 MOVE R20 R8
+ 0x5C542000, // 0057 MOVE R21 R16
+ 0x7C440800, // 0058 CALL R17 4
+ 0x8C48030D, // 0059 GETMET R18 R1 K13
+ 0x5C501600, // 005A MOVE R20 R11
+ 0x5C542200, // 005B MOVE R21 R17
+ 0x7C480600, // 005C CALL R18 3
+ 0x002C170B, // 005D ADD R11 R11 K11
+ 0x7001FFE8, // 005E JMP #0048
+ 0x50300200, // 005F LDBOOL R12 1 0
+ 0x80041800, // 0060 RET 1 R12
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_BeaconAnimation_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_BeaconAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x5808000E, // 0001 LDCONST R2 K14
+ 0x880C0104, // 0002 GETMBR R3 R0 K4
+ 0x88100101, // 0003 GETMBR R4 R0 K1
+ 0x88140103, // 0004 GETMBR R5 R0 K3
+ 0x88180102, // 0005 GETMBR R6 R0 K2
+ 0x7C040A00, // 0006 CALL R1 5
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: BeaconAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(BeaconAnimation,
+ 0,
+ &be_class_Animation,
+ be_nested_map(3,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(slew_size, -1), be_const_bytes_instance(0500000000) },
+ { be_const_key_weak(pos, -1), be_const_bytes_instance(040000) },
+ { be_const_key_weak(back_color, 0), be_const_bytes_instance(0402000000FF) },
+ { be_const_key_weak(beacon_size, -1), be_const_bytes_instance(0500000001) },
+ })) ) } )) },
+ { be_const_key_weak(render, 2), be_const_closure(class_BeaconAnimation_render_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_BeaconAnimation_tostring_closure) },
+ })),
+ be_str_weak(BeaconAnimation)
+);
+// compact class 'CrenelPositionAnimation' ktab size: 19, total: 24 (saved 40 bytes)
+static const bvalue be_ktab_class_CrenelPositionAnimation[19] = {
+ /* K0 */ be_nested_str_weak(back_color),
+ /* K1 */ be_nested_str_weak(pos),
+ /* K2 */ be_nested_str_weak(pulse_size),
+ /* K3 */ be_nested_str_weak(low_size),
+ /* K4 */ be_nested_str_weak(nb_pulse),
+ /* K5 */ be_nested_str_weak(color),
+ /* K6 */ be_const_int(-16777216),
+ /* K7 */ be_nested_str_weak(fill_pixels),
+ /* K8 */ be_nested_str_weak(pixels),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(set_pixel_color),
+ /* K12 */ be_nested_str_weak(get_param),
+ /* K13 */ be_nested_str_weak(animation),
+ /* K14 */ be_nested_str_weak(is_value_provider),
+ /* K15 */ be_nested_str_weak(0x_X2508x),
+ /* K16 */ be_nested_str_weak(CrenelPositionAnimation_X28color_X3D_X25s_X2C_X20pos_X3D_X25s_X2C_X20pulse_size_X3D_X25s_X2C_X20low_size_X3D_X25s_X2C_X20nb_pulse_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K17 */ be_nested_str_weak(priority),
+ /* K18 */ be_nested_str_weak(is_running),
+};
+
+
+extern const bclass be_class_CrenelPositionAnimation;
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_CrenelPositionAnimation_render, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CrenelPositionAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[64]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x88140101, // 0001 GETMBR R5 R0 K1
+ 0x88180102, // 0002 GETMBR R6 R0 K2
+ 0x881C0103, // 0003 GETMBR R7 R0 K3
+ 0x88200104, // 0004 GETMBR R8 R0 K4
+ 0x88240105, // 0005 GETMBR R9 R0 K5
+ 0x60280009, // 0006 GETGBL R10 G9
+ 0x002C0C07, // 0007 ADD R11 R6 R7
+ 0x7C280200, // 0008 CALL R10 1
+ 0x202C0906, // 0009 NE R11 R4 K6
+ 0x782E0003, // 000A JMPF R11 #000F
+ 0x8C2C0307, // 000B GETMET R11 R1 K7
+ 0x88340308, // 000C GETMBR R13 R1 K8
+ 0x5C380800, // 000D MOVE R14 R4
+ 0x7C2C0600, // 000E CALL R11 3
+ 0x182C1509, // 000F LE R11 R10 K9
+ 0x782E0000, // 0010 JMPF R11 #0012
+ 0x5828000A, // 0011 LDCONST R10 K10
+ 0x1C2C1109, // 0012 EQ R11 R8 K9
+ 0x782E0001, // 0013 JMPF R11 #0016
+ 0x502C0200, // 0014 LDBOOL R11 1 0
+ 0x80041600, // 0015 RET 1 R11
+ 0x142C1109, // 0016 LT R11 R8 K9
+ 0x782E0006, // 0017 JMPF R11 #001F
+ 0x002C0A06, // 0018 ADD R11 R5 R6
+ 0x042C170A, // 0019 SUB R11 R11 K10
+ 0x102C160A, // 001A MOD R11 R11 R10
+ 0x042C1606, // 001B SUB R11 R11 R6
+ 0x002C170A, // 001C ADD R11 R11 K10
+ 0x5C141600, // 001D MOVE R5 R11
+ 0x70020007, // 001E JMP #0027
+ 0x442C1400, // 001F NEG R11 R10
+ 0x142C0A0B, // 0020 LT R11 R5 R11
+ 0x782E0004, // 0021 JMPF R11 #0027
+ 0x202C1109, // 0022 NE R11 R8 K9
+ 0x782E0002, // 0023 JMPF R11 #0027
+ 0x00140A0A, // 0024 ADD R5 R5 R10
+ 0x0420110A, // 0025 SUB R8 R8 K10
+ 0x7001FFF7, // 0026 JMP #001F
+ 0x142C0A03, // 0027 LT R11 R5 R3
+ 0x782E0014, // 0028 JMPF R11 #003E
+ 0x202C1109, // 0029 NE R11 R8 K9
+ 0x782E0012, // 002A JMPF R11 #003E
+ 0x582C0009, // 002B LDCONST R11 K9
+ 0x14300B09, // 002C LT R12 R5 K9
+ 0x78320001, // 002D JMPF R12 #0030
+ 0x44300A00, // 002E NEG R12 R5
+ 0x5C2C1800, // 002F MOVE R11 R12
+ 0x14301606, // 0030 LT R12 R11 R6
+ 0x78320008, // 0031 JMPF R12 #003B
+ 0x00300A0B, // 0032 ADD R12 R5 R11
+ 0x14301803, // 0033 LT R12 R12 R3
+ 0x78320005, // 0034 JMPF R12 #003B
+ 0x8C30030B, // 0035 GETMET R12 R1 K11
+ 0x00380A0B, // 0036 ADD R14 R5 R11
+ 0x5C3C1200, // 0037 MOVE R15 R9
+ 0x7C300600, // 0038 CALL R12 3
+ 0x002C170A, // 0039 ADD R11 R11 K10
+ 0x7001FFF4, // 003A JMP #0030
+ 0x00140A0A, // 003B ADD R5 R5 R10
+ 0x0420110A, // 003C SUB R8 R8 K10
+ 0x7001FFE8, // 003D JMP #0027
+ 0x502C0200, // 003E LDBOOL R11 1 0
+ 0x80041600, // 003F RET 1 R11
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_CrenelPositionAnimation_tostring, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CrenelPositionAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0x8C08010C, // 0001 GETMET R2 R0 K12
+ 0x58100005, // 0002 LDCONST R4 K5
+ 0x7C080400, // 0003 CALL R2 2
+ 0xB80E1A00, // 0004 GETNGBL R3 K13
+ 0x8C0C070E, // 0005 GETMET R3 R3 K14
+ 0x5C140400, // 0006 MOVE R5 R2
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x780E0004, // 0008 JMPF R3 #000E
+ 0x600C0008, // 0009 GETGBL R3 G8
+ 0x5C100400, // 000A MOVE R4 R2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x5C040600, // 000C MOVE R1 R3
+ 0x70020004, // 000D JMP #0013
+ 0x600C0018, // 000E GETGBL R3 G24
+ 0x5810000F, // 000F LDCONST R4 K15
+ 0x88140105, // 0010 GETMBR R5 R0 K5
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x5C040600, // 0012 MOVE R1 R3
+ 0x600C0018, // 0013 GETGBL R3 G24
+ 0x58100010, // 0014 LDCONST R4 K16
+ 0x5C140200, // 0015 MOVE R5 R1
+ 0x88180101, // 0016 GETMBR R6 R0 K1
+ 0x881C0102, // 0017 GETMBR R7 R0 K2
+ 0x88200103, // 0018 GETMBR R8 R0 K3
+ 0x88240104, // 0019 GETMBR R9 R0 K4
+ 0x88280111, // 001A GETMBR R10 R0 K17
+ 0x882C0112, // 001B GETMBR R11 R0 K18
+ 0x7C0C1000, // 001C CALL R3 8
+ 0x80040600, // 001D RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: CrenelPositionAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(CrenelPositionAnimation,
+ 0,
+ &be_class_Animation,
+ be_nested_map(3,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(nb_pulse, -1), be_const_bytes_instance(0400FF) },
+ { be_const_key_weak(low_size, 4), be_const_bytes_instance(0500000003) },
+ { be_const_key_weak(pos, 1), be_const_bytes_instance(040000) },
+ { be_const_key_weak(pulse_size, -1), be_const_bytes_instance(0500000001) },
+ { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) },
+ })) ) } )) },
+ { be_const_key_weak(render, 2), be_const_closure(class_CrenelPositionAnimation_render_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_CrenelPositionAnimation_tostring_closure) },
+ })),
+ be_str_weak(CrenelPositionAnimation)
+);
/********************************************************************
** Solidified function: gradient_two_color_linear
@@ -1629,41 +6470,61 @@ be_local_closure(gradient_two_color_linear, /* name */
);
/*******************************************************************/
-// compact class 'CometAnimation' ktab size: 24, total: 42 (saved 144 bytes)
-static const bvalue be_ktab_class_CometAnimation[24] = {
- /* K0 */ be_nested_str_weak(speed),
- /* K1 */ be_nested_str_weak(direction),
- /* K2 */ be_nested_str_weak(wrap_around),
- /* K3 */ be_nested_str_weak(engine),
- /* K4 */ be_nested_str_weak(strip_length),
- /* K5 */ be_nested_str_weak(start_time),
- /* K6 */ be_const_int(0),
- /* K7 */ be_nested_str_weak(head_position),
+// compact class 'GradientAnimation' ktab size: 44, total: 80 (saved 288 bytes)
+static const bvalue be_ktab_class_GradientAnimation[44] = {
+ /* K0 */ be_nested_str_weak(update),
+ /* K1 */ be_nested_str_weak(movement_speed),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(start_time),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(scale_uint),
+ /* K6 */ be_nested_str_weak(phase_offset),
+ /* K7 */ be_nested_str_weak(_calculate_gradient),
/* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(init),
- /* K10 */ be_nested_str_weak(animation),
- /* K11 */ be_nested_str_weak(is_value_provider),
+ /* K9 */ be_nested_str_weak(direction),
+ /* K10 */ be_nested_str_weak(spread),
+ /* K11 */ be_nested_str_weak(gradient_type),
/* K12 */ be_nested_str_weak(color),
- /* K13 */ be_nested_str_weak(0x_X2508x),
- /* K14 */ be_nested_str_weak(CometAnimation_X28color_X3D_X25s_X2C_X20head_pos_X3D_X25_X2E1f_X2C_X20tail_length_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20direction_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K15 */ be_nested_str_weak(tail_length),
- /* K16 */ be_nested_str_weak(priority),
- /* K17 */ be_nested_str_weak(is_running),
- /* K18 */ be_nested_str_weak(fade_factor),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(scale_uint),
- /* K21 */ be_nested_str_weak(width),
- /* K22 */ be_nested_str_weak(set_pixel_color),
- /* K23 */ be_nested_str_weak(on_param_changed),
+ /* K13 */ be_nested_str_weak(priority),
+ /* K14 */ be_nested_str_weak(linear),
+ /* K15 */ be_nested_str_weak(radial),
+ /* K16 */ be_nested_str_weak(animation),
+ /* K17 */ be_nested_str_weak(is_value_provider),
+ /* K18 */ be_nested_str_weak(rainbow),
+ /* K19 */ be_nested_str_weak(0x_X2508x),
+ /* K20 */ be_nested_str_weak(GradientAnimation_X28_X25s_X2C_X20color_X3D_X25s_X2C_X20movement_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K21 */ be_nested_str_weak(is_running),
+ /* K22 */ be_nested_str_weak(width),
+ /* K23 */ be_nested_str_weak(current_colors),
+ /* K24 */ be_nested_str_weak(set_pixel_color),
+ /* K25 */ be_nested_str_weak(on_param_changed),
+ /* K26 */ be_nested_str_weak(engine),
+ /* K27 */ be_nested_str_weak(strip_length),
+ /* K28 */ be_nested_str_weak(resize),
+ /* K29 */ be_const_int(-16777216),
+ /* K30 */ be_nested_str_weak(_calculate_linear_position),
+ /* K31 */ be_nested_str_weak(_calculate_radial_position),
+ /* K32 */ be_nested_str_weak(light_state),
+ /* K33 */ be_const_int(3),
+ /* K34 */ be_nested_str_weak(HsToRgb),
+ /* K35 */ be_nested_str_weak(r),
+ /* K36 */ be_nested_str_weak(g),
+ /* K37 */ be_nested_str_weak(b),
+ /* K38 */ be_nested_str_weak(is_color_provider),
+ /* K39 */ be_nested_str_weak(get_color_for_value),
+ /* K40 */ be_nested_str_weak(resolve_value),
+ /* K41 */ be_nested_str_weak(int),
+ /* K42 */ be_nested_str_weak(init),
+ /* K43 */ be_nested_str_weak(center_pos),
};
-extern const bclass be_class_CometAnimation;
+extern const bclass be_class_GradientAnimation;
/********************************************************************
** Solidified function: update
********************************************************************/
-be_local_closure(class_CometAnimation_update, /* name */
+be_local_closure(class_GradientAnimation_update, /* name */
be_nested_proto(
11, /* nstack */
2, /* argc */
@@ -1673,66 +6534,41 @@ be_local_closure(class_CometAnimation_update, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CometAnimation, /* shared constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
be_str_weak(update),
&be_const_str_solidified,
- ( &(const binstruction[56]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x88100102, // 0002 GETMBR R4 R0 K2
- 0x88140103, // 0003 GETMBR R5 R0 K3
- 0x88140B04, // 0004 GETMBR R5 R5 K4
- 0x88180105, // 0005 GETMBR R6 R0 K5
- 0x04180206, // 0006 SUB R6 R1 R6
- 0x081C0406, // 0007 MUL R7 R2 R6
- 0x081C0E03, // 0008 MUL R7 R7 R3
- 0x542203E7, // 0009 LDINT R8 1000
- 0x0C1C0E08, // 000A DIV R7 R7 R8
- 0x24200706, // 000B GT R8 R3 K6
- 0x78220001, // 000C JMPF R8 #000F
- 0x90020E07, // 000D SETMBR R0 K7 R7
- 0x70020004, // 000E JMP #0014
- 0x04200B08, // 000F SUB R8 R5 K8
- 0x542600FF, // 0010 LDINT R9 256
- 0x08201009, // 0011 MUL R8 R8 R9
- 0x00201007, // 0012 ADD R8 R8 R7
- 0x90020E08, // 0013 SETMBR R0 K7 R8
- 0x542200FF, // 0014 LDINT R8 256
- 0x08200A08, // 0015 MUL R8 R5 R8
- 0x20240906, // 0016 NE R9 R4 K6
- 0x7826000E, // 0017 JMPF R9 #0027
- 0x88240107, // 0018 GETMBR R9 R0 K7
- 0x28241208, // 0019 GE R9 R9 R8
- 0x78260003, // 001A JMPF R9 #001F
- 0x88240107, // 001B GETMBR R9 R0 K7
- 0x04241208, // 001C SUB R9 R9 R8
- 0x90020E09, // 001D SETMBR R0 K7 R9
- 0x7001FFF8, // 001E JMP #0018
- 0x88240107, // 001F GETMBR R9 R0 K7
- 0x14241306, // 0020 LT R9 R9 K6
- 0x78260003, // 0021 JMPF R9 #0026
- 0x88240107, // 0022 GETMBR R9 R0 K7
- 0x00241208, // 0023 ADD R9 R9 R8
- 0x90020E09, // 0024 SETMBR R0 K7 R9
- 0x7001FFF8, // 0025 JMP #001F
- 0x7002000F, // 0026 JMP #0037
- 0x88240107, // 0027 GETMBR R9 R0 K7
- 0x28241208, // 0028 GE R9 R9 R8
- 0x78260006, // 0029 JMPF R9 #0031
- 0x04240B08, // 002A SUB R9 R5 K8
- 0x542A00FF, // 002B LDINT R10 256
- 0x0824120A, // 002C MUL R9 R9 R10
- 0x90020E09, // 002D SETMBR R0 K7 R9
- 0x44240600, // 002E NEG R9 R3
- 0x90020209, // 002F SETMBR R0 K1 R9
- 0x70020005, // 0030 JMP #0037
- 0x88240107, // 0031 GETMBR R9 R0 K7
- 0x14241306, // 0032 LT R9 R9 K6
- 0x78260002, // 0033 JMPF R9 #0037
- 0x90020F06, // 0034 SETMBR R0 K7 K6
- 0x44240600, // 0035 NEG R9 R3
- 0x90020209, // 0036 SETMBR R0 K1 R9
- 0x80000000, // 0037 RET 0
+ ( &(const binstruction[31]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x240C0502, // 0007 GT R3 R2 K2
+ 0x780E0011, // 0008 JMPF R3 #001B
+ 0x880C0103, // 0009 GETMBR R3 R0 K3
+ 0x040C0203, // 000A SUB R3 R1 R3
+ 0xB8120800, // 000B GETNGBL R4 K4
+ 0x8C100905, // 000C GETMET R4 R4 K5
+ 0x5C180400, // 000D MOVE R6 R2
+ 0x581C0002, // 000E LDCONST R7 K2
+ 0x542200FE, // 000F LDINT R8 255
+ 0x58240002, // 0010 LDCONST R9 K2
+ 0x542A0009, // 0011 LDINT R10 10
+ 0x7C100C00, // 0012 CALL R4 6
+ 0x24140902, // 0013 GT R5 R4 K2
+ 0x78160005, // 0014 JMPF R5 #001B
+ 0x08140604, // 0015 MUL R5 R3 R4
+ 0x541A03E7, // 0016 LDINT R6 1000
+ 0x0C140A06, // 0017 DIV R5 R5 R6
+ 0x541A00FF, // 0018 LDINT R6 256
+ 0x10140A06, // 0019 MOD R5 R5 R6
+ 0x90020C05, // 001A SETMBR R0 K6 R5
+ 0x8C0C0107, // 001B GETMET R3 R0 K7
+ 0x5C140200, // 001C MOVE R5 R1
+ 0x7C0C0400, // 001D CALL R3 2
+ 0x80000000, // 001E RET 0
})
)
);
@@ -1740,30 +6576,72 @@ be_local_closure(class_CometAnimation_update, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: _calculate_linear_position
********************************************************************/
-be_local_closure(class_CometAnimation_init, /* name */
+be_local_closure(class_GradientAnimation__calculate_linear_position, /* name */
be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
+ 13, /* nstack */
+ 3, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CometAnimation, /* shared constants */
- be_str_weak(init),
+ &be_ktab_class_GradientAnimation, /* shared constants */
+ be_str_weak(_calculate_linear_position),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080509, // 0003 GETMET R2 R2 K9
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x90020F06, // 0006 SETMBR R0 K7 K6
- 0x80000000, // 0007 RET 0
+ ( &(const binstruction[50]) { /* code */
+ 0xB80E0800, // 0000 GETNGBL R3 K4
+ 0x8C0C0705, // 0001 GETMET R3 R3 K5
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x58180002, // 0003 LDCONST R6 K2
+ 0x041C0508, // 0004 SUB R7 R2 K8
+ 0x58200002, // 0005 LDCONST R8 K2
+ 0x542600FE, // 0006 LDINT R9 255
+ 0x7C0C0C00, // 0007 CALL R3 6
+ 0x88100109, // 0008 GETMBR R4 R0 K9
+ 0x8814010A, // 0009 GETMBR R5 R0 K10
+ 0x541A007F, // 000A LDINT R6 128
+ 0x18180806, // 000B LE R6 R4 R6
+ 0x781A000C, // 000C JMPF R6 #001A
+ 0xB81A0800, // 000D GETNGBL R6 K4
+ 0x8C180D05, // 000E GETMET R6 R6 K5
+ 0x5C200800, // 000F MOVE R8 R4
+ 0x58240002, // 0010 LDCONST R9 K2
+ 0x542A007F, // 0011 LDINT R10 128
+ 0x582C0002, // 0012 LDCONST R11 K2
+ 0x5432007F, // 0013 LDINT R12 128
+ 0x7C180C00, // 0014 CALL R6 6
+ 0x001C0606, // 0015 ADD R7 R3 R6
+ 0x542200FF, // 0016 LDINT R8 256
+ 0x101C0E08, // 0017 MOD R7 R7 R8
+ 0x5C0C0E00, // 0018 MOVE R3 R7
+ 0x7002000D, // 0019 JMP #0028
+ 0xB81A0800, // 001A GETNGBL R6 K4
+ 0x8C180D05, // 001B GETMET R6 R6 K5
+ 0x5C200800, // 001C MOVE R8 R4
+ 0x5426007F, // 001D LDINT R9 128
+ 0x542A00FE, // 001E LDINT R10 255
+ 0x582C0002, // 001F LDCONST R11 K2
+ 0x543200FE, // 0020 LDINT R12 255
+ 0x7C180C00, // 0021 CALL R6 6
+ 0x541E00FE, // 0022 LDINT R7 255
+ 0x00200606, // 0023 ADD R8 R3 R6
+ 0x542600FF, // 0024 LDINT R9 256
+ 0x10201009, // 0025 MOD R8 R8 R9
+ 0x041C0E08, // 0026 SUB R7 R7 R8
+ 0x5C0C0E00, // 0027 MOVE R3 R7
+ 0xB81A0800, // 0028 GETNGBL R6 K4
+ 0x8C180D05, // 0029 GETMET R6 R6 K5
+ 0x5C200600, // 002A MOVE R8 R3
+ 0x58240002, // 002B LDCONST R9 K2
+ 0x542A00FE, // 002C LDINT R10 255
+ 0x582C0002, // 002D LDCONST R11 K2
+ 0x5C300A00, // 002E MOVE R12 R5
+ 0x7C180C00, // 002F CALL R6 6
+ 0x5C0C0C00, // 0030 MOVE R3 R6
+ 0x80040600, // 0031 RET 1 R3
})
)
);
@@ -1773,9 +6651,9 @@ be_local_closure(class_CometAnimation_init, /* name */
/********************************************************************
** Solidified function: tostring
********************************************************************/
-be_local_closure(class_CometAnimation_tostring, /* name */
+be_local_closure(class_GradientAnimation_tostring, /* name */
be_nested_proto(
- 11, /* nstack */
+ 14, /* nstack */
1, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1783,39 +6661,49 @@ be_local_closure(class_CometAnimation_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CometAnimation, /* shared constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[29]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
- 0xB80A1400, // 0001 GETNGBL R2 K10
- 0x8C08050B, // 0002 GETMET R2 R2 K11
- 0x8810010C, // 0003 GETMBR R4 R0 K12
- 0x7C080400, // 0004 CALL R2 2
- 0x780A0004, // 0005 JMPF R2 #000B
- 0x60080008, // 0006 GETGBL R2 G8
- 0x880C010C, // 0007 GETMBR R3 R0 K12
- 0x7C080200, // 0008 CALL R2 1
- 0x5C040400, // 0009 MOVE R1 R2
- 0x70020004, // 000A JMP #0010
- 0x60080018, // 000B GETGBL R2 G24
- 0x580C000D, // 000C LDCONST R3 K13
- 0x8810010C, // 000D GETMBR R4 R0 K12
- 0x7C080400, // 000E CALL R2 2
- 0x5C040400, // 000F MOVE R1 R2
- 0x60080018, // 0010 GETGBL R2 G24
- 0x580C000E, // 0011 LDCONST R3 K14
- 0x5C100200, // 0012 MOVE R4 R1
- 0x88140107, // 0013 GETMBR R5 R0 K7
- 0x541A00FF, // 0014 LDINT R6 256
- 0x0C140A06, // 0015 DIV R5 R5 R6
- 0x8818010F, // 0016 GETMBR R6 R0 K15
- 0x881C0100, // 0017 GETMBR R7 R0 K0
- 0x88200101, // 0018 GETMBR R8 R0 K1
- 0x88240110, // 0019 GETMBR R9 R0 K16
- 0x88280111, // 001A GETMBR R10 R0 K17
- 0x7C081000, // 001B CALL R2 8
- 0x80040400, // 001C RET 1 R2
+ ( &(const binstruction[39]) { /* code */
+ 0x8804010B, // 0000 GETMBR R1 R0 K11
+ 0x8808010C, // 0001 GETMBR R2 R0 K12
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x8810010D, // 0003 GETMBR R4 R0 K13
+ 0x1C140302, // 0004 EQ R5 R1 K2
+ 0x78160001, // 0005 JMPF R5 #0008
+ 0x5814000E, // 0006 LDCONST R5 K14
+ 0x70020000, // 0007 JMP #0009
+ 0x5814000F, // 0008 LDCONST R5 K15
+ 0x4C180000, // 0009 LDNIL R6
+ 0xB81E2000, // 000A GETNGBL R7 K16
+ 0x8C1C0F11, // 000B GETMET R7 R7 K17
+ 0x5C240400, // 000C MOVE R9 R2
+ 0x7C1C0400, // 000D CALL R7 2
+ 0x781E0004, // 000E JMPF R7 #0014
+ 0x601C0008, // 000F GETGBL R7 G8
+ 0x5C200400, // 0010 MOVE R8 R2
+ 0x7C1C0200, // 0011 CALL R7 1
+ 0x5C180E00, // 0012 MOVE R6 R7
+ 0x70020009, // 0013 JMP #001E
+ 0x4C1C0000, // 0014 LDNIL R7
+ 0x1C1C0407, // 0015 EQ R7 R2 R7
+ 0x781E0001, // 0016 JMPF R7 #0019
+ 0x58180012, // 0017 LDCONST R6 K18
+ 0x70020004, // 0018 JMP #001E
+ 0x601C0018, // 0019 GETGBL R7 G24
+ 0x58200013, // 001A LDCONST R8 K19
+ 0x5C240400, // 001B MOVE R9 R2
+ 0x7C1C0400, // 001C CALL R7 2
+ 0x5C180E00, // 001D MOVE R6 R7
+ 0x601C0018, // 001E GETGBL R7 G24
+ 0x58200014, // 001F LDCONST R8 K20
+ 0x5C240A00, // 0020 MOVE R9 R5
+ 0x5C280C00, // 0021 MOVE R10 R6
+ 0x5C2C0600, // 0022 MOVE R11 R3
+ 0x5C300800, // 0023 MOVE R12 R4
+ 0x88340115, // 0024 GETMBR R13 R0 K21
+ 0x7C1C0C00, // 0025 CALL R7 6
+ 0x80040E00, // 0026 RET 1 R7
})
)
);
@@ -1825,9 +6713,9 @@ be_local_closure(class_CometAnimation_tostring, /* name */
/********************************************************************
** Solidified function: render
********************************************************************/
-be_local_closure(class_CometAnimation_render, /* name */
+be_local_closure(class_GradientAnimation_render, /* name */
be_nested_proto(
- 25, /* nstack */
+ 9, /* nstack */
4, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1835,93 +6723,30 @@ be_local_closure(class_CometAnimation_render, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CometAnimation, /* shared constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
be_str_weak(render),
&be_const_str_solidified,
- ( &(const binstruction[83]) { /* code */
- 0x88100107, // 0000 GETMBR R4 R0 K7
- 0x541600FF, // 0001 LDINT R5 256
- 0x0C100805, // 0002 DIV R4 R4 R5
- 0x8814010C, // 0003 GETMBR R5 R0 K12
- 0x8818010F, // 0004 GETMBR R6 R0 K15
- 0x881C0101, // 0005 GETMBR R7 R0 K1
- 0x88200102, // 0006 GETMBR R8 R0 K2
- 0x88240112, // 0007 GETMBR R9 R0 K18
- 0x542A0017, // 0008 LDINT R10 24
- 0x3C280A0A, // 0009 SHR R10 R5 R10
- 0x542E00FE, // 000A LDINT R11 255
- 0x2C28140B, // 000B AND R10 R10 R11
- 0x542E000F, // 000C LDINT R11 16
- 0x3C2C0A0B, // 000D SHR R11 R5 R11
- 0x543200FE, // 000E LDINT R12 255
- 0x2C2C160C, // 000F AND R11 R11 R12
- 0x54320007, // 0010 LDINT R12 8
- 0x3C300A0C, // 0011 SHR R12 R5 R12
- 0x543600FE, // 0012 LDINT R13 255
- 0x2C30180D, // 0013 AND R12 R12 R13
- 0x543600FE, // 0014 LDINT R13 255
- 0x2C340A0D, // 0015 AND R13 R5 R13
- 0x58380006, // 0016 LDCONST R14 K6
- 0x143C1C06, // 0017 LT R15 R14 R6
- 0x783E0037, // 0018 JMPF R15 #0051
- 0x083C1C07, // 0019 MUL R15 R14 R7
- 0x043C080F, // 001A SUB R15 R4 R15
- 0x20401106, // 001B NE R16 R8 K6
- 0x78420008, // 001C JMPF R16 #0026
- 0x28401E03, // 001D GE R16 R15 R3
- 0x78420001, // 001E JMPF R16 #0021
- 0x043C1E03, // 001F SUB R15 R15 R3
- 0x7001FFFB, // 0020 JMP #001D
- 0x14401F06, // 0021 LT R16 R15 K6
- 0x78420001, // 0022 JMPF R16 #0025
- 0x003C1E03, // 0023 ADD R15 R15 R3
- 0x7001FFFB, // 0024 JMP #0021
- 0x70020005, // 0025 JMP #002C
- 0x14401F06, // 0026 LT R16 R15 K6
- 0x74420001, // 0027 JMPT R16 #002A
- 0x28401E03, // 0028 GE R16 R15 R3
- 0x78420001, // 0029 JMPF R16 #002C
- 0x00381D08, // 002A ADD R14 R14 K8
- 0x7001FFEA, // 002B JMP #0017
- 0x544200FE, // 002C LDINT R16 255
- 0x24441D06, // 002D GT R17 R14 K6
- 0x7846000D, // 002E JMPF R17 #003D
- 0x58440006, // 002F LDCONST R17 K6
- 0x1448220E, // 0030 LT R18 R17 R14
- 0x784A000A, // 0031 JMPF R18 #003D
- 0xB84A2600, // 0032 GETNGBL R18 K19
- 0x8C482514, // 0033 GETMET R18 R18 K20
- 0x5C502000, // 0034 MOVE R20 R16
- 0x58540006, // 0035 LDCONST R21 K6
- 0x545A00FE, // 0036 LDINT R22 255
- 0x585C0006, // 0037 LDCONST R23 K6
- 0x5C601200, // 0038 MOVE R24 R9
- 0x7C480C00, // 0039 CALL R18 6
- 0x5C402400, // 003A MOVE R16 R18
- 0x00442308, // 003B ADD R17 R17 K8
- 0x7001FFF2, // 003C JMP #0030
- 0x54460017, // 003D LDINT R17 24
- 0x38442011, // 003E SHL R17 R16 R17
- 0x544A000F, // 003F LDINT R18 16
- 0x38481612, // 0040 SHL R18 R11 R18
- 0x30442212, // 0041 OR R17 R17 R18
- 0x544A0007, // 0042 LDINT R18 8
- 0x38481812, // 0043 SHL R18 R12 R18
- 0x30442212, // 0044 OR R17 R17 R18
- 0x3044220D, // 0045 OR R17 R17 R13
- 0x28481F06, // 0046 GE R18 R15 K6
- 0x784A0006, // 0047 JMPF R18 #004F
- 0x88480315, // 0048 GETMBR R18 R1 K21
- 0x14481E12, // 0049 LT R18 R15 R18
- 0x784A0003, // 004A JMPF R18 #004F
- 0x8C480316, // 004B GETMET R18 R1 K22
- 0x5C501E00, // 004C MOVE R20 R15
- 0x5C542200, // 004D MOVE R21 R17
- 0x7C480600, // 004E CALL R18 3
- 0x00381D08, // 004F ADD R14 R14 K8
- 0x7001FFC5, // 0050 JMP #0017
- 0x503C0200, // 0051 LDBOOL R15 1 0
- 0x80041E00, // 0052 RET 1 R15
+ ( &(const binstruction[20]) { /* code */
+ 0x58100002, // 0000 LDCONST R4 K2
+ 0x14140803, // 0001 LT R5 R4 R3
+ 0x7816000E, // 0002 JMPF R5 #0012
+ 0x88140316, // 0003 GETMBR R5 R1 K22
+ 0x14140805, // 0004 LT R5 R4 R5
+ 0x7816000B, // 0005 JMPF R5 #0012
+ 0x6014000C, // 0006 GETGBL R5 G12
+ 0x88180117, // 0007 GETMBR R6 R0 K23
+ 0x7C140200, // 0008 CALL R5 1
+ 0x14140805, // 0009 LT R5 R4 R5
+ 0x78160004, // 000A JMPF R5 #0010
+ 0x8C140318, // 000B GETMET R5 R1 K24
+ 0x5C1C0800, // 000C MOVE R7 R4
+ 0x88200117, // 000D GETMBR R8 R0 K23
+ 0x94201004, // 000E GETIDX R8 R8 R4
+ 0x7C140600, // 000F CALL R5 3
+ 0x00100908, // 0010 ADD R4 R4 K8
+ 0x7001FFEE, // 0011 JMP #0001
+ 0x50140200, // 0012 LDBOOL R5 1 0
+ 0x80040A00, // 0013 RET 1 R5
})
)
);
@@ -1931,7 +6756,7 @@ be_local_closure(class_CometAnimation_render, /* name */
/********************************************************************
** Solidified function: on_param_changed
********************************************************************/
-be_local_closure(class_CometAnimation_on_param_changed, /* name */
+be_local_closure(class_GradientAnimation_on_param_changed, /* name */
be_nested_proto(
7, /* nstack */
3, /* argc */
@@ -1941,30 +6766,53 @@ be_local_closure(class_CometAnimation_on_param_changed, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_CometAnimation, /* shared constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
be_str_weak(on_param_changed),
&be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
+ ( &(const binstruction[43]) { /* code */
0x600C0003, // 0000 GETGBL R3 G3
0x5C100000, // 0001 MOVE R4 R0
0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0717, // 0003 GETMET R3 R3 K23
+ 0x8C0C0719, // 0003 GETMET R3 R3 K25
0x5C140200, // 0004 MOVE R5 R1
0x5C180400, // 0005 MOVE R6 R2
0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0301, // 0007 EQ R3 R1 K1
- 0x780E0009, // 0008 JMPF R3 #0013
- 0x880C0103, // 0009 GETMBR R3 R0 K3
- 0x880C0704, // 000A GETMBR R3 R3 K4
- 0x24100506, // 000B GT R4 R2 K6
- 0x78120001, // 000C JMPF R4 #000F
- 0x90020F06, // 000D SETMBR R0 K7 K6
- 0x70020003, // 000E JMP #0013
- 0x04100708, // 000F SUB R4 R3 K8
- 0x541600FF, // 0010 LDINT R5 256
- 0x08100805, // 0011 MUL R4 R4 R5
- 0x90020E04, // 0012 SETMBR R0 K7 R4
- 0x80000000, // 0013 RET 0
+ 0x880C011A, // 0007 GETMBR R3 R0 K26
+ 0x880C071B, // 0008 GETMBR R3 R3 K27
+ 0x6010000C, // 0009 GETGBL R4 G12
+ 0x88140117, // 000A GETMBR R5 R0 K23
+ 0x7C100200, // 000B CALL R4 1
+ 0x20100803, // 000C NE R4 R4 R3
+ 0x7812001B, // 000D JMPF R4 #002A
+ 0x88100117, // 000E GETMBR R4 R0 K23
+ 0x8C10091C, // 000F GETMET R4 R4 K28
+ 0x5C180600, // 0010 MOVE R6 R3
+ 0x7C100400, // 0011 CALL R4 2
+ 0x6010000C, // 0012 GETGBL R4 G12
+ 0x88140117, // 0013 GETMBR R5 R0 K23
+ 0x7C100200, // 0014 CALL R4 1
+ 0x14140803, // 0015 LT R5 R4 R3
+ 0x78160012, // 0016 JMPF R5 #002A
+ 0x6014000C, // 0017 GETGBL R5 G12
+ 0x88180117, // 0018 GETMBR R6 R0 K23
+ 0x7C140200, // 0019 CALL R5 1
+ 0x28140805, // 001A GE R5 R4 R5
+ 0x74160004, // 001B JMPT R5 #0021
+ 0x88140117, // 001C GETMBR R5 R0 K23
+ 0x94140A04, // 001D GETIDX R5 R5 R4
+ 0x4C180000, // 001E LDNIL R6
+ 0x1C140A06, // 001F EQ R5 R5 R6
+ 0x78160006, // 0020 JMPF R5 #0028
+ 0x6014000C, // 0021 GETGBL R5 G12
+ 0x88180117, // 0022 GETMBR R6 R0 K23
+ 0x7C140200, // 0023 CALL R5 1
+ 0x14140805, // 0024 LT R5 R4 R5
+ 0x78160001, // 0025 JMPF R5 #0028
+ 0x88140117, // 0026 GETMBR R5 R0 K23
+ 0x9814091D, // 0027 SETIDX R5 R4 K29
+ 0x00100908, // 0028 ADD R4 R4 K8
+ 0x7001FFEA, // 0029 JMP #0015
+ 0x80000000, // 002A RET 0
})
)
);
@@ -1972,92 +6820,11 @@ be_local_closure(class_CometAnimation_on_param_changed, /* name */
/********************************************************************
-** Solidified class: CometAnimation
+** Solidified function: _calculate_gradient
********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(CometAnimation,
- 1,
- &be_class_Animation,
- be_nested_map(7,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, -1), be_const_closure(class_CometAnimation_init_closure) },
- { be_const_key_weak(update, -1), be_const_closure(class_CometAnimation_update_closure) },
- { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(5,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(fade_factor, -1), be_const_bytes_instance(07000001FF0001B300) },
- { be_const_key_weak(wrap_around, -1), be_const_bytes_instance(07000000010001) },
- { be_const_key_weak(direction, -1), be_const_bytes_instance(1400010200FF0001) },
- { be_const_key_weak(speed, 0), be_const_bytes_instance(07000101006401000A) },
- { be_const_key_weak(tail_length, -1), be_const_bytes_instance(07000100320005) },
- })) ) } )) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_CometAnimation_tostring_closure) },
- { be_const_key_weak(render, 0), be_const_closure(class_CometAnimation_render_closure) },
- { be_const_key_weak(head_position, 2), be_const_var(0) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_CometAnimation_on_param_changed_closure) },
- })),
- be_str_weak(CometAnimation)
-);
-// compact class 'FireAnimation' ktab size: 47, total: 73 (saved 208 bytes)
-static const bvalue be_ktab_class_FireAnimation[47] = {
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(_random),
- /* K2 */ be_nested_str_weak(width),
- /* K3 */ be_nested_str_weak(set_pixel_color),
- /* K4 */ be_nested_str_weak(current_colors),
- /* K5 */ be_nested_str_weak(get),
- /* K6 */ be_const_int(1),
- /* K7 */ be_nested_str_weak(FireAnimation_X28intensity_X3D_X25s_X2C_X20flicker_speed_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K8 */ be_nested_str_weak(intensity),
- /* K9 */ be_nested_str_weak(flicker_speed),
- /* K10 */ be_nested_str_weak(priority),
- /* K11 */ be_nested_str_weak(is_running),
- /* K12 */ be_nested_str_weak(init),
- /* K13 */ be_nested_str_weak(heat_map),
- /* K14 */ be_nested_str_weak(last_update),
- /* K15 */ be_nested_str_weak(random_seed),
- /* K16 */ be_nested_str_weak(engine),
- /* K17 */ be_nested_str_weak(time_ms),
- /* K18 */ be_nested_str_weak(strip_length),
- /* K19 */ be_nested_str_weak(clear),
- /* K20 */ be_nested_str_weak(resize),
- /* K21 */ be_nested_str_weak(set),
- /* K22 */ be_const_int(-16777216),
- /* K23 */ be_nested_str_weak(_update_fire_simulation),
- /* K24 */ be_const_int(1103515245),
- /* K25 */ be_const_int(2147483647),
- /* K26 */ be_nested_str_weak(cooling_rate),
- /* K27 */ be_nested_str_weak(sparking_rate),
- /* K28 */ be_nested_str_weak(flicker_amount),
- /* K29 */ be_nested_str_weak(color),
- /* K30 */ be_nested_str_weak(size),
- /* K31 */ be_nested_str_weak(_initialize_buffers),
- /* K32 */ be_nested_str_weak(_random_range),
- /* K33 */ be_nested_str_weak(tasmota),
- /* K34 */ be_nested_str_weak(scale_uint),
- /* K35 */ be_const_int(2),
- /* K36 */ be_const_int(3),
- /* K37 */ be_nested_str_weak(animation),
- /* K38 */ be_nested_str_weak(rich_palette),
- /* K39 */ be_nested_str_weak(palette),
- /* K40 */ be_nested_str_weak(PALETTE_FIRE),
- /* K41 */ be_nested_str_weak(cycle_period),
- /* K42 */ be_nested_str_weak(transition_type),
- /* K43 */ be_nested_str_weak(brightness),
- /* K44 */ be_nested_str_weak(is_color_provider),
- /* K45 */ be_nested_str_weak(get_color_for_value),
- /* K46 */ be_nested_str_weak(start),
-};
-
-
-extern const bclass be_class_FireAnimation;
-
-/********************************************************************
-** Solidified function: _random_range
-********************************************************************/
-be_local_closure(class_FireAnimation__random_range, /* name */
+be_local_closure(class_GradientAnimation__calculate_gradient, /* name */
be_nested_proto(
- 4, /* nstack */
+ 18, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2065,90 +6832,158 @@ be_local_closure(class_FireAnimation__random_range, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(_random_range),
+ &be_ktab_class_GradientAnimation, /* shared constants */
+ be_str_weak(_calculate_gradient),
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x18080300, // 0000 LE R2 R1 K0
- 0x780A0000, // 0001 JMPF R2 #0003
- 0x80060000, // 0002 RET 1 K0
- 0x8C080101, // 0003 GETMET R2 R0 K1
- 0x7C080200, // 0004 CALL R2 1
- 0x10080401, // 0005 MOD R2 R2 R1
- 0x80040400, // 0006 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_FireAnimation_render, /* name */
- be_nested_proto(
- 12, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0x58100000, // 0000 LDCONST R4 K0
- 0x14140803, // 0001 LT R5 R4 R3
- 0x7816000D, // 0002 JMPF R5 #0011
- 0x88140302, // 0003 GETMBR R5 R1 K2
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160008, // 0005 JMPF R5 #000F
- 0x8C140303, // 0006 GETMET R5 R1 K3
- 0x5C1C0800, // 0007 MOVE R7 R4
- 0x88200104, // 0008 GETMBR R8 R0 K4
- 0x8C201105, // 0009 GETMET R8 R8 K5
- 0x542A0003, // 000A LDINT R10 4
- 0x0828080A, // 000B MUL R10 R4 R10
- 0x542DFFFB, // 000C LDINT R11 -4
- 0x7C200600, // 000D CALL R8 3
- 0x7C140600, // 000E CALL R5 3
- 0x00100906, // 000F ADD R4 R4 K6
- 0x7001FFEF, // 0010 JMP #0001
- 0x50140200, // 0011 LDBOOL R5 1 0
- 0x80040A00, // 0012 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_FireAnimation_tostring, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080007, // 0001 LDCONST R2 K7
- 0x880C0108, // 0002 GETMBR R3 R0 K8
- 0x88100109, // 0003 GETMBR R4 R0 K9
- 0x8814010A, // 0004 GETMBR R5 R0 K10
- 0x8818010B, // 0005 GETMBR R6 R0 K11
- 0x7C040A00, // 0006 CALL R1 5
- 0x80040200, // 0007 RET 1 R1
+ ( &(const binstruction[148]) { /* code */
+ 0x8808010B, // 0000 GETMBR R2 R0 K11
+ 0x880C010C, // 0001 GETMBR R3 R0 K12
+ 0x8810011A, // 0002 GETMBR R4 R0 K26
+ 0x8810091B, // 0003 GETMBR R4 R4 K27
+ 0x6014000C, // 0004 GETGBL R5 G12
+ 0x88180117, // 0005 GETMBR R6 R0 K23
+ 0x7C140200, // 0006 CALL R5 1
+ 0x20140A04, // 0007 NE R5 R5 R4
+ 0x78160003, // 0008 JMPF R5 #000D
+ 0x88140117, // 0009 GETMBR R5 R0 K23
+ 0x8C140B1C, // 000A GETMET R5 R5 K28
+ 0x5C1C0800, // 000B MOVE R7 R4
+ 0x7C140400, // 000C CALL R5 2
+ 0x58140002, // 000D LDCONST R5 K2
+ 0x14180A04, // 000E LT R6 R5 R4
+ 0x781A0082, // 000F JMPF R6 #0093
+ 0x58180002, // 0010 LDCONST R6 K2
+ 0x1C1C0502, // 0011 EQ R7 R2 K2
+ 0x781E0005, // 0012 JMPF R7 #0019
+ 0x8C1C011E, // 0013 GETMET R7 R0 K30
+ 0x5C240A00, // 0014 MOVE R9 R5
+ 0x5C280800, // 0015 MOVE R10 R4
+ 0x7C1C0600, // 0016 CALL R7 3
+ 0x5C180E00, // 0017 MOVE R6 R7
+ 0x70020004, // 0018 JMP #001E
+ 0x8C1C011F, // 0019 GETMET R7 R0 K31
+ 0x5C240A00, // 001A MOVE R9 R5
+ 0x5C280800, // 001B MOVE R10 R4
+ 0x7C1C0600, // 001C CALL R7 3
+ 0x5C180E00, // 001D MOVE R6 R7
+ 0x881C0106, // 001E GETMBR R7 R0 K6
+ 0x001C0C07, // 001F ADD R7 R6 R7
+ 0x542200FF, // 0020 LDINT R8 256
+ 0x101C0E08, // 0021 MOD R7 R7 R8
+ 0x5C180E00, // 0022 MOVE R6 R7
+ 0x581C001D, // 0023 LDCONST R7 K29
+ 0x4C200000, // 0024 LDNIL R8
+ 0x1C200608, // 0025 EQ R8 R3 R8
+ 0x7822001B, // 0026 JMPF R8 #0043
+ 0xB8220800, // 0027 GETNGBL R8 K4
+ 0x8C201105, // 0028 GETMET R8 R8 K5
+ 0x5C280C00, // 0029 MOVE R10 R6
+ 0x582C0002, // 002A LDCONST R11 K2
+ 0x543200FE, // 002B LDINT R12 255
+ 0x58340002, // 002C LDCONST R13 K2
+ 0x543A0166, // 002D LDINT R14 359
+ 0x7C200C00, // 002E CALL R8 6
+ 0xA4264000, // 002F IMPORT R9 K32
+ 0x5C281200, // 0030 MOVE R10 R9
+ 0x582C0021, // 0031 LDCONST R11 K33
+ 0x7C280200, // 0032 CALL R10 1
+ 0x8C2C1522, // 0033 GETMET R11 R10 K34
+ 0x5C341000, // 0034 MOVE R13 R8
+ 0x543A00FE, // 0035 LDINT R14 255
+ 0x7C2C0600, // 0036 CALL R11 3
+ 0x882C1523, // 0037 GETMBR R11 R10 K35
+ 0x5432000F, // 0038 LDINT R12 16
+ 0x382C160C, // 0039 SHL R11 R11 R12
+ 0x302E3A0B, // 003A OR R11 K29 R11
+ 0x88301524, // 003B GETMBR R12 R10 K36
+ 0x54360007, // 003C LDINT R13 8
+ 0x3830180D, // 003D SHL R12 R12 R13
+ 0x302C160C, // 003E OR R11 R11 R12
+ 0x88301525, // 003F GETMBR R12 R10 K37
+ 0x302C160C, // 0040 OR R11 R11 R12
+ 0x5C1C1600, // 0041 MOVE R7 R11
+ 0x7002004B, // 0042 JMP #008F
+ 0xB8222000, // 0043 GETNGBL R8 K16
+ 0x8C201126, // 0044 GETMET R8 R8 K38
+ 0x5C280600, // 0045 MOVE R10 R3
+ 0x7C200400, // 0046 CALL R8 2
+ 0x78220009, // 0047 JMPF R8 #0052
+ 0x88200727, // 0048 GETMBR R8 R3 K39
+ 0x4C240000, // 0049 LDNIL R9
+ 0x20201009, // 004A NE R8 R8 R9
+ 0x78220005, // 004B JMPF R8 #0052
+ 0x8C200727, // 004C GETMET R8 R3 K39
+ 0x5C280C00, // 004D MOVE R10 R6
+ 0x582C0002, // 004E LDCONST R11 K2
+ 0x7C200600, // 004F CALL R8 3
+ 0x5C1C1000, // 0050 MOVE R7 R8
+ 0x7002003C, // 0051 JMP #008F
+ 0xB8222000, // 0052 GETNGBL R8 K16
+ 0x8C201111, // 0053 GETMET R8 R8 K17
+ 0x5C280600, // 0054 MOVE R10 R3
+ 0x7C200400, // 0055 CALL R8 2
+ 0x78220008, // 0056 JMPF R8 #0060
+ 0x8C200128, // 0057 GETMET R8 R0 K40
+ 0x5C280600, // 0058 MOVE R10 R3
+ 0x582C000C, // 0059 LDCONST R11 K12
+ 0x54320009, // 005A LDINT R12 10
+ 0x08300C0C, // 005B MUL R12 R6 R12
+ 0x0030020C, // 005C ADD R12 R1 R12
+ 0x7C200800, // 005D CALL R8 4
+ 0x5C1C1000, // 005E MOVE R7 R8
+ 0x7002002E, // 005F JMP #008F
+ 0x60200004, // 0060 GETGBL R8 G4
+ 0x5C240600, // 0061 MOVE R9 R3
+ 0x7C200200, // 0062 CALL R8 1
+ 0x1C201129, // 0063 EQ R8 R8 K41
+ 0x78220028, // 0064 JMPF R8 #008E
+ 0x5C200C00, // 0065 MOVE R8 R6
+ 0xB8260800, // 0066 GETNGBL R9 K4
+ 0x8C241305, // 0067 GETMET R9 R9 K5
+ 0x5C2C1000, // 0068 MOVE R11 R8
+ 0x58300002, // 0069 LDCONST R12 K2
+ 0x543600FE, // 006A LDINT R13 255
+ 0x58380002, // 006B LDCONST R14 K2
+ 0x543E000F, // 006C LDINT R15 16
+ 0x3C3C060F, // 006D SHR R15 R3 R15
+ 0x544200FE, // 006E LDINT R16 255
+ 0x2C3C1E10, // 006F AND R15 R15 R16
+ 0x7C240C00, // 0070 CALL R9 6
+ 0xB82A0800, // 0071 GETNGBL R10 K4
+ 0x8C281505, // 0072 GETMET R10 R10 K5
+ 0x5C301000, // 0073 MOVE R12 R8
+ 0x58340002, // 0074 LDCONST R13 K2
+ 0x543A00FE, // 0075 LDINT R14 255
+ 0x583C0002, // 0076 LDCONST R15 K2
+ 0x54420007, // 0077 LDINT R16 8
+ 0x3C400610, // 0078 SHR R16 R3 R16
+ 0x544600FE, // 0079 LDINT R17 255
+ 0x2C402011, // 007A AND R16 R16 R17
+ 0x7C280C00, // 007B CALL R10 6
+ 0xB82E0800, // 007C GETNGBL R11 K4
+ 0x8C2C1705, // 007D GETMET R11 R11 K5
+ 0x5C341000, // 007E MOVE R13 R8
+ 0x58380002, // 007F LDCONST R14 K2
+ 0x543E00FE, // 0080 LDINT R15 255
+ 0x58400002, // 0081 LDCONST R16 K2
+ 0x544600FE, // 0082 LDINT R17 255
+ 0x2C440611, // 0083 AND R17 R3 R17
+ 0x7C2C0C00, // 0084 CALL R11 6
+ 0x5432000F, // 0085 LDINT R12 16
+ 0x3830120C, // 0086 SHL R12 R9 R12
+ 0x30323A0C, // 0087 OR R12 K29 R12
+ 0x54360007, // 0088 LDINT R13 8
+ 0x3834140D, // 0089 SHL R13 R10 R13
+ 0x3030180D, // 008A OR R12 R12 R13
+ 0x3030180B, // 008B OR R12 R12 R11
+ 0x5C1C1800, // 008C MOVE R7 R12
+ 0x70020000, // 008D JMP #008F
+ 0x5C1C0600, // 008E MOVE R7 R3
+ 0x88200117, // 008F GETMBR R8 R0 K23
+ 0x98200A07, // 0090 SETIDX R8 R5 R7
+ 0x00140B08, // 0091 ADD R5 R5 K8
+ 0x7001FF7A, // 0092 JMP #000E
+ 0x80000000, // 0093 RET 0
})
)
);
@@ -2158,7 +6993,190 @@ be_local_closure(class_FireAnimation_tostring, /* name */
/********************************************************************
** Solidified function: init
********************************************************************/
-be_local_closure(class_FireAnimation_init, /* name */
+be_local_closure(class_GradientAnimation_init, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08052A, // 0003 GETMET R2 R2 K42
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x60080012, // 0006 GETGBL R2 G18
+ 0x7C080000, // 0007 CALL R2 0
+ 0x90022E02, // 0008 SETMBR R0 K23 R2
+ 0x90020D02, // 0009 SETMBR R0 K6 K2
+ 0x8808011A, // 000A GETMBR R2 R0 K26
+ 0x8808051B, // 000B GETMBR R2 R2 K27
+ 0x880C0117, // 000C GETMBR R3 R0 K23
+ 0x8C0C071C, // 000D GETMET R3 R3 K28
+ 0x5C140400, // 000E MOVE R5 R2
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x580C0002, // 0010 LDCONST R3 K2
+ 0x14100602, // 0011 LT R4 R3 R2
+ 0x78120003, // 0012 JMPF R4 #0017
+ 0x88100117, // 0013 GETMBR R4 R0 K23
+ 0x9810071D, // 0014 SETIDX R4 R3 K29
+ 0x000C0708, // 0015 ADD R3 R3 K8
+ 0x7001FFF9, // 0016 JMP #0011
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _calculate_radial_position
+********************************************************************/
+be_local_closure(class_GradientAnimation__calculate_radial_position, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_GradientAnimation, /* shared constants */
+ be_str_weak(_calculate_radial_position),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xB80E0800, // 0000 GETNGBL R3 K4
+ 0x8C0C0705, // 0001 GETMET R3 R3 K5
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x58180002, // 0003 LDCONST R6 K2
+ 0x041C0508, // 0004 SUB R7 R2 K8
+ 0x58200002, // 0005 LDCONST R8 K2
+ 0x542600FE, // 0006 LDINT R9 255
+ 0x7C0C0C00, // 0007 CALL R3 6
+ 0x8810012B, // 0008 GETMBR R4 R0 K43
+ 0x8814010A, // 0009 GETMBR R5 R0 K10
+ 0x58180002, // 000A LDCONST R6 K2
+ 0x281C0604, // 000B GE R7 R3 R4
+ 0x781E0002, // 000C JMPF R7 #0010
+ 0x041C0604, // 000D SUB R7 R3 R4
+ 0x5C180E00, // 000E MOVE R6 R7
+ 0x70020001, // 000F JMP #0012
+ 0x041C0803, // 0010 SUB R7 R4 R3
+ 0x5C180E00, // 0011 MOVE R6 R7
+ 0xB81E0800, // 0012 GETNGBL R7 K4
+ 0x8C1C0F05, // 0013 GETMET R7 R7 K5
+ 0x5C240C00, // 0014 MOVE R9 R6
+ 0x58280002, // 0015 LDCONST R10 K2
+ 0x542E007F, // 0016 LDINT R11 128
+ 0x58300002, // 0017 LDCONST R12 K2
+ 0x5C340A00, // 0018 MOVE R13 R5
+ 0x7C1C0C00, // 0019 CALL R7 6
+ 0x5C180E00, // 001A MOVE R6 R7
+ 0x541E00FE, // 001B LDINT R7 255
+ 0x241C0C07, // 001C GT R7 R6 R7
+ 0x781E0000, // 001D JMPF R7 #001F
+ 0x541A00FE, // 001E LDINT R6 255
+ 0x80040C00, // 001F RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: GradientAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(GradientAnimation,
+ 2,
+ &be_class_Animation,
+ be_nested_map(11,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(current_colors, -1), be_const_var(0) },
+ { be_const_key_weak(render, -1), be_const_closure(class_GradientAnimation_render_closure) },
+ { be_const_key_weak(_calculate_linear_position, -1), be_const_closure(class_GradientAnimation__calculate_linear_position_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_GradientAnimation_tostring_closure) },
+ { be_const_key_weak(update, 1), be_const_closure(class_GradientAnimation_update_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_GradientAnimation_on_param_changed_closure) },
+ { be_const_key_weak(phase_offset, -1), be_const_var(1) },
+ { be_const_key_weak(_calculate_gradient, -1), be_const_closure(class_GradientAnimation__calculate_gradient_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(spread, -1), be_const_bytes_instance(07000101FF0001FF00) },
+ { be_const_key_weak(center_pos, -1), be_const_bytes_instance(07000001FF00018000) },
+ { be_const_key_weak(gradient_type, 0), be_const_bytes_instance(07000000010000) },
+ { be_const_key_weak(movement_speed, 5), be_const_bytes_instance(07000001FF000000) },
+ { be_const_key_weak(direction, 3), be_const_bytes_instance(07000001FF000000) },
+ { be_const_key_weak(color, -1), be_const_bytes_instance(2406) },
+ })) ) } )) },
+ { be_const_key_weak(init, -1), be_const_closure(class_GradientAnimation_init_closure) },
+ { be_const_key_weak(_calculate_radial_position, -1), be_const_closure(class_GradientAnimation__calculate_radial_position_closure) },
+ })),
+ be_str_weak(GradientAnimation)
+);
+
+/********************************************************************
+** Solidified function: register_event_handler
+********************************************************************/
+be_local_closure(register_event_handler, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 5, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(event_manager),
+ /* K2 */ be_nested_str_weak(register_handler),
+ }),
+ be_str_weak(register_event_handler),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0xB8160000, // 0000 GETNGBL R5 K0
+ 0x88140B01, // 0001 GETMBR R5 R5 K1
+ 0x8C140B02, // 0002 GETMET R5 R5 K2
+ 0x5C1C0000, // 0003 MOVE R7 R0
+ 0x5C200200, // 0004 MOVE R8 R1
+ 0x5C240400, // 0005 MOVE R9 R2
+ 0x5C280600, // 0006 MOVE R10 R3
+ 0x5C2C0800, // 0007 MOVE R11 R4
+ 0x7C140C00, // 0008 CALL R5 6
+ 0x80040A00, // 0009 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'StaticValueProvider' ktab size: 5, total: 15 (saved 80 bytes)
+static const bvalue be_ktab_class_StaticValueProvider[5] = {
+ /* K0 */ be_nested_str_weak(value),
+ /* K1 */ be_nested_str_weak(instance),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(toptr),
+ /* K4 */ be_nested_str_weak(StaticValueProvider_X28value_X3D_X25s_X29),
+};
+
+
+extern const bclass be_class_StaticValueProvider;
+
+/********************************************************************
+** Solidified function: <=
+********************************************************************/
+be_local_closure(class_StaticValueProvider__X3C_X3D, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -2168,29 +7186,16 @@ be_local_closure(class_FireAnimation_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(init),
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X3C_X3D),
&be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08050C, // 0003 GETMET R2 R2 K12
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x60080015, // 0006 GETGBL R2 G21
- 0x7C080000, // 0007 CALL R2 0
- 0x90021A02, // 0008 SETMBR R0 K13 R2
- 0x60080015, // 0009 GETGBL R2 G21
- 0x7C080000, // 000A CALL R2 0
- 0x90020802, // 000B SETMBR R0 K4 R2
- 0x90021D00, // 000C SETMBR R0 K14 K0
- 0x88080110, // 000D GETMBR R2 R0 K16
- 0x88080511, // 000E GETMBR R2 R2 K17
- 0x540EFFFF, // 000F LDINT R3 65536
- 0x10080403, // 0010 MOD R2 R2 R3
- 0x90021E02, // 0011 SETMBR R0 K15 R2
- 0x80000000, // 0012 RET 0
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x600C0009, // 0001 GETGBL R3 G9
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x18080403, // 0004 LE R2 R2 R3
+ 0x80040400, // 0005 RET 1 R2
})
)
);
@@ -2198,52 +7203,28 @@ be_local_closure(class_FireAnimation_init, /* name */
/********************************************************************
-** Solidified function: _initialize_buffers
+** Solidified function: >
********************************************************************/
-be_local_closure(class_FireAnimation__initialize_buffers, /* name */
+be_local_closure(class_StaticValueProvider__X3E, /* name */
be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
+ 5, /* nstack */
+ 2, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(_initialize_buffers),
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X3E),
&be_const_str_solidified,
- ( &(const binstruction[30]) { /* code */
- 0x88040110, // 0000 GETMBR R1 R0 K16
- 0x88040312, // 0001 GETMBR R1 R1 K18
- 0x8808010D, // 0002 GETMBR R2 R0 K13
- 0x8C080513, // 0003 GETMET R2 R2 K19
- 0x7C080200, // 0004 CALL R2 1
- 0x8808010D, // 0005 GETMBR R2 R0 K13
- 0x8C080514, // 0006 GETMET R2 R2 K20
- 0x5C100200, // 0007 MOVE R4 R1
- 0x7C080400, // 0008 CALL R2 2
- 0x88080104, // 0009 GETMBR R2 R0 K4
- 0x8C080513, // 000A GETMET R2 R2 K19
- 0x7C080200, // 000B CALL R2 1
- 0x88080104, // 000C GETMBR R2 R0 K4
- 0x8C080514, // 000D GETMET R2 R2 K20
- 0x54120003, // 000E LDINT R4 4
- 0x08100204, // 000F MUL R4 R1 R4
- 0x7C080400, // 0010 CALL R2 2
- 0x58080000, // 0011 LDCONST R2 K0
- 0x140C0401, // 0012 LT R3 R2 R1
- 0x780E0008, // 0013 JMPF R3 #001D
- 0x880C0104, // 0014 GETMBR R3 R0 K4
- 0x8C0C0715, // 0015 GETMET R3 R3 K21
- 0x54160003, // 0016 LDINT R5 4
- 0x08140405, // 0017 MUL R5 R2 R5
- 0x58180016, // 0018 LDCONST R6 K22
- 0x541DFFFB, // 0019 LDINT R7 -4
- 0x7C0C0800, // 001A CALL R3 4
- 0x00080506, // 001B ADD R2 R2 K6
- 0x7001FFF4, // 001C JMP #0012
- 0x80000000, // 001D RET 0
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x600C0009, // 0001 GETGBL R3 G9
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x24080403, // 0004 GT R2 R2 R3
+ 0x80040400, // 0005 RET 1 R2
})
)
);
@@ -2251,9 +7232,63 @@ be_local_closure(class_FireAnimation__initialize_buffers, /* name */
/********************************************************************
-** Solidified function: update
+** Solidified function: >=
********************************************************************/
-be_local_closure(class_FireAnimation_update, /* name */
+be_local_closure(class_StaticValueProvider__X3E_X3D, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X3E_X3D),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x600C0009, // 0001 GETGBL R3 G9
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x28080403, // 0004 GE R2 R2 R3
+ 0x80040400, // 0005 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_StaticValueProvider_produce_value, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x80040600, // 0001 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: !=
+********************************************************************/
+be_local_closure(class_StaticValueProvider__X21_X3D, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
@@ -2263,22 +7298,32 @@ be_local_closure(class_FireAnimation_update, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(update),
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X21_X3D),
&be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x88080109, // 0000 GETMBR R2 R0 K9
- 0x540E03E7, // 0001 LDINT R3 1000
- 0x0C0C0602, // 0002 DIV R3 R3 R2
- 0x8810010E, // 0003 GETMBR R4 R0 K14
- 0x04100204, // 0004 SUB R4 R1 R4
- 0x28100803, // 0005 GE R4 R4 R3
- 0x78120003, // 0006 JMPF R4 #000B
- 0x90021C01, // 0007 SETMBR R0 K14 R1
- 0x8C100117, // 0008 GETMET R4 R0 K23
- 0x5C180200, // 0009 MOVE R6 R1
- 0x7C100400, // 000A CALL R4 2
- 0x80000000, // 000B RET 0
+ ( &(const binstruction[22]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080501, // 0003 EQ R2 R2 K1
+ 0x780A0009, // 0004 JMPF R2 #000F
+ 0xA40A0400, // 0005 IMPORT R2 K2
+ 0x8C0C0503, // 0006 GETMET R3 R2 K3
+ 0x5C140000, // 0007 MOVE R5 R0
+ 0x7C0C0400, // 0008 CALL R3 2
+ 0x8C100503, // 0009 GETMET R4 R2 K3
+ 0x5C180200, // 000A MOVE R6 R1
+ 0x7C100400, // 000B CALL R4 2
+ 0x200C0604, // 000C NE R3 R3 R4
+ 0x80040600, // 000D RET 1 R3
+ 0x70020005, // 000E JMP #0015
+ 0x88080100, // 000F GETMBR R2 R0 K0
+ 0x600C0009, // 0010 GETGBL R3 G9
+ 0x5C100200, // 0011 MOVE R4 R1
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x20080403, // 0013 NE R2 R2 R3
+ 0x80040400, // 0014 RET 1 R2
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -2286,42 +7331,11 @@ be_local_closure(class_FireAnimation_update, /* name */
/********************************************************************
-** Solidified function: _random
+** Solidified function: ==
********************************************************************/
-be_local_closure(class_FireAnimation__random, /* name */
+be_local_closure(class_StaticValueProvider__X3D_X3D, /* name */
be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(_random),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x8804010F, // 0000 GETMBR R1 R0 K15
- 0x08040318, // 0001 MUL R1 R1 K24
- 0x540A3038, // 0002 LDINT R2 12345
- 0x00040202, // 0003 ADD R1 R1 R2
- 0x2C040319, // 0004 AND R1 R1 K25
- 0x90021E01, // 0005 SETMBR R0 K15 R1
- 0x8804010F, // 0006 GETMBR R1 R0 K15
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _update_fire_simulation
-********************************************************************/
-be_local_closure(class_FireAnimation__update_fire_simulation, /* name */
- be_nested_proto(
- 23, /* nstack */
+ 7, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2329,242 +7343,32 @@ be_local_closure(class_FireAnimation__update_fire_simulation, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(_update_fire_simulation),
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X3D_X3D),
&be_const_str_solidified,
- ( &(const binstruction[232]) { /* code */
- 0x8808011A, // 0000 GETMBR R2 R0 K26
- 0x880C011B, // 0001 GETMBR R3 R0 K27
- 0x88100108, // 0002 GETMBR R4 R0 K8
- 0x8814011C, // 0003 GETMBR R5 R0 K28
- 0x8818011D, // 0004 GETMBR R6 R0 K29
- 0x881C0110, // 0005 GETMBR R7 R0 K16
- 0x881C0F12, // 0006 GETMBR R7 R7 K18
- 0x8820010D, // 0007 GETMBR R8 R0 K13
- 0x8C20111E, // 0008 GETMET R8 R8 K30
- 0x7C200200, // 0009 CALL R8 1
- 0x20201007, // 000A NE R8 R8 R7
- 0x74220006, // 000B JMPT R8 #0013
- 0x88200104, // 000C GETMBR R8 R0 K4
- 0x8C20111E, // 000D GETMET R8 R8 K30
- 0x7C200200, // 000E CALL R8 1
- 0x54260003, // 000F LDINT R9 4
- 0x08240E09, // 0010 MUL R9 R7 R9
- 0x20201009, // 0011 NE R8 R8 R9
- 0x78220001, // 0012 JMPF R8 #0015
- 0x8C20011F, // 0013 GETMET R8 R0 K31
- 0x7C200200, // 0014 CALL R8 1
- 0x58200000, // 0015 LDCONST R8 K0
- 0x14241007, // 0016 LT R9 R8 R7
- 0x78260017, // 0017 JMPF R9 #0030
- 0x8C240120, // 0018 GETMET R9 R0 K32
- 0xB82E4200, // 0019 GETNGBL R11 K33
- 0x8C2C1722, // 001A GETMET R11 R11 K34
- 0x5C340400, // 001B MOVE R13 R2
- 0x58380000, // 001C LDCONST R14 K0
- 0x543E00FE, // 001D LDINT R15 255
- 0x58400000, // 001E LDCONST R16 K0
- 0x54460009, // 001F LDINT R17 10
- 0x7C2C0C00, // 0020 CALL R11 6
- 0x002C1723, // 0021 ADD R11 R11 K35
- 0x7C240400, // 0022 CALL R9 2
- 0x8828010D, // 0023 GETMBR R10 R0 K13
- 0x94281408, // 0024 GETIDX R10 R10 R8
- 0x2828120A, // 0025 GE R10 R9 R10
- 0x782A0002, // 0026 JMPF R10 #002A
- 0x8828010D, // 0027 GETMBR R10 R0 K13
- 0x98281100, // 0028 SETIDX R10 R8 K0
- 0x70020003, // 0029 JMP #002E
- 0x8828010D, // 002A GETMBR R10 R0 K13
- 0x942C1408, // 002B GETIDX R11 R10 R8
- 0x042C1609, // 002C SUB R11 R11 R9
- 0x9828100B, // 002D SETIDX R10 R8 R11
- 0x00201106, // 002E ADD R8 R8 K6
- 0x7001FFE5, // 002F JMP #0016
- 0x28240F24, // 0030 GE R9 R7 K36
- 0x7826001D, // 0031 JMPF R9 #0050
- 0x04240F06, // 0032 SUB R9 R7 K6
- 0x28281323, // 0033 GE R10 R9 K35
- 0x782A001A, // 0034 JMPF R10 #0050
- 0x04281306, // 0035 SUB R10 R9 K6
- 0x882C010D, // 0036 GETMBR R11 R0 K13
- 0x9428160A, // 0037 GETIDX R10 R11 R10
- 0x042C1323, // 0038 SUB R11 R9 K35
- 0x8830010D, // 0039 GETMBR R12 R0 K13
- 0x942C180B, // 003A GETIDX R11 R12 R11
- 0x0028140B, // 003B ADD R10 R10 R11
- 0x042C1323, // 003C SUB R11 R9 K35
- 0x8830010D, // 003D GETMBR R12 R0 K13
- 0x942C180B, // 003E GETIDX R11 R12 R11
- 0x0028140B, // 003F ADD R10 R10 R11
- 0x0C281524, // 0040 DIV R10 R10 K36
- 0x142C1500, // 0041 LT R11 R10 K0
- 0x782E0001, // 0042 JMPF R11 #0045
- 0x58280000, // 0043 LDCONST R10 K0
- 0x70020003, // 0044 JMP #0049
- 0x542E00FE, // 0045 LDINT R11 255
- 0x242C140B, // 0046 GT R11 R10 R11
- 0x782E0000, // 0047 JMPF R11 #0049
- 0x542A00FE, // 0048 LDINT R10 255
- 0x882C010D, // 0049 GETMBR R11 R0 K13
- 0x60300009, // 004A GETGBL R12 G9
- 0x5C341400, // 004B MOVE R13 R10
- 0x7C300200, // 004C CALL R12 1
- 0x982C120C, // 004D SETIDX R11 R9 R12
- 0x04241306, // 004E SUB R9 R9 K6
- 0x7001FFE2, // 004F JMP #0033
- 0x8C240120, // 0050 GETMET R9 R0 K32
- 0x542E00FE, // 0051 LDINT R11 255
- 0x7C240400, // 0052 CALL R9 2
- 0x14241203, // 0053 LT R9 R9 R3
- 0x7826000F, // 0054 JMPF R9 #0065
- 0x8C240120, // 0055 GETMET R9 R0 K32
- 0x542E0006, // 0056 LDINT R11 7
- 0x7C240400, // 0057 CALL R9 2
- 0x8C280120, // 0058 GETMET R10 R0 K32
- 0x5432005E, // 0059 LDINT R12 95
- 0x7C280400, // 005A CALL R10 2
- 0x542E009F, // 005B LDINT R11 160
- 0x0028140B, // 005C ADD R10 R10 R11
- 0x542E00FE, // 005D LDINT R11 255
- 0x242C140B, // 005E GT R11 R10 R11
- 0x782E0000, // 005F JMPF R11 #0061
- 0x542A00FE, // 0060 LDINT R10 255
- 0x142C1207, // 0061 LT R11 R9 R7
- 0x782E0001, // 0062 JMPF R11 #0065
- 0x882C010D, // 0063 GETMBR R11 R0 K13
- 0x982C120A, // 0064 SETIDX R11 R9 R10
- 0x58200000, // 0065 LDCONST R8 K0
- 0x14241007, // 0066 LT R9 R8 R7
- 0x7826007E, // 0067 JMPF R9 #00E7
- 0x8824010D, // 0068 GETMBR R9 R0 K13
- 0x94241208, // 0069 GETIDX R9 R9 R8
- 0xB82A4200, // 006A GETNGBL R10 K33
- 0x8C281522, // 006B GETMET R10 R10 K34
- 0x5C301200, // 006C MOVE R12 R9
- 0x58340000, // 006D LDCONST R13 K0
- 0x543A00FE, // 006E LDINT R14 255
- 0x583C0000, // 006F LDCONST R15 K0
- 0x5C400800, // 0070 MOVE R16 R4
- 0x7C280C00, // 0071 CALL R10 6
- 0x5C241400, // 0072 MOVE R9 R10
- 0x24280B00, // 0073 GT R10 R5 K0
- 0x782A0012, // 0074 JMPF R10 #0088
- 0x8C280120, // 0075 GETMET R10 R0 K32
- 0x5C300A00, // 0076 MOVE R12 R5
- 0x7C280400, // 0077 CALL R10 2
- 0x8C2C0120, // 0078 GETMET R11 R0 K32
- 0x58340023, // 0079 LDCONST R13 K35
- 0x7C2C0400, // 007A CALL R11 2
- 0x1C2C1700, // 007B EQ R11 R11 K0
- 0x782E0001, // 007C JMPF R11 #007F
- 0x0024120A, // 007D ADD R9 R9 R10
- 0x70020004, // 007E JMP #0084
- 0x242C120A, // 007F GT R11 R9 R10
- 0x782E0001, // 0080 JMPF R11 #0083
- 0x0424120A, // 0081 SUB R9 R9 R10
- 0x70020000, // 0082 JMP #0084
- 0x58240000, // 0083 LDCONST R9 K0
- 0x542E00FE, // 0084 LDINT R11 255
- 0x242C120B, // 0085 GT R11 R9 R11
- 0x782E0000, // 0086 JMPF R11 #0088
- 0x542600FE, // 0087 LDINT R9 255
- 0x58280016, // 0088 LDCONST R10 K22
- 0x242C1300, // 0089 GT R11 R9 K0
- 0x782E0052, // 008A JMPF R11 #00DE
- 0x5C2C0C00, // 008B MOVE R11 R6
- 0x4C300000, // 008C LDNIL R12
- 0x1C30160C, // 008D EQ R12 R11 R12
- 0x7832000B, // 008E JMPF R12 #009B
- 0xB8324A00, // 008F GETNGBL R12 K37
- 0x8C301926, // 0090 GETMET R12 R12 K38
- 0x88380110, // 0091 GETMBR R14 R0 K16
- 0x7C300400, // 0092 CALL R12 2
- 0xB8364A00, // 0093 GETNGBL R13 K37
- 0x88341B28, // 0094 GETMBR R13 R13 K40
- 0x90324E0D, // 0095 SETMBR R12 K39 R13
- 0x90325300, // 0096 SETMBR R12 K41 K0
- 0x90325506, // 0097 SETMBR R12 K42 K6
- 0x543600FE, // 0098 LDINT R13 255
- 0x9032560D, // 0099 SETMBR R12 K43 R13
- 0x5C2C1800, // 009A MOVE R11 R12
- 0xB8324A00, // 009B GETNGBL R12 K37
- 0x8C30192C, // 009C GETMET R12 R12 K44
- 0x5C381600, // 009D MOVE R14 R11
- 0x7C300400, // 009E CALL R12 2
- 0x78320009, // 009F JMPF R12 #00AA
- 0x8830172D, // 00A0 GETMBR R12 R11 K45
- 0x4C340000, // 00A1 LDNIL R13
- 0x2030180D, // 00A2 NE R12 R12 R13
- 0x78320005, // 00A3 JMPF R12 #00AA
- 0x8C30172D, // 00A4 GETMET R12 R11 K45
- 0x5C381200, // 00A5 MOVE R14 R9
- 0x583C0000, // 00A6 LDCONST R15 K0
- 0x7C300600, // 00A7 CALL R12 3
- 0x5C281800, // 00A8 MOVE R10 R12
- 0x70020033, // 00A9 JMP #00DE
- 0x5C281600, // 00AA MOVE R10 R11
- 0x54320017, // 00AB LDINT R12 24
- 0x3C30140C, // 00AC SHR R12 R10 R12
- 0x543600FE, // 00AD LDINT R13 255
- 0x2C30180D, // 00AE AND R12 R12 R13
- 0x5436000F, // 00AF LDINT R13 16
- 0x3C34140D, // 00B0 SHR R13 R10 R13
- 0x543A00FE, // 00B1 LDINT R14 255
- 0x2C341A0E, // 00B2 AND R13 R13 R14
- 0x543A0007, // 00B3 LDINT R14 8
- 0x3C38140E, // 00B4 SHR R14 R10 R14
- 0x543E00FE, // 00B5 LDINT R15 255
- 0x2C381C0F, // 00B6 AND R14 R14 R15
- 0x543E00FE, // 00B7 LDINT R15 255
- 0x2C3C140F, // 00B8 AND R15 R10 R15
- 0xB8424200, // 00B9 GETNGBL R16 K33
- 0x8C402122, // 00BA GETMET R16 R16 K34
- 0x5C481200, // 00BB MOVE R18 R9
- 0x584C0000, // 00BC LDCONST R19 K0
- 0x545200FE, // 00BD LDINT R20 255
- 0x58540000, // 00BE LDCONST R21 K0
- 0x5C581A00, // 00BF MOVE R22 R13
- 0x7C400C00, // 00C0 CALL R16 6
- 0x5C342000, // 00C1 MOVE R13 R16
- 0xB8424200, // 00C2 GETNGBL R16 K33
- 0x8C402122, // 00C3 GETMET R16 R16 K34
- 0x5C481200, // 00C4 MOVE R18 R9
- 0x584C0000, // 00C5 LDCONST R19 K0
- 0x545200FE, // 00C6 LDINT R20 255
- 0x58540000, // 00C7 LDCONST R21 K0
- 0x5C581C00, // 00C8 MOVE R22 R14
- 0x7C400C00, // 00C9 CALL R16 6
- 0x5C382000, // 00CA MOVE R14 R16
- 0xB8424200, // 00CB GETNGBL R16 K33
- 0x8C402122, // 00CC GETMET R16 R16 K34
- 0x5C481200, // 00CD MOVE R18 R9
- 0x584C0000, // 00CE LDCONST R19 K0
- 0x545200FE, // 00CF LDINT R20 255
- 0x58540000, // 00D0 LDCONST R21 K0
- 0x5C581E00, // 00D1 MOVE R22 R15
- 0x7C400C00, // 00D2 CALL R16 6
- 0x5C3C2000, // 00D3 MOVE R15 R16
- 0x54420017, // 00D4 LDINT R16 24
- 0x38401810, // 00D5 SHL R16 R12 R16
- 0x5446000F, // 00D6 LDINT R17 16
- 0x38441A11, // 00D7 SHL R17 R13 R17
- 0x30402011, // 00D8 OR R16 R16 R17
- 0x54460007, // 00D9 LDINT R17 8
- 0x38441C11, // 00DA SHL R17 R14 R17
- 0x30402011, // 00DB OR R16 R16 R17
- 0x3040200F, // 00DC OR R16 R16 R15
- 0x5C282000, // 00DD MOVE R10 R16
- 0x882C0104, // 00DE GETMBR R11 R0 K4
- 0x8C2C1715, // 00DF GETMET R11 R11 K21
- 0x54360003, // 00E0 LDINT R13 4
- 0x0834100D, // 00E1 MUL R13 R8 R13
- 0x5C381400, // 00E2 MOVE R14 R10
- 0x543DFFFB, // 00E3 LDINT R15 -4
- 0x7C2C0800, // 00E4 CALL R11 4
- 0x00201106, // 00E5 ADD R8 R8 K6
- 0x7001FF7E, // 00E6 JMP #0066
- 0x80000000, // 00E7 RET 0
+ ( &(const binstruction[22]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080501, // 0003 EQ R2 R2 K1
+ 0x780A0009, // 0004 JMPF R2 #000F
+ 0xA40A0400, // 0005 IMPORT R2 K2
+ 0x8C0C0503, // 0006 GETMET R3 R2 K3
+ 0x5C140000, // 0007 MOVE R5 R0
+ 0x7C0C0400, // 0008 CALL R3 2
+ 0x8C100503, // 0009 GETMET R4 R2 K3
+ 0x5C180200, // 000A MOVE R6 R1
+ 0x7C100400, // 000B CALL R4 2
+ 0x1C0C0604, // 000C EQ R3 R3 R4
+ 0x80040600, // 000D RET 1 R3
+ 0x70020005, // 000E JMP #0015
+ 0x88080100, // 000F GETMBR R2 R0 K0
+ 0x600C0009, // 0010 GETGBL R3 G9
+ 0x5C100200, // 0011 MOVE R4 R1
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x1C080403, // 0013 EQ R2 R2 R3
+ 0x80040400, // 0014 RET 1 R2
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -2572,9 +7376,37 @@ be_local_closure(class_FireAnimation__update_fire_simulation, /* name */
/********************************************************************
-** Solidified function: start
+** Solidified function: tostring
********************************************************************/
-be_local_closure(class_FireAnimation_start, /* name */
+be_local_closure(class_StaticValueProvider_tostring, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080004, // 0001 LDCONST R2 K4
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80040200, // 0004 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: <
+********************************************************************/
+be_local_closure(class_StaticValueProvider__X3C, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -2584,25 +7416,16 @@ be_local_closure(class_FireAnimation_start, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FireAnimation, /* shared constants */
- be_str_weak(start),
+ &be_ktab_class_StaticValueProvider, /* shared constants */
+ be_str_weak(_X3C),
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08052E, // 0003 GETMET R2 R2 K46
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x90021D00, // 0006 SETMBR R0 K14 K0
- 0x8C08011F, // 0007 GETMET R2 R0 K31
- 0x7C080200, // 0008 CALL R2 1
- 0x88080110, // 0009 GETMBR R2 R0 K16
- 0x88080511, // 000A GETMBR R2 R2 K17
- 0x540EFFFF, // 000B LDINT R3 65536
- 0x10080403, // 000C MOD R2 R2 R3
- 0x90021E02, // 000D SETMBR R0 K15 R2
- 0x80040000, // 000E RET 1 R0
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x600C0009, // 0001 GETGBL R3 G9
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x14080403, // 0004 LT R2 R2 R3
+ 0x80040400, // 0005 RET 1 R2
})
)
);
@@ -2610,38 +7433,29 @@ be_local_closure(class_FireAnimation_start, /* name */
/********************************************************************
-** Solidified class: FireAnimation
+** Solidified class: StaticValueProvider
********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(FireAnimation,
- 4,
- &be_class_Animation,
- be_nested_map(14,
+extern const bclass be_class_ValueProvider;
+be_local_class(StaticValueProvider,
+ 0,
+ &be_class_ValueProvider,
+ be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(heat_map, -1), be_const_var(0) },
- { be_const_key_weak(start, -1), be_const_closure(class_FireAnimation_start_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_FireAnimation_init_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_FireAnimation_tostring_closure) },
- { be_const_key_weak(random_seed, -1), be_const_var(3) },
- { be_const_key_weak(render, 9), be_const_closure(class_FireAnimation_render_closure) },
- { be_const_key_weak(update, -1), be_const_closure(class_FireAnimation_update_closure) },
- { be_const_key_weak(last_update, -1), be_const_var(2) },
- { be_const_key_weak(_initialize_buffers, 6), be_const_closure(class_FireAnimation__initialize_buffers_closure) },
- { be_const_key_weak(PARAMS, 10), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(5,
+ { be_const_key_weak(_X3C_X3D, -1), be_const_closure(class_StaticValueProvider__X3C_X3D_closure) },
+ { be_const_key_weak(_X3D_X3D, -1), be_const_closure(class_StaticValueProvider__X3D_X3D_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(flicker_amount, 4), be_const_bytes_instance(07000001FF000064) },
- { be_const_key_weak(intensity, 0), be_const_bytes_instance(07000001FF0001B400) },
- { be_const_key_weak(flicker_speed, -1), be_const_bytes_instance(07000100140008) },
- { be_const_key_weak(sparking_rate, -1), be_const_bytes_instance(07000001FF000078) },
- { be_const_key_weak(cooling_rate, -1), be_const_bytes_instance(07000001FF000037) },
+ { be_const_key_weak(value, -1), be_const_bytes_instance(0C0604) },
})) ) } )) },
- { be_const_key_weak(_random, 2), be_const_closure(class_FireAnimation__random_closure) },
- { be_const_key_weak(current_colors, -1), be_const_var(1) },
- { be_const_key_weak(_update_fire_simulation, -1), be_const_closure(class_FireAnimation__update_fire_simulation_closure) },
- { be_const_key_weak(_random_range, 1), be_const_closure(class_FireAnimation__random_range_closure) },
+ { be_const_key_weak(produce_value, -1), be_const_closure(class_StaticValueProvider_produce_value_closure) },
+ { be_const_key_weak(_X21_X3D, -1), be_const_closure(class_StaticValueProvider__X21_X3D_closure) },
+ { be_const_key_weak(_X3E_X3D, 1), be_const_closure(class_StaticValueProvider__X3E_X3D_closure) },
+ { be_const_key_weak(_X3E, 2), be_const_closure(class_StaticValueProvider__X3E_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_StaticValueProvider_tostring_closure) },
+ { be_const_key_weak(_X3C, -1), be_const_closure(class_StaticValueProvider__X3C_closure) },
})),
- be_str_weak(FireAnimation)
+ be_str_weak(StaticValueProvider)
);
// compact class 'RichPaletteColorProvider' ktab size: 57, total: 126 (saved 552 bytes)
static const bvalue be_ktab_class_RichPaletteColorProvider[57] = {
@@ -3875,6 +8689,85 @@ be_local_class(RichPaletteColorProvider,
be_str_weak(RichPaletteColorProvider)
);
+/********************************************************************
+** Solidified function: ramp
+********************************************************************/
+be_local_closure(ramp, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(SAWTOOTH),
+ }),
+ be_str_weak(ramp),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: wave_custom
+********************************************************************/
+be_local_closure(wave_custom, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(wave_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(wave_type),
+ /* K4 */ be_const_int(2),
+ /* K5 */ be_nested_str_weak(frequency),
+ /* K6 */ be_nested_str_weak(wave_speed),
+ }),
+ be_str_weak(wave_custom),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x5409FEFF, // 0004 LDINT R2 -256
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x90060704, // 0006 SETMBR R1 K3 K4
+ 0x540A0027, // 0007 LDINT R2 40
+ 0x90060A02, // 0008 SETMBR R1 K5 R2
+ 0x540A001D, // 0009 LDINT R2 30
+ 0x90060C02, // 000A SETMBR R1 K6 R2
+ 0x80040200, // 000B RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: list_user_functions
********************************************************************/
@@ -3924,43 +8817,9 @@ be_local_closure(list_user_functions, /* name */
/********************************************************************
-** Solidified function: trigger_event
+** Solidified function: twinkle_classic
********************************************************************/
-be_local_closure(trigger_event, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(trigger_event),
- }),
- be_str_weak(trigger_event),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x88080501, // 0001 GETMBR R2 R2 K1
- 0x8C080502, // 0002 GETMET R2 R2 K2
- 0x5C100000, // 0003 MOVE R4 R0
- 0x5C140200, // 0004 MOVE R5 R1
- 0x7C080600, // 0005 CALL R2 3
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: unregister_event_handler
-********************************************************************/
-be_local_closure(unregister_event_handler, /* name */
+be_local_closure(twinkle_classic, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -3970,42 +8829,58 @@ be_local_closure(unregister_event_handler, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
+ ( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(unregister_handler),
+ /* K1 */ be_nested_str_weak(twinkle_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(density),
+ /* K4 */ be_nested_str_weak(twinkle_speed),
+ /* K5 */ be_nested_str_weak(fade_speed),
+ /* K6 */ be_nested_str_weak(min_brightness),
+ /* K7 */ be_nested_str_weak(max_brightness),
}),
- be_str_weak(unregister_event_handler),
+ be_str_weak(twinkle_classic),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
+ ( &(const binstruction[17]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
- 0x88040301, // 0001 GETMBR R1 R1 K1
- 0x8C040302, // 0002 GETMET R1 R1 K2
- 0x5C0C0000, // 0003 MOVE R3 R0
- 0x7C040400, // 0004 CALL R1 2
- 0x80000000, // 0005 RET 0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x5409FFFE, // 0004 LDINT R2 -1
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x540A0095, // 0006 LDINT R2 150
+ 0x90060602, // 0007 SETMBR R1 K3 R2
+ 0x540A0005, // 0008 LDINT R2 6
+ 0x90060802, // 0009 SETMBR R1 K4 R2
+ 0x540A00B3, // 000A LDINT R2 180
+ 0x90060A02, // 000B SETMBR R1 K5 R2
+ 0x540A001F, // 000C LDINT R2 32
+ 0x90060C02, // 000D SETMBR R1 K6 R2
+ 0x540A00FE, // 000E LDINT R2 255
+ 0x90060E02, // 000F SETMBR R1 K7 R2
+ 0x80040200, // 0010 RET 1 R1
})
)
);
/*******************************************************************/
-// compact class 'StaticColorProvider' ktab size: 4, total: 8 (saved 32 bytes)
-static const bvalue be_ktab_class_StaticColorProvider[4] = {
- /* K0 */ be_nested_str_weak(color),
- /* K1 */ be_nested_str_weak(brightness),
- /* K2 */ be_nested_str_weak(apply_brightness),
- /* K3 */ be_nested_str_weak(StaticColorProvider_X28color_X3D0x_X2508X_X29),
+// compact class 'IterationNumberProvider' ktab size: 4, total: 6 (saved 16 bytes)
+static const bvalue be_ktab_class_IterationNumberProvider[4] = {
+ /* K0 */ be_nested_str_weak(engine),
+ /* K1 */ be_nested_str_weak(get_current_iteration_number),
+ /* K2 */ be_nested_str_weak(IterationNumberProvider_X28current_X3A_X20_X25s_X29),
+ /* K3 */ be_nested_str_weak(IterationNumberProvider_X28not_in_sequence_X29),
};
-extern const bclass be_class_StaticColorProvider;
+extern const bclass be_class_IterationNumberProvider;
/********************************************************************
** Solidified function: produce_value
********************************************************************/
-be_local_closure(class_StaticColorProvider_produce_value, /* name */
+be_local_closure(class_IterationNumberProvider_produce_value, /* name */
be_nested_proto(
- 9, /* nstack */
+ 5, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -4013,21 +8888,14 @@ be_local_closure(class_StaticColorProvider_produce_value, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_StaticColorProvider, /* shared constants */
+ &be_ktab_class_IterationNumberProvider, /* shared constants */
be_str_weak(produce_value),
&be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
+ ( &(const binstruction[ 4]) { /* code */
0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x88100101, // 0001 GETMBR R4 R0 K1
- 0x541600FE, // 0002 LDINT R5 255
- 0x20140805, // 0003 NE R5 R4 R5
- 0x78160004, // 0004 JMPF R5 #000A
- 0x8C140102, // 0005 GETMET R5 R0 K2
- 0x5C1C0600, // 0006 MOVE R7 R3
- 0x5C200800, // 0007 MOVE R8 R4
- 0x7C140600, // 0008 CALL R5 3
- 0x80040A00, // 0009 RET 1 R5
- 0x80040600, // 000A RET 1 R3
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x80040600, // 0003 RET 1 R3
})
)
);
@@ -4037,9 +8905,9 @@ be_local_closure(class_StaticColorProvider_produce_value, /* name */
/********************************************************************
** Solidified function: tostring
********************************************************************/
-be_local_closure(class_StaticColorProvider_tostring, /* name */
+be_local_closure(class_IterationNumberProvider_tostring, /* name */
be_nested_proto(
- 4, /* nstack */
+ 5, /* nstack */
1, /* argc */
10, /* varg */
0, /* has upvals */
@@ -4047,15 +8915,24 @@ be_local_closure(class_StaticColorProvider_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_StaticColorProvider, /* shared constants */
+ &be_ktab_class_IterationNumberProvider, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080003, // 0001 LDCONST R2 K3
- 0x880C0100, // 0002 GETMBR R3 R0 K0
- 0x7C040400, // 0003 CALL R1 2
- 0x80040200, // 0004 RET 1 R1
+ ( &(const binstruction[14]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x4C080000, // 0003 LDNIL R2
+ 0x20080202, // 0004 NE R2 R1 R2
+ 0x780A0005, // 0005 JMPF R2 #000C
+ 0x60080018, // 0006 GETGBL R2 G24
+ 0x580C0002, // 0007 LDCONST R3 K2
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x80040400, // 000A RET 1 R2
+ 0x70020000, // 000B JMP #000D
+ 0x80060600, // 000C RET 1 K3
+ 0x80000000, // 000D RET 0
})
)
);
@@ -4063,58 +8940,18 @@ be_local_closure(class_StaticColorProvider_tostring, /* name */
/********************************************************************
-** Solidified function: get_color_for_value
+** Solidified class: IterationNumberProvider
********************************************************************/
-be_local_closure(class_StaticColorProvider_get_color_for_value, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticColorProvider, /* shared constants */
- be_str_weak(get_color_for_value),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x88100101, // 0001 GETMBR R4 R0 K1
- 0x541600FE, // 0002 LDINT R5 255
- 0x20140805, // 0003 NE R5 R4 R5
- 0x78160004, // 0004 JMPF R5 #000A
- 0x8C140102, // 0005 GETMET R5 R0 K2
- 0x5C1C0600, // 0006 MOVE R7 R3
- 0x5C200800, // 0007 MOVE R8 R4
- 0x7C140600, // 0008 CALL R5 3
- 0x80040A00, // 0009 RET 1 R5
- 0x80040600, // 000A RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: StaticColorProvider
-********************************************************************/
-extern const bclass be_class_ColorProvider;
-be_local_class(StaticColorProvider,
+extern const bclass be_class_ValueProvider;
+be_local_class(IterationNumberProvider,
0,
- &be_class_ColorProvider,
- be_nested_map(4,
+ &be_class_ValueProvider,
+ be_nested_map(2,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(class_StaticColorProvider_tostring_closure) },
- { be_const_key_weak(produce_value, 2), be_const_closure(class_StaticColorProvider_produce_value_closure) },
- { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_StaticColorProvider_get_color_for_value_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(1,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(color, -1), be_const_bytes_instance(0400FF) },
- })) ) } )) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_IterationNumberProvider_tostring_closure) },
+ { be_const_key_weak(produce_value, 0), be_const_closure(class_IterationNumberProvider_produce_value_closure) },
})),
- be_str_weak(StaticColorProvider)
+ be_str_weak(IterationNumberProvider)
);
// compact class 'TwinkleAnimation' ktab size: 40, total: 64 (saved 192 bytes)
static const bvalue be_ktab_class_TwinkleAnimation[40] = {
@@ -4680,6 +9517,1237 @@ be_local_class(TwinkleAnimation,
be_str_weak(TwinkleAnimation)
);
+/********************************************************************
+** Solidified function: ease_out
+********************************************************************/
+be_local_closure(ease_out, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(EASE_OUT),
+ }),
+ be_str_weak(ease_out),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'FireAnimation' ktab size: 47, total: 73 (saved 208 bytes)
+static const bvalue be_ktab_class_FireAnimation[47] = {
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(_random),
+ /* K2 */ be_nested_str_weak(width),
+ /* K3 */ be_nested_str_weak(set_pixel_color),
+ /* K4 */ be_nested_str_weak(current_colors),
+ /* K5 */ be_nested_str_weak(get),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(FireAnimation_X28intensity_X3D_X25s_X2C_X20flicker_speed_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K8 */ be_nested_str_weak(intensity),
+ /* K9 */ be_nested_str_weak(flicker_speed),
+ /* K10 */ be_nested_str_weak(priority),
+ /* K11 */ be_nested_str_weak(is_running),
+ /* K12 */ be_nested_str_weak(init),
+ /* K13 */ be_nested_str_weak(heat_map),
+ /* K14 */ be_nested_str_weak(last_update),
+ /* K15 */ be_nested_str_weak(random_seed),
+ /* K16 */ be_nested_str_weak(engine),
+ /* K17 */ be_nested_str_weak(time_ms),
+ /* K18 */ be_nested_str_weak(strip_length),
+ /* K19 */ be_nested_str_weak(clear),
+ /* K20 */ be_nested_str_weak(resize),
+ /* K21 */ be_nested_str_weak(set),
+ /* K22 */ be_const_int(-16777216),
+ /* K23 */ be_nested_str_weak(_update_fire_simulation),
+ /* K24 */ be_const_int(1103515245),
+ /* K25 */ be_const_int(2147483647),
+ /* K26 */ be_nested_str_weak(cooling_rate),
+ /* K27 */ be_nested_str_weak(sparking_rate),
+ /* K28 */ be_nested_str_weak(flicker_amount),
+ /* K29 */ be_nested_str_weak(color),
+ /* K30 */ be_nested_str_weak(size),
+ /* K31 */ be_nested_str_weak(_initialize_buffers),
+ /* K32 */ be_nested_str_weak(_random_range),
+ /* K33 */ be_nested_str_weak(tasmota),
+ /* K34 */ be_nested_str_weak(scale_uint),
+ /* K35 */ be_const_int(2),
+ /* K36 */ be_const_int(3),
+ /* K37 */ be_nested_str_weak(animation),
+ /* K38 */ be_nested_str_weak(rich_palette),
+ /* K39 */ be_nested_str_weak(palette),
+ /* K40 */ be_nested_str_weak(PALETTE_FIRE),
+ /* K41 */ be_nested_str_weak(cycle_period),
+ /* K42 */ be_nested_str_weak(transition_type),
+ /* K43 */ be_nested_str_weak(brightness),
+ /* K44 */ be_nested_str_weak(is_color_provider),
+ /* K45 */ be_nested_str_weak(get_color_for_value),
+ /* K46 */ be_nested_str_weak(start),
+};
+
+
+extern const bclass be_class_FireAnimation;
+
+/********************************************************************
+** Solidified function: _random_range
+********************************************************************/
+be_local_closure(class_FireAnimation__random_range, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(_random_range),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x18080300, // 0000 LE R2 R1 K0
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0x80060000, // 0002 RET 1 K0
+ 0x8C080101, // 0003 GETMET R2 R0 K1
+ 0x7C080200, // 0004 CALL R2 1
+ 0x10080401, // 0005 MOD R2 R2 R1
+ 0x80040400, // 0006 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_FireAnimation_render, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58100000, // 0000 LDCONST R4 K0
+ 0x14140803, // 0001 LT R5 R4 R3
+ 0x7816000D, // 0002 JMPF R5 #0011
+ 0x88140302, // 0003 GETMBR R5 R1 K2
+ 0x14140805, // 0004 LT R5 R4 R5
+ 0x78160008, // 0005 JMPF R5 #000F
+ 0x8C140303, // 0006 GETMET R5 R1 K3
+ 0x5C1C0800, // 0007 MOVE R7 R4
+ 0x88200104, // 0008 GETMBR R8 R0 K4
+ 0x8C201105, // 0009 GETMET R8 R8 K5
+ 0x542A0003, // 000A LDINT R10 4
+ 0x0828080A, // 000B MUL R10 R4 R10
+ 0x542DFFFB, // 000C LDINT R11 -4
+ 0x7C200600, // 000D CALL R8 3
+ 0x7C140600, // 000E CALL R5 3
+ 0x00100906, // 000F ADD R4 R4 K6
+ 0x7001FFEF, // 0010 JMP #0001
+ 0x50140200, // 0011 LDBOOL R5 1 0
+ 0x80040A00, // 0012 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_FireAnimation_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080007, // 0001 LDCONST R2 K7
+ 0x880C0108, // 0002 GETMBR R3 R0 K8
+ 0x88100109, // 0003 GETMBR R4 R0 K9
+ 0x8814010A, // 0004 GETMBR R5 R0 K10
+ 0x8818010B, // 0005 GETMBR R6 R0 K11
+ 0x7C040A00, // 0006 CALL R1 5
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_FireAnimation_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08050C, // 0003 GETMET R2 R2 K12
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x60080015, // 0006 GETGBL R2 G21
+ 0x7C080000, // 0007 CALL R2 0
+ 0x90021A02, // 0008 SETMBR R0 K13 R2
+ 0x60080015, // 0009 GETGBL R2 G21
+ 0x7C080000, // 000A CALL R2 0
+ 0x90020802, // 000B SETMBR R0 K4 R2
+ 0x90021D00, // 000C SETMBR R0 K14 K0
+ 0x88080110, // 000D GETMBR R2 R0 K16
+ 0x88080511, // 000E GETMBR R2 R2 K17
+ 0x540EFFFF, // 000F LDINT R3 65536
+ 0x10080403, // 0010 MOD R2 R2 R3
+ 0x90021E02, // 0011 SETMBR R0 K15 R2
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _initialize_buffers
+********************************************************************/
+be_local_closure(class_FireAnimation__initialize_buffers, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(_initialize_buffers),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x88040110, // 0000 GETMBR R1 R0 K16
+ 0x88040312, // 0001 GETMBR R1 R1 K18
+ 0x8808010D, // 0002 GETMBR R2 R0 K13
+ 0x8C080513, // 0003 GETMET R2 R2 K19
+ 0x7C080200, // 0004 CALL R2 1
+ 0x8808010D, // 0005 GETMBR R2 R0 K13
+ 0x8C080514, // 0006 GETMET R2 R2 K20
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C080400, // 0008 CALL R2 2
+ 0x88080104, // 0009 GETMBR R2 R0 K4
+ 0x8C080513, // 000A GETMET R2 R2 K19
+ 0x7C080200, // 000B CALL R2 1
+ 0x88080104, // 000C GETMBR R2 R0 K4
+ 0x8C080514, // 000D GETMET R2 R2 K20
+ 0x54120003, // 000E LDINT R4 4
+ 0x08100204, // 000F MUL R4 R1 R4
+ 0x7C080400, // 0010 CALL R2 2
+ 0x58080000, // 0011 LDCONST R2 K0
+ 0x140C0401, // 0012 LT R3 R2 R1
+ 0x780E0008, // 0013 JMPF R3 #001D
+ 0x880C0104, // 0014 GETMBR R3 R0 K4
+ 0x8C0C0715, // 0015 GETMET R3 R3 K21
+ 0x54160003, // 0016 LDINT R5 4
+ 0x08140405, // 0017 MUL R5 R2 R5
+ 0x58180016, // 0018 LDCONST R6 K22
+ 0x541DFFFB, // 0019 LDINT R7 -4
+ 0x7C0C0800, // 001A CALL R3 4
+ 0x00080506, // 001B ADD R2 R2 K6
+ 0x7001FFF4, // 001C JMP #0012
+ 0x80000000, // 001D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_FireAnimation_update, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x88080109, // 0000 GETMBR R2 R0 K9
+ 0x540E03E7, // 0001 LDINT R3 1000
+ 0x0C0C0602, // 0002 DIV R3 R3 R2
+ 0x8810010E, // 0003 GETMBR R4 R0 K14
+ 0x04100204, // 0004 SUB R4 R1 R4
+ 0x28100803, // 0005 GE R4 R4 R3
+ 0x78120003, // 0006 JMPF R4 #000B
+ 0x90021C01, // 0007 SETMBR R0 K14 R1
+ 0x8C100117, // 0008 GETMET R4 R0 K23
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x7C100400, // 000A CALL R4 2
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _random
+********************************************************************/
+be_local_closure(class_FireAnimation__random, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(_random),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x8804010F, // 0000 GETMBR R1 R0 K15
+ 0x08040318, // 0001 MUL R1 R1 K24
+ 0x540A3038, // 0002 LDINT R2 12345
+ 0x00040202, // 0003 ADD R1 R1 R2
+ 0x2C040319, // 0004 AND R1 R1 K25
+ 0x90021E01, // 0005 SETMBR R0 K15 R1
+ 0x8804010F, // 0006 GETMBR R1 R0 K15
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _update_fire_simulation
+********************************************************************/
+be_local_closure(class_FireAnimation__update_fire_simulation, /* name */
+ be_nested_proto(
+ 23, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(_update_fire_simulation),
+ &be_const_str_solidified,
+ ( &(const binstruction[232]) { /* code */
+ 0x8808011A, // 0000 GETMBR R2 R0 K26
+ 0x880C011B, // 0001 GETMBR R3 R0 K27
+ 0x88100108, // 0002 GETMBR R4 R0 K8
+ 0x8814011C, // 0003 GETMBR R5 R0 K28
+ 0x8818011D, // 0004 GETMBR R6 R0 K29
+ 0x881C0110, // 0005 GETMBR R7 R0 K16
+ 0x881C0F12, // 0006 GETMBR R7 R7 K18
+ 0x8820010D, // 0007 GETMBR R8 R0 K13
+ 0x8C20111E, // 0008 GETMET R8 R8 K30
+ 0x7C200200, // 0009 CALL R8 1
+ 0x20201007, // 000A NE R8 R8 R7
+ 0x74220006, // 000B JMPT R8 #0013
+ 0x88200104, // 000C GETMBR R8 R0 K4
+ 0x8C20111E, // 000D GETMET R8 R8 K30
+ 0x7C200200, // 000E CALL R8 1
+ 0x54260003, // 000F LDINT R9 4
+ 0x08240E09, // 0010 MUL R9 R7 R9
+ 0x20201009, // 0011 NE R8 R8 R9
+ 0x78220001, // 0012 JMPF R8 #0015
+ 0x8C20011F, // 0013 GETMET R8 R0 K31
+ 0x7C200200, // 0014 CALL R8 1
+ 0x58200000, // 0015 LDCONST R8 K0
+ 0x14241007, // 0016 LT R9 R8 R7
+ 0x78260017, // 0017 JMPF R9 #0030
+ 0x8C240120, // 0018 GETMET R9 R0 K32
+ 0xB82E4200, // 0019 GETNGBL R11 K33
+ 0x8C2C1722, // 001A GETMET R11 R11 K34
+ 0x5C340400, // 001B MOVE R13 R2
+ 0x58380000, // 001C LDCONST R14 K0
+ 0x543E00FE, // 001D LDINT R15 255
+ 0x58400000, // 001E LDCONST R16 K0
+ 0x54460009, // 001F LDINT R17 10
+ 0x7C2C0C00, // 0020 CALL R11 6
+ 0x002C1723, // 0021 ADD R11 R11 K35
+ 0x7C240400, // 0022 CALL R9 2
+ 0x8828010D, // 0023 GETMBR R10 R0 K13
+ 0x94281408, // 0024 GETIDX R10 R10 R8
+ 0x2828120A, // 0025 GE R10 R9 R10
+ 0x782A0002, // 0026 JMPF R10 #002A
+ 0x8828010D, // 0027 GETMBR R10 R0 K13
+ 0x98281100, // 0028 SETIDX R10 R8 K0
+ 0x70020003, // 0029 JMP #002E
+ 0x8828010D, // 002A GETMBR R10 R0 K13
+ 0x942C1408, // 002B GETIDX R11 R10 R8
+ 0x042C1609, // 002C SUB R11 R11 R9
+ 0x9828100B, // 002D SETIDX R10 R8 R11
+ 0x00201106, // 002E ADD R8 R8 K6
+ 0x7001FFE5, // 002F JMP #0016
+ 0x28240F24, // 0030 GE R9 R7 K36
+ 0x7826001D, // 0031 JMPF R9 #0050
+ 0x04240F06, // 0032 SUB R9 R7 K6
+ 0x28281323, // 0033 GE R10 R9 K35
+ 0x782A001A, // 0034 JMPF R10 #0050
+ 0x04281306, // 0035 SUB R10 R9 K6
+ 0x882C010D, // 0036 GETMBR R11 R0 K13
+ 0x9428160A, // 0037 GETIDX R10 R11 R10
+ 0x042C1323, // 0038 SUB R11 R9 K35
+ 0x8830010D, // 0039 GETMBR R12 R0 K13
+ 0x942C180B, // 003A GETIDX R11 R12 R11
+ 0x0028140B, // 003B ADD R10 R10 R11
+ 0x042C1323, // 003C SUB R11 R9 K35
+ 0x8830010D, // 003D GETMBR R12 R0 K13
+ 0x942C180B, // 003E GETIDX R11 R12 R11
+ 0x0028140B, // 003F ADD R10 R10 R11
+ 0x0C281524, // 0040 DIV R10 R10 K36
+ 0x142C1500, // 0041 LT R11 R10 K0
+ 0x782E0001, // 0042 JMPF R11 #0045
+ 0x58280000, // 0043 LDCONST R10 K0
+ 0x70020003, // 0044 JMP #0049
+ 0x542E00FE, // 0045 LDINT R11 255
+ 0x242C140B, // 0046 GT R11 R10 R11
+ 0x782E0000, // 0047 JMPF R11 #0049
+ 0x542A00FE, // 0048 LDINT R10 255
+ 0x882C010D, // 0049 GETMBR R11 R0 K13
+ 0x60300009, // 004A GETGBL R12 G9
+ 0x5C341400, // 004B MOVE R13 R10
+ 0x7C300200, // 004C CALL R12 1
+ 0x982C120C, // 004D SETIDX R11 R9 R12
+ 0x04241306, // 004E SUB R9 R9 K6
+ 0x7001FFE2, // 004F JMP #0033
+ 0x8C240120, // 0050 GETMET R9 R0 K32
+ 0x542E00FE, // 0051 LDINT R11 255
+ 0x7C240400, // 0052 CALL R9 2
+ 0x14241203, // 0053 LT R9 R9 R3
+ 0x7826000F, // 0054 JMPF R9 #0065
+ 0x8C240120, // 0055 GETMET R9 R0 K32
+ 0x542E0006, // 0056 LDINT R11 7
+ 0x7C240400, // 0057 CALL R9 2
+ 0x8C280120, // 0058 GETMET R10 R0 K32
+ 0x5432005E, // 0059 LDINT R12 95
+ 0x7C280400, // 005A CALL R10 2
+ 0x542E009F, // 005B LDINT R11 160
+ 0x0028140B, // 005C ADD R10 R10 R11
+ 0x542E00FE, // 005D LDINT R11 255
+ 0x242C140B, // 005E GT R11 R10 R11
+ 0x782E0000, // 005F JMPF R11 #0061
+ 0x542A00FE, // 0060 LDINT R10 255
+ 0x142C1207, // 0061 LT R11 R9 R7
+ 0x782E0001, // 0062 JMPF R11 #0065
+ 0x882C010D, // 0063 GETMBR R11 R0 K13
+ 0x982C120A, // 0064 SETIDX R11 R9 R10
+ 0x58200000, // 0065 LDCONST R8 K0
+ 0x14241007, // 0066 LT R9 R8 R7
+ 0x7826007E, // 0067 JMPF R9 #00E7
+ 0x8824010D, // 0068 GETMBR R9 R0 K13
+ 0x94241208, // 0069 GETIDX R9 R9 R8
+ 0xB82A4200, // 006A GETNGBL R10 K33
+ 0x8C281522, // 006B GETMET R10 R10 K34
+ 0x5C301200, // 006C MOVE R12 R9
+ 0x58340000, // 006D LDCONST R13 K0
+ 0x543A00FE, // 006E LDINT R14 255
+ 0x583C0000, // 006F LDCONST R15 K0
+ 0x5C400800, // 0070 MOVE R16 R4
+ 0x7C280C00, // 0071 CALL R10 6
+ 0x5C241400, // 0072 MOVE R9 R10
+ 0x24280B00, // 0073 GT R10 R5 K0
+ 0x782A0012, // 0074 JMPF R10 #0088
+ 0x8C280120, // 0075 GETMET R10 R0 K32
+ 0x5C300A00, // 0076 MOVE R12 R5
+ 0x7C280400, // 0077 CALL R10 2
+ 0x8C2C0120, // 0078 GETMET R11 R0 K32
+ 0x58340023, // 0079 LDCONST R13 K35
+ 0x7C2C0400, // 007A CALL R11 2
+ 0x1C2C1700, // 007B EQ R11 R11 K0
+ 0x782E0001, // 007C JMPF R11 #007F
+ 0x0024120A, // 007D ADD R9 R9 R10
+ 0x70020004, // 007E JMP #0084
+ 0x242C120A, // 007F GT R11 R9 R10
+ 0x782E0001, // 0080 JMPF R11 #0083
+ 0x0424120A, // 0081 SUB R9 R9 R10
+ 0x70020000, // 0082 JMP #0084
+ 0x58240000, // 0083 LDCONST R9 K0
+ 0x542E00FE, // 0084 LDINT R11 255
+ 0x242C120B, // 0085 GT R11 R9 R11
+ 0x782E0000, // 0086 JMPF R11 #0088
+ 0x542600FE, // 0087 LDINT R9 255
+ 0x58280016, // 0088 LDCONST R10 K22
+ 0x242C1300, // 0089 GT R11 R9 K0
+ 0x782E0052, // 008A JMPF R11 #00DE
+ 0x5C2C0C00, // 008B MOVE R11 R6
+ 0x4C300000, // 008C LDNIL R12
+ 0x1C30160C, // 008D EQ R12 R11 R12
+ 0x7832000B, // 008E JMPF R12 #009B
+ 0xB8324A00, // 008F GETNGBL R12 K37
+ 0x8C301926, // 0090 GETMET R12 R12 K38
+ 0x88380110, // 0091 GETMBR R14 R0 K16
+ 0x7C300400, // 0092 CALL R12 2
+ 0xB8364A00, // 0093 GETNGBL R13 K37
+ 0x88341B28, // 0094 GETMBR R13 R13 K40
+ 0x90324E0D, // 0095 SETMBR R12 K39 R13
+ 0x90325300, // 0096 SETMBR R12 K41 K0
+ 0x90325506, // 0097 SETMBR R12 K42 K6
+ 0x543600FE, // 0098 LDINT R13 255
+ 0x9032560D, // 0099 SETMBR R12 K43 R13
+ 0x5C2C1800, // 009A MOVE R11 R12
+ 0xB8324A00, // 009B GETNGBL R12 K37
+ 0x8C30192C, // 009C GETMET R12 R12 K44
+ 0x5C381600, // 009D MOVE R14 R11
+ 0x7C300400, // 009E CALL R12 2
+ 0x78320009, // 009F JMPF R12 #00AA
+ 0x8830172D, // 00A0 GETMBR R12 R11 K45
+ 0x4C340000, // 00A1 LDNIL R13
+ 0x2030180D, // 00A2 NE R12 R12 R13
+ 0x78320005, // 00A3 JMPF R12 #00AA
+ 0x8C30172D, // 00A4 GETMET R12 R11 K45
+ 0x5C381200, // 00A5 MOVE R14 R9
+ 0x583C0000, // 00A6 LDCONST R15 K0
+ 0x7C300600, // 00A7 CALL R12 3
+ 0x5C281800, // 00A8 MOVE R10 R12
+ 0x70020033, // 00A9 JMP #00DE
+ 0x5C281600, // 00AA MOVE R10 R11
+ 0x54320017, // 00AB LDINT R12 24
+ 0x3C30140C, // 00AC SHR R12 R10 R12
+ 0x543600FE, // 00AD LDINT R13 255
+ 0x2C30180D, // 00AE AND R12 R12 R13
+ 0x5436000F, // 00AF LDINT R13 16
+ 0x3C34140D, // 00B0 SHR R13 R10 R13
+ 0x543A00FE, // 00B1 LDINT R14 255
+ 0x2C341A0E, // 00B2 AND R13 R13 R14
+ 0x543A0007, // 00B3 LDINT R14 8
+ 0x3C38140E, // 00B4 SHR R14 R10 R14
+ 0x543E00FE, // 00B5 LDINT R15 255
+ 0x2C381C0F, // 00B6 AND R14 R14 R15
+ 0x543E00FE, // 00B7 LDINT R15 255
+ 0x2C3C140F, // 00B8 AND R15 R10 R15
+ 0xB8424200, // 00B9 GETNGBL R16 K33
+ 0x8C402122, // 00BA GETMET R16 R16 K34
+ 0x5C481200, // 00BB MOVE R18 R9
+ 0x584C0000, // 00BC LDCONST R19 K0
+ 0x545200FE, // 00BD LDINT R20 255
+ 0x58540000, // 00BE LDCONST R21 K0
+ 0x5C581A00, // 00BF MOVE R22 R13
+ 0x7C400C00, // 00C0 CALL R16 6
+ 0x5C342000, // 00C1 MOVE R13 R16
+ 0xB8424200, // 00C2 GETNGBL R16 K33
+ 0x8C402122, // 00C3 GETMET R16 R16 K34
+ 0x5C481200, // 00C4 MOVE R18 R9
+ 0x584C0000, // 00C5 LDCONST R19 K0
+ 0x545200FE, // 00C6 LDINT R20 255
+ 0x58540000, // 00C7 LDCONST R21 K0
+ 0x5C581C00, // 00C8 MOVE R22 R14
+ 0x7C400C00, // 00C9 CALL R16 6
+ 0x5C382000, // 00CA MOVE R14 R16
+ 0xB8424200, // 00CB GETNGBL R16 K33
+ 0x8C402122, // 00CC GETMET R16 R16 K34
+ 0x5C481200, // 00CD MOVE R18 R9
+ 0x584C0000, // 00CE LDCONST R19 K0
+ 0x545200FE, // 00CF LDINT R20 255
+ 0x58540000, // 00D0 LDCONST R21 K0
+ 0x5C581E00, // 00D1 MOVE R22 R15
+ 0x7C400C00, // 00D2 CALL R16 6
+ 0x5C3C2000, // 00D3 MOVE R15 R16
+ 0x54420017, // 00D4 LDINT R16 24
+ 0x38401810, // 00D5 SHL R16 R12 R16
+ 0x5446000F, // 00D6 LDINT R17 16
+ 0x38441A11, // 00D7 SHL R17 R13 R17
+ 0x30402011, // 00D8 OR R16 R16 R17
+ 0x54460007, // 00D9 LDINT R17 8
+ 0x38441C11, // 00DA SHL R17 R14 R17
+ 0x30402011, // 00DB OR R16 R16 R17
+ 0x3040200F, // 00DC OR R16 R16 R15
+ 0x5C282000, // 00DD MOVE R10 R16
+ 0x882C0104, // 00DE GETMBR R11 R0 K4
+ 0x8C2C1715, // 00DF GETMET R11 R11 K21
+ 0x54360003, // 00E0 LDINT R13 4
+ 0x0834100D, // 00E1 MUL R13 R8 R13
+ 0x5C381400, // 00E2 MOVE R14 R10
+ 0x543DFFFB, // 00E3 LDINT R15 -4
+ 0x7C2C0800, // 00E4 CALL R11 4
+ 0x00201106, // 00E5 ADD R8 R8 K6
+ 0x7001FF7E, // 00E6 JMP #0066
+ 0x80000000, // 00E7 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(class_FireAnimation_start, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FireAnimation, /* shared constants */
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C08052E, // 0003 GETMET R2 R2 K46
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x90021D00, // 0006 SETMBR R0 K14 K0
+ 0x8C08011F, // 0007 GETMET R2 R0 K31
+ 0x7C080200, // 0008 CALL R2 1
+ 0x88080110, // 0009 GETMBR R2 R0 K16
+ 0x88080511, // 000A GETMBR R2 R2 K17
+ 0x540EFFFF, // 000B LDINT R3 65536
+ 0x10080403, // 000C MOD R2 R2 R3
+ 0x90021E02, // 000D SETMBR R0 K15 R2
+ 0x80040000, // 000E RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: FireAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(FireAnimation,
+ 4,
+ &be_class_Animation,
+ be_nested_map(14,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(heat_map, -1), be_const_var(0) },
+ { be_const_key_weak(start, -1), be_const_closure(class_FireAnimation_start_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_FireAnimation_init_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_FireAnimation_tostring_closure) },
+ { be_const_key_weak(random_seed, -1), be_const_var(3) },
+ { be_const_key_weak(render, 9), be_const_closure(class_FireAnimation_render_closure) },
+ { be_const_key_weak(update, -1), be_const_closure(class_FireAnimation_update_closure) },
+ { be_const_key_weak(last_update, -1), be_const_var(2) },
+ { be_const_key_weak(_initialize_buffers, 6), be_const_closure(class_FireAnimation__initialize_buffers_closure) },
+ { be_const_key_weak(PARAMS, 10), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(flicker_amount, 4), be_const_bytes_instance(07000001FF000064) },
+ { be_const_key_weak(intensity, 0), be_const_bytes_instance(07000001FF0001B400) },
+ { be_const_key_weak(flicker_speed, -1), be_const_bytes_instance(07000100140008) },
+ { be_const_key_weak(sparking_rate, -1), be_const_bytes_instance(07000001FF000078) },
+ { be_const_key_weak(cooling_rate, -1), be_const_bytes_instance(07000001FF000037) },
+ })) ) } )) },
+ { be_const_key_weak(_random, 2), be_const_closure(class_FireAnimation__random_closure) },
+ { be_const_key_weak(current_colors, -1), be_const_var(1) },
+ { be_const_key_weak(_update_fire_simulation, -1), be_const_closure(class_FireAnimation__update_fire_simulation_closure) },
+ { be_const_key_weak(_random_range, 1), be_const_closure(class_FireAnimation__random_range_closure) },
+ })),
+ be_str_weak(FireAnimation)
+);
+
+/********************************************************************
+** Solidified function: create_closure_value
+********************************************************************/
+be_local_closure(create_closure_value, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(closure_value),
+ /* K2 */ be_nested_str_weak(closure),
+ }),
+ be_str_weak(create_closure_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100000, // 0002 MOVE R4 R0
+ 0x7C080400, // 0003 CALL R2 2
+ 0x900A0401, // 0004 SETMBR R2 K2 R1
+ 0x80040400, // 0005 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'CometAnimation' ktab size: 24, total: 42 (saved 144 bytes)
+static const bvalue be_ktab_class_CometAnimation[24] = {
+ /* K0 */ be_nested_str_weak(speed),
+ /* K1 */ be_nested_str_weak(direction),
+ /* K2 */ be_nested_str_weak(wrap_around),
+ /* K3 */ be_nested_str_weak(engine),
+ /* K4 */ be_nested_str_weak(strip_length),
+ /* K5 */ be_nested_str_weak(start_time),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(head_position),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(init),
+ /* K10 */ be_nested_str_weak(animation),
+ /* K11 */ be_nested_str_weak(is_value_provider),
+ /* K12 */ be_nested_str_weak(color),
+ /* K13 */ be_nested_str_weak(0x_X2508x),
+ /* K14 */ be_nested_str_weak(CometAnimation_X28color_X3D_X25s_X2C_X20head_pos_X3D_X25_X2E1f_X2C_X20tail_length_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20direction_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K15 */ be_nested_str_weak(tail_length),
+ /* K16 */ be_nested_str_weak(priority),
+ /* K17 */ be_nested_str_weak(is_running),
+ /* K18 */ be_nested_str_weak(fade_factor),
+ /* K19 */ be_nested_str_weak(tasmota),
+ /* K20 */ be_nested_str_weak(scale_uint),
+ /* K21 */ be_nested_str_weak(width),
+ /* K22 */ be_nested_str_weak(set_pixel_color),
+ /* K23 */ be_nested_str_weak(on_param_changed),
+};
+
+
+extern const bclass be_class_CometAnimation;
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_CometAnimation_update, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CometAnimation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[56]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x88100102, // 0002 GETMBR R4 R0 K2
+ 0x88140103, // 0003 GETMBR R5 R0 K3
+ 0x88140B04, // 0004 GETMBR R5 R5 K4
+ 0x88180105, // 0005 GETMBR R6 R0 K5
+ 0x04180206, // 0006 SUB R6 R1 R6
+ 0x081C0406, // 0007 MUL R7 R2 R6
+ 0x081C0E03, // 0008 MUL R7 R7 R3
+ 0x542203E7, // 0009 LDINT R8 1000
+ 0x0C1C0E08, // 000A DIV R7 R7 R8
+ 0x24200706, // 000B GT R8 R3 K6
+ 0x78220001, // 000C JMPF R8 #000F
+ 0x90020E07, // 000D SETMBR R0 K7 R7
+ 0x70020004, // 000E JMP #0014
+ 0x04200B08, // 000F SUB R8 R5 K8
+ 0x542600FF, // 0010 LDINT R9 256
+ 0x08201009, // 0011 MUL R8 R8 R9
+ 0x00201007, // 0012 ADD R8 R8 R7
+ 0x90020E08, // 0013 SETMBR R0 K7 R8
+ 0x542200FF, // 0014 LDINT R8 256
+ 0x08200A08, // 0015 MUL R8 R5 R8
+ 0x20240906, // 0016 NE R9 R4 K6
+ 0x7826000E, // 0017 JMPF R9 #0027
+ 0x88240107, // 0018 GETMBR R9 R0 K7
+ 0x28241208, // 0019 GE R9 R9 R8
+ 0x78260003, // 001A JMPF R9 #001F
+ 0x88240107, // 001B GETMBR R9 R0 K7
+ 0x04241208, // 001C SUB R9 R9 R8
+ 0x90020E09, // 001D SETMBR R0 K7 R9
+ 0x7001FFF8, // 001E JMP #0018
+ 0x88240107, // 001F GETMBR R9 R0 K7
+ 0x14241306, // 0020 LT R9 R9 K6
+ 0x78260003, // 0021 JMPF R9 #0026
+ 0x88240107, // 0022 GETMBR R9 R0 K7
+ 0x00241208, // 0023 ADD R9 R9 R8
+ 0x90020E09, // 0024 SETMBR R0 K7 R9
+ 0x7001FFF8, // 0025 JMP #001F
+ 0x7002000F, // 0026 JMP #0037
+ 0x88240107, // 0027 GETMBR R9 R0 K7
+ 0x28241208, // 0028 GE R9 R9 R8
+ 0x78260006, // 0029 JMPF R9 #0031
+ 0x04240B08, // 002A SUB R9 R5 K8
+ 0x542A00FF, // 002B LDINT R10 256
+ 0x0824120A, // 002C MUL R9 R9 R10
+ 0x90020E09, // 002D SETMBR R0 K7 R9
+ 0x44240600, // 002E NEG R9 R3
+ 0x90020209, // 002F SETMBR R0 K1 R9
+ 0x70020005, // 0030 JMP #0037
+ 0x88240107, // 0031 GETMBR R9 R0 K7
+ 0x14241306, // 0032 LT R9 R9 K6
+ 0x78260002, // 0033 JMPF R9 #0037
+ 0x90020F06, // 0034 SETMBR R0 K7 K6
+ 0x44240600, // 0035 NEG R9 R3
+ 0x90020209, // 0036 SETMBR R0 K1 R9
+ 0x80000000, // 0037 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_CometAnimation_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CometAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080509, // 0003 GETMET R2 R2 K9
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x90020F06, // 0006 SETMBR R0 K7 K6
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_CometAnimation_tostring, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CometAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0xB80A1400, // 0001 GETNGBL R2 K10
+ 0x8C08050B, // 0002 GETMET R2 R2 K11
+ 0x8810010C, // 0003 GETMBR R4 R0 K12
+ 0x7C080400, // 0004 CALL R2 2
+ 0x780A0004, // 0005 JMPF R2 #000B
+ 0x60080008, // 0006 GETGBL R2 G8
+ 0x880C010C, // 0007 GETMBR R3 R0 K12
+ 0x7C080200, // 0008 CALL R2 1
+ 0x5C040400, // 0009 MOVE R1 R2
+ 0x70020004, // 000A JMP #0010
+ 0x60080018, // 000B GETGBL R2 G24
+ 0x580C000D, // 000C LDCONST R3 K13
+ 0x8810010C, // 000D GETMBR R4 R0 K12
+ 0x7C080400, // 000E CALL R2 2
+ 0x5C040400, // 000F MOVE R1 R2
+ 0x60080018, // 0010 GETGBL R2 G24
+ 0x580C000E, // 0011 LDCONST R3 K14
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x88140107, // 0013 GETMBR R5 R0 K7
+ 0x541A00FF, // 0014 LDINT R6 256
+ 0x0C140A06, // 0015 DIV R5 R5 R6
+ 0x8818010F, // 0016 GETMBR R6 R0 K15
+ 0x881C0100, // 0017 GETMBR R7 R0 K0
+ 0x88200101, // 0018 GETMBR R8 R0 K1
+ 0x88240110, // 0019 GETMBR R9 R0 K16
+ 0x88280111, // 001A GETMBR R10 R0 K17
+ 0x7C081000, // 001B CALL R2 8
+ 0x80040400, // 001C RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_CometAnimation_render, /* name */
+ be_nested_proto(
+ 25, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CometAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[83]) { /* code */
+ 0x88100107, // 0000 GETMBR R4 R0 K7
+ 0x541600FF, // 0001 LDINT R5 256
+ 0x0C100805, // 0002 DIV R4 R4 R5
+ 0x8814010C, // 0003 GETMBR R5 R0 K12
+ 0x8818010F, // 0004 GETMBR R6 R0 K15
+ 0x881C0101, // 0005 GETMBR R7 R0 K1
+ 0x88200102, // 0006 GETMBR R8 R0 K2
+ 0x88240112, // 0007 GETMBR R9 R0 K18
+ 0x542A0017, // 0008 LDINT R10 24
+ 0x3C280A0A, // 0009 SHR R10 R5 R10
+ 0x542E00FE, // 000A LDINT R11 255
+ 0x2C28140B, // 000B AND R10 R10 R11
+ 0x542E000F, // 000C LDINT R11 16
+ 0x3C2C0A0B, // 000D SHR R11 R5 R11
+ 0x543200FE, // 000E LDINT R12 255
+ 0x2C2C160C, // 000F AND R11 R11 R12
+ 0x54320007, // 0010 LDINT R12 8
+ 0x3C300A0C, // 0011 SHR R12 R5 R12
+ 0x543600FE, // 0012 LDINT R13 255
+ 0x2C30180D, // 0013 AND R12 R12 R13
+ 0x543600FE, // 0014 LDINT R13 255
+ 0x2C340A0D, // 0015 AND R13 R5 R13
+ 0x58380006, // 0016 LDCONST R14 K6
+ 0x143C1C06, // 0017 LT R15 R14 R6
+ 0x783E0037, // 0018 JMPF R15 #0051
+ 0x083C1C07, // 0019 MUL R15 R14 R7
+ 0x043C080F, // 001A SUB R15 R4 R15
+ 0x20401106, // 001B NE R16 R8 K6
+ 0x78420008, // 001C JMPF R16 #0026
+ 0x28401E03, // 001D GE R16 R15 R3
+ 0x78420001, // 001E JMPF R16 #0021
+ 0x043C1E03, // 001F SUB R15 R15 R3
+ 0x7001FFFB, // 0020 JMP #001D
+ 0x14401F06, // 0021 LT R16 R15 K6
+ 0x78420001, // 0022 JMPF R16 #0025
+ 0x003C1E03, // 0023 ADD R15 R15 R3
+ 0x7001FFFB, // 0024 JMP #0021
+ 0x70020005, // 0025 JMP #002C
+ 0x14401F06, // 0026 LT R16 R15 K6
+ 0x74420001, // 0027 JMPT R16 #002A
+ 0x28401E03, // 0028 GE R16 R15 R3
+ 0x78420001, // 0029 JMPF R16 #002C
+ 0x00381D08, // 002A ADD R14 R14 K8
+ 0x7001FFEA, // 002B JMP #0017
+ 0x544200FE, // 002C LDINT R16 255
+ 0x24441D06, // 002D GT R17 R14 K6
+ 0x7846000D, // 002E JMPF R17 #003D
+ 0x58440006, // 002F LDCONST R17 K6
+ 0x1448220E, // 0030 LT R18 R17 R14
+ 0x784A000A, // 0031 JMPF R18 #003D
+ 0xB84A2600, // 0032 GETNGBL R18 K19
+ 0x8C482514, // 0033 GETMET R18 R18 K20
+ 0x5C502000, // 0034 MOVE R20 R16
+ 0x58540006, // 0035 LDCONST R21 K6
+ 0x545A00FE, // 0036 LDINT R22 255
+ 0x585C0006, // 0037 LDCONST R23 K6
+ 0x5C601200, // 0038 MOVE R24 R9
+ 0x7C480C00, // 0039 CALL R18 6
+ 0x5C402400, // 003A MOVE R16 R18
+ 0x00442308, // 003B ADD R17 R17 K8
+ 0x7001FFF2, // 003C JMP #0030
+ 0x54460017, // 003D LDINT R17 24
+ 0x38442011, // 003E SHL R17 R16 R17
+ 0x544A000F, // 003F LDINT R18 16
+ 0x38481612, // 0040 SHL R18 R11 R18
+ 0x30442212, // 0041 OR R17 R17 R18
+ 0x544A0007, // 0042 LDINT R18 8
+ 0x38481812, // 0043 SHL R18 R12 R18
+ 0x30442212, // 0044 OR R17 R17 R18
+ 0x3044220D, // 0045 OR R17 R17 R13
+ 0x28481F06, // 0046 GE R18 R15 K6
+ 0x784A0006, // 0047 JMPF R18 #004F
+ 0x88480315, // 0048 GETMBR R18 R1 K21
+ 0x14481E12, // 0049 LT R18 R15 R18
+ 0x784A0003, // 004A JMPF R18 #004F
+ 0x8C480316, // 004B GETMET R18 R1 K22
+ 0x5C501E00, // 004C MOVE R20 R15
+ 0x5C542200, // 004D MOVE R21 R17
+ 0x7C480600, // 004E CALL R18 3
+ 0x00381D08, // 004F ADD R14 R14 K8
+ 0x7001FFC5, // 0050 JMP #0017
+ 0x503C0200, // 0051 LDBOOL R15 1 0
+ 0x80041E00, // 0052 RET 1 R15
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_CometAnimation_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CometAnimation, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0717, // 0003 GETMET R3 R3 K23
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C0301, // 0007 EQ R3 R1 K1
+ 0x780E0009, // 0008 JMPF R3 #0013
+ 0x880C0103, // 0009 GETMBR R3 R0 K3
+ 0x880C0704, // 000A GETMBR R3 R3 K4
+ 0x24100506, // 000B GT R4 R2 K6
+ 0x78120001, // 000C JMPF R4 #000F
+ 0x90020F06, // 000D SETMBR R0 K7 K6
+ 0x70020003, // 000E JMP #0013
+ 0x04100708, // 000F SUB R4 R3 K8
+ 0x541600FF, // 0010 LDINT R5 256
+ 0x08100805, // 0011 MUL R4 R4 R5
+ 0x90020E04, // 0012 SETMBR R0 K7 R4
+ 0x80000000, // 0013 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: CometAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(CometAnimation,
+ 1,
+ &be_class_Animation,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(class_CometAnimation_init_closure) },
+ { be_const_key_weak(update, -1), be_const_closure(class_CometAnimation_update_closure) },
+ { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(fade_factor, -1), be_const_bytes_instance(07000001FF0001B300) },
+ { be_const_key_weak(wrap_around, -1), be_const_bytes_instance(07000000010001) },
+ { be_const_key_weak(direction, -1), be_const_bytes_instance(1400010200FF0001) },
+ { be_const_key_weak(speed, 0), be_const_bytes_instance(07000101006401000A) },
+ { be_const_key_weak(tail_length, -1), be_const_bytes_instance(07000100320005) },
+ })) ) } )) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_CometAnimation_tostring_closure) },
+ { be_const_key_weak(render, 0), be_const_closure(class_CometAnimation_render_closure) },
+ { be_const_key_weak(head_position, 2), be_const_var(0) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_CometAnimation_on_param_changed_closure) },
+ })),
+ be_str_weak(CometAnimation)
+);
+
+/********************************************************************
+** Solidified function: animation_init
+********************************************************************/
+be_local_closure(animation_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(introspect),
+ /* K2 */ be_nested_str_weak(contains),
+ /* K3 */ be_nested_str_weak(_ntv),
+ /* K4 */ be_nested_str_weak(undefined),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x8C0C0502, // 0002 GETMET R3 R2 K2
+ 0x88140303, // 0003 GETMBR R5 R1 K3
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C0C0600, // 0005 CALL R3 3
+ 0x780E0003, // 0006 JMPF R3 #000B
+ 0x880C0303, // 0007 GETMBR R3 R1 K3
+ 0x880C0600, // 0008 GETMBR R3 R3 R0
+ 0x80040600, // 0009 RET 1 R3
+ 0x70020003, // 000A JMP #000F
+ 0x600C000B, // 000B GETGBL R3 G11
+ 0x58100004, // 000C LDCONST R4 K4
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x80040600, // 000E RET 1 R3
+ 0x80000000, // 000F RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(_ntv),
+ /* K2 */ be_nested_str_weak(event_manager),
+ /* K3 */ be_nested_str_weak(EventManager),
+ /* K4 */ be_nested_str_weak(member),
+ /* K5 */ be_nested_str_weak(_user_functions),
+ }),
+ be_str_weak(animation_init),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x6004000B, // 0000 GETGBL R1 G11
+ 0x58080000, // 0001 LDCONST R2 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x90060200, // 0003 SETMBR R1 K1 R0
+ 0x8C080103, // 0004 GETMET R2 R0 K3
+ 0x7C080200, // 0005 CALL R2 1
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x84080000, // 0007 CLOSURE R2 P0
+ 0x90060802, // 0008 SETMBR R1 K4 R2
+ 0x60080013, // 0009 GETGBL R2 G19
+ 0x7C080000, // 000A CALL R2 0
+ 0x90060A02, // 000B SETMBR R1 K5 R2
+ 0x80040200, // 000C RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: solid
+********************************************************************/
+be_local_closure(solid, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ }),
+ be_str_weak(solid),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040300, // 0001 GETMET R1 R1 K0
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80040200, // 0004 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: pulsating_animation
+********************************************************************/
+be_local_closure(pulsating_animation, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(breathe_animation),
+ /* K2 */ be_nested_str_weak(curve_factor),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_nested_str_weak(period),
+ }),
+ be_str_weak(pulsating_animation),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x90060503, // 0004 SETMBR R1 K2 K3
+ 0x540A03E7, // 0005 LDINT R2 1000
+ 0x90060802, // 0006 SETMBR R1 K4 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: gradient_rainbow_radial
********************************************************************/
@@ -5362,214 +11430,63 @@ be_local_class(OscillatorValueProvider,
})),
be_str_weak(OscillatorValueProvider)
);
-
-/********************************************************************
-** Solidified function: rich_palette_rainbow
-********************************************************************/
-be_local_closure(rich_palette_rainbow, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(00FF000024FFA50049FFFF006E00FF00920000FFB74B0082DBEE82EEFFFF0000),
- /* K1 */ be_nested_str_weak(animation),
- /* K2 */ be_nested_str_weak(rich_palette),
- /* K3 */ be_nested_str_weak(palette),
- }),
- be_str_weak(rich_palette_rainbow),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x60040015, // 0000 GETGBL R1 G21
- 0x58080000, // 0001 LDCONST R2 K0
- 0x7C040200, // 0002 CALL R1 1
- 0xB80A0200, // 0003 GETNGBL R2 K1
- 0x8C080502, // 0004 GETMET R2 R2 K2
- 0x5C100000, // 0005 MOVE R4 R0
- 0x7C080400, // 0006 CALL R2 2
- 0x900A0601, // 0007 SETMBR R2 K3 R1
- 0x80040400, // 0008 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: animation_init_strip
-********************************************************************/
-be_local_closure(animation_init_strip, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 1, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(global),
- /* K1 */ be_nested_str_weak(animation),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(contains),
- /* K4 */ be_nested_str_weak(_engines),
- /* K5 */ be_nested_str_weak(find),
- /* K6 */ be_nested_str_weak(stop),
- /* K7 */ be_nested_str_weak(clear),
- /* K8 */ be_nested_str_weak(Leds),
- /* K9 */ be_nested_str_weak(create_engine),
- }),
- be_str_weak(animation_init_strip),
- &be_const_str_solidified,
- ( &(const binstruction[37]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xA40E0400, // 0002 IMPORT R3 K2
- 0x8C100703, // 0003 GETMET R4 R3 K3
- 0x5C180400, // 0004 MOVE R6 R2
- 0x581C0004, // 0005 LDCONST R7 K4
- 0x7C100600, // 0006 CALL R4 3
- 0x74120002, // 0007 JMPT R4 #000B
- 0x60100013, // 0008 GETGBL R4 G19
- 0x7C100000, // 0009 CALL R4 0
- 0x900A0804, // 000A SETMBR R2 K4 R4
- 0x60100008, // 000B GETGBL R4 G8
- 0x5C140000, // 000C MOVE R5 R0
- 0x7C100200, // 000D CALL R4 1
- 0x88140504, // 000E GETMBR R5 R2 K4
- 0x8C140B05, // 000F GETMET R5 R5 K5
- 0x5C1C0800, // 0010 MOVE R7 R4
- 0x7C140400, // 0011 CALL R5 2
- 0x4C180000, // 0012 LDNIL R6
- 0x20180A06, // 0013 NE R6 R5 R6
- 0x781A0004, // 0014 JMPF R6 #001A
- 0x8C180B06, // 0015 GETMET R6 R5 K6
- 0x7C180200, // 0016 CALL R6 1
- 0x8C180B07, // 0017 GETMET R6 R5 K7
- 0x7C180200, // 0018 CALL R6 1
- 0x70020009, // 0019 JMP #0024
- 0x60180016, // 001A GETGBL R6 G22
- 0x881C0308, // 001B GETMBR R7 R1 K8
- 0x5C200000, // 001C MOVE R8 R0
- 0x7C180400, // 001D CALL R6 2
- 0x8C1C0509, // 001E GETMET R7 R2 K9
- 0x5C240C00, // 001F MOVE R9 R6
- 0x7C1C0400, // 0020 CALL R7 2
- 0x5C140E00, // 0021 MOVE R5 R7
- 0x881C0504, // 0022 GETMBR R7 R2 K4
- 0x981C0805, // 0023 SETIDX R7 R4 R5
- 0x80040A00, // 0024 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sine_osc
-********************************************************************/
-be_local_closure(sine_osc, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(SINE),
- }),
- be_str_weak(sine_osc),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: bounce
-********************************************************************/
-be_local_closure(bounce, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(BOUNCE),
- }),
- be_str_weak(bounce),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'RichPaletteAnimation' ktab size: 15, total: 19 (saved 32 bytes)
-static const bvalue be_ktab_class_RichPaletteAnimation[15] = {
- /* K0 */ be_nested_str_weak(on_param_changed),
- /* K1 */ be_nested_str_weak(palette),
- /* K2 */ be_nested_str_weak(cycle_period),
- /* K3 */ be_nested_str_weak(transition_type),
- /* K4 */ be_nested_str_weak(brightness),
- /* K5 */ be_nested_str_weak(color_provider),
- /* K6 */ be_nested_str_weak(set_param),
- /* K7 */ be_nested_str_weak(RichPaletteAnimation_X28cycle_period_X3D_X25s_X2C_X20brightness_X3D_X25s_X29),
- /* K8 */ be_nested_str_weak(RichPaletteAnimation_X28uninitialized_X29),
- /* K9 */ be_nested_str_weak(init),
- /* K10 */ be_nested_str_weak(animation),
- /* K11 */ be_nested_str_weak(rich_palette),
- /* K12 */ be_nested_str_weak(values),
- /* K13 */ be_nested_str_weak(color),
- /* K14 */ be_nested_str_weak(start),
+// compact class 'CompositeColorProvider' ktab size: 16, total: 28 (saved 96 bytes)
+static const bvalue be_ktab_class_CompositeColorProvider[16] = {
+ /* K0 */ be_nested_str_weak(providers),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_nested_str_weak(get_color_for_value),
+ /* K5 */ be_nested_str_weak(brightness),
+ /* K6 */ be_nested_str_weak(apply_brightness),
+ /* K7 */ be_nested_str_weak(_blend_colors),
+ /* K8 */ be_nested_str_weak(produce_value),
+ /* K9 */ be_nested_str_weak(CompositeColorProvider_X28providers_X3D_X25s_X2C_X20blend_mode_X3D_X25s_X29),
+ /* K10 */ be_nested_str_weak(blend_mode),
+ /* K11 */ be_const_real_hex(0x437F0000),
+ /* K12 */ be_const_int(2),
+ /* K13 */ be_nested_str_weak(tasmota),
+ /* K14 */ be_nested_str_weak(scale_uint),
+ /* K15 */ be_nested_str_weak(init),
};
-extern const bclass be_class_RichPaletteAnimation;
+extern const bclass be_class_CompositeColorProvider;
/********************************************************************
-** Solidified function: on_param_changed
+** Solidified function: add_provider
********************************************************************/
-be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */
+be_local_closure(class_CompositeColorProvider_add_provider, /* name */
be_nested_proto(
- 7, /* nstack */
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
+ be_str_weak(add_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80040000, // 0004 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_color_for_value
+********************************************************************/
+be_local_closure(class_CompositeColorProvider_get_color_for_value, /* name */
+ be_nested_proto(
+ 10, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -5577,39 +11494,159 @@ be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_RichPaletteAnimation, /* shared constants */
- be_str_weak(on_param_changed),
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
+ be_str_weak(get_color_for_value),
&be_const_str_solidified,
- ( &(const binstruction[29]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
+ ( &(const binstruction[63]) { /* code */
+ 0x600C000C, // 0000 GETGBL R3 G12
+ 0x88100100, // 0001 GETMBR R4 R0 K0
0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0700, // 0003 GETMET R3 R3 K0
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0301, // 0007 EQ R3 R1 K1
- 0x740E0005, // 0008 JMPT R3 #000F
- 0x1C0C0302, // 0009 EQ R3 R1 K2
- 0x740E0003, // 000A JMPT R3 #000F
- 0x1C0C0303, // 000B EQ R3 R1 K3
- 0x740E0001, // 000C JMPT R3 #000F
- 0x1C0C0304, // 000D EQ R3 R1 K4
- 0x780E0005, // 000E JMPF R3 #0015
- 0x880C0105, // 000F GETMBR R3 R0 K5
- 0x8C0C0706, // 0010 GETMET R3 R3 K6
- 0x5C140200, // 0011 MOVE R5 R1
- 0x5C180400, // 0012 MOVE R6 R2
- 0x7C0C0600, // 0013 CALL R3 3
- 0x70020006, // 0014 JMP #001C
- 0x600C0003, // 0015 GETGBL R3 G3
- 0x5C100000, // 0016 MOVE R4 R0
- 0x7C0C0200, // 0017 CALL R3 1
- 0x8C0C0700, // 0018 GETMET R3 R3 K0
- 0x5C140200, // 0019 MOVE R5 R1
- 0x5C180400, // 001A MOVE R6 R2
- 0x7C0C0600, // 001B CALL R3 3
- 0x80000000, // 001C RET 0
+ 0x1C0C0702, // 0003 EQ R3 R3 K2
+ 0x780E0001, // 0004 JMPF R3 #0007
+ 0x540DFFFE, // 0005 LDINT R3 -1
+ 0x80040600, // 0006 RET 1 R3
+ 0x600C000C, // 0007 GETGBL R3 G12
+ 0x88100100, // 0008 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x1C0C0703, // 000A EQ R3 R3 K3
+ 0x780E000F, // 000B JMPF R3 #001C
+ 0x880C0100, // 000C GETMBR R3 R0 K0
+ 0x940C0702, // 000D GETIDX R3 R3 K2
+ 0x8C0C0704, // 000E GETMET R3 R3 K4
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x5C180400, // 0010 MOVE R6 R2
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x88100105, // 0012 GETMBR R4 R0 K5
+ 0x541600FE, // 0013 LDINT R5 255
+ 0x20140805, // 0014 NE R5 R4 R5
+ 0x78160004, // 0015 JMPF R5 #001B
+ 0x8C140106, // 0016 GETMET R5 R0 K6
+ 0x5C1C0600, // 0017 MOVE R7 R3
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x7C140600, // 0019 CALL R5 3
+ 0x80040A00, // 001A RET 1 R5
+ 0x80040600, // 001B RET 1 R3
+ 0x880C0100, // 001C GETMBR R3 R0 K0
+ 0x940C0702, // 001D GETIDX R3 R3 K2
+ 0x8C0C0704, // 001E GETMET R3 R3 K4
+ 0x5C140200, // 001F MOVE R5 R1
+ 0x5C180400, // 0020 MOVE R6 R2
+ 0x7C0C0600, // 0021 CALL R3 3
+ 0x58100003, // 0022 LDCONST R4 K3
+ 0x6014000C, // 0023 GETGBL R5 G12
+ 0x88180100, // 0024 GETMBR R6 R0 K0
+ 0x7C140200, // 0025 CALL R5 1
+ 0x14140805, // 0026 LT R5 R4 R5
+ 0x7816000C, // 0027 JMPF R5 #0035
+ 0x88140100, // 0028 GETMBR R5 R0 K0
+ 0x94140A04, // 0029 GETIDX R5 R5 R4
+ 0x8C140B04, // 002A GETMET R5 R5 K4
+ 0x5C1C0200, // 002B MOVE R7 R1
+ 0x5C200400, // 002C MOVE R8 R2
+ 0x7C140600, // 002D CALL R5 3
+ 0x8C180107, // 002E GETMET R6 R0 K7
+ 0x5C200600, // 002F MOVE R8 R3
+ 0x5C240A00, // 0030 MOVE R9 R5
+ 0x7C180600, // 0031 CALL R6 3
+ 0x5C0C0C00, // 0032 MOVE R3 R6
+ 0x00100903, // 0033 ADD R4 R4 K3
+ 0x7001FFED, // 0034 JMP #0023
+ 0x88140105, // 0035 GETMBR R5 R0 K5
+ 0x541A00FE, // 0036 LDINT R6 255
+ 0x20180A06, // 0037 NE R6 R5 R6
+ 0x781A0004, // 0038 JMPF R6 #003E
+ 0x8C180106, // 0039 GETMET R6 R0 K6
+ 0x5C200600, // 003A MOVE R8 R3
+ 0x5C240A00, // 003B MOVE R9 R5
+ 0x7C180600, // 003C CALL R6 3
+ 0x80040C00, // 003D RET 1 R6
+ 0x80040600, // 003E RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_CompositeColorProvider_produce_value, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[63]) { /* code */
+ 0x600C000C, // 0000 GETGBL R3 G12
+ 0x88100100, // 0001 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x1C0C0702, // 0003 EQ R3 R3 K2
+ 0x780E0001, // 0004 JMPF R3 #0007
+ 0x540DFFFE, // 0005 LDINT R3 -1
+ 0x80040600, // 0006 RET 1 R3
+ 0x600C000C, // 0007 GETGBL R3 G12
+ 0x88100100, // 0008 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x1C0C0703, // 000A EQ R3 R3 K3
+ 0x780E000F, // 000B JMPF R3 #001C
+ 0x880C0100, // 000C GETMBR R3 R0 K0
+ 0x940C0702, // 000D GETIDX R3 R3 K2
+ 0x8C0C0708, // 000E GETMET R3 R3 K8
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x5C180400, // 0010 MOVE R6 R2
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x88100105, // 0012 GETMBR R4 R0 K5
+ 0x541600FE, // 0013 LDINT R5 255
+ 0x20140805, // 0014 NE R5 R4 R5
+ 0x78160004, // 0015 JMPF R5 #001B
+ 0x8C140106, // 0016 GETMET R5 R0 K6
+ 0x5C1C0600, // 0017 MOVE R7 R3
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x7C140600, // 0019 CALL R5 3
+ 0x80040A00, // 001A RET 1 R5
+ 0x80040600, // 001B RET 1 R3
+ 0x880C0100, // 001C GETMBR R3 R0 K0
+ 0x940C0702, // 001D GETIDX R3 R3 K2
+ 0x8C0C0708, // 001E GETMET R3 R3 K8
+ 0x5C140200, // 001F MOVE R5 R1
+ 0x5C180400, // 0020 MOVE R6 R2
+ 0x7C0C0600, // 0021 CALL R3 3
+ 0x58100003, // 0022 LDCONST R4 K3
+ 0x6014000C, // 0023 GETGBL R5 G12
+ 0x88180100, // 0024 GETMBR R6 R0 K0
+ 0x7C140200, // 0025 CALL R5 1
+ 0x14140805, // 0026 LT R5 R4 R5
+ 0x7816000C, // 0027 JMPF R5 #0035
+ 0x88140100, // 0028 GETMBR R5 R0 K0
+ 0x94140A04, // 0029 GETIDX R5 R5 R4
+ 0x8C140B08, // 002A GETMET R5 R5 K8
+ 0x5C1C0200, // 002B MOVE R7 R1
+ 0x5C200400, // 002C MOVE R8 R2
+ 0x7C140600, // 002D CALL R5 3
+ 0x8C180107, // 002E GETMET R6 R0 K7
+ 0x5C200600, // 002F MOVE R8 R3
+ 0x5C240A00, // 0030 MOVE R9 R5
+ 0x7C180600, // 0031 CALL R6 3
+ 0x5C0C0C00, // 0032 MOVE R3 R6
+ 0x00100903, // 0033 ADD R4 R4 K3
+ 0x7001FFED, // 0034 JMP #0023
+ 0x88140105, // 0035 GETMBR R5 R0 K5
+ 0x541A00FE, // 0036 LDINT R6 255
+ 0x20180A06, // 0037 NE R6 R5 R6
+ 0x781A0004, // 0038 JMPF R6 #003E
+ 0x8C180106, // 0039 GETMET R6 R0 K6
+ 0x5C200600, // 003A MOVE R8 R3
+ 0x5C240A00, // 003B MOVE R9 R5
+ 0x7C180600, // 003C CALL R6 3
+ 0x80040C00, // 003D RET 1 R6
+ 0x80040600, // 003E RET 1 R3
})
)
);
@@ -5619,7 +11656,7 @@ be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */
/********************************************************************
** Solidified function: tostring
********************************************************************/
-be_local_closure(class_RichPaletteAnimation_tostring, /* name */
+be_local_closure(class_CompositeColorProvider_tostring, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
@@ -5629,26 +11666,192 @@ be_local_closure(class_RichPaletteAnimation_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0xA8020008, // 0000 EXBLK 0 #000A
- 0x60040018, // 0001 GETGBL R1 G24
- 0x58080007, // 0002 LDCONST R2 K7
- 0x880C0102, // 0003 GETMBR R3 R0 K2
- 0x88100104, // 0004 GETMBR R4 R0 K4
- 0x7C040600, // 0005 CALL R1 3
- 0xA8040001, // 0006 EXBLK 1 1
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080009, // 0001 LDCONST R2 K9
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x88100100, // 0003 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x8810010A, // 0005 GETMBR R4 R0 K10
+ 0x7C040600, // 0006 CALL R1 3
0x80040200, // 0007 RET 1 R1
- 0xA8040001, // 0008 EXBLK 1 1
- 0x70020004, // 0009 JMP #000F
- 0xAC040000, // 000A CATCH R1 0 0
- 0x70020001, // 000B JMP #000E
- 0x80061000, // 000C RET 1 K8
- 0x70020000, // 000D JMP #000F
- 0xB0080000, // 000E RAISE 2 R0 R0
- 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _blend_colors
+********************************************************************/
+be_local_closure(class_CompositeColorProvider__blend_colors, /* name */
+ be_nested_proto(
+ 23, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
+ be_str_weak(_blend_colors),
+ &be_const_str_solidified,
+ ( &(const binstruction[151]) { /* code */
+ 0x880C010A, // 0000 GETMBR R3 R0 K10
+ 0x54120017, // 0001 LDINT R4 24
+ 0x3C100204, // 0002 SHR R4 R1 R4
+ 0x541600FE, // 0003 LDINT R5 255
+ 0x2C100805, // 0004 AND R4 R4 R5
+ 0x5416000F, // 0005 LDINT R5 16
+ 0x3C140205, // 0006 SHR R5 R1 R5
+ 0x541A00FE, // 0007 LDINT R6 255
+ 0x2C140A06, // 0008 AND R5 R5 R6
+ 0x541A0007, // 0009 LDINT R6 8
+ 0x3C180206, // 000A SHR R6 R1 R6
+ 0x541E00FE, // 000B LDINT R7 255
+ 0x2C180C07, // 000C AND R6 R6 R7
+ 0x541E00FE, // 000D LDINT R7 255
+ 0x2C1C0207, // 000E AND R7 R1 R7
+ 0x54220017, // 000F LDINT R8 24
+ 0x3C200408, // 0010 SHR R8 R2 R8
+ 0x542600FE, // 0011 LDINT R9 255
+ 0x2C201009, // 0012 AND R8 R8 R9
+ 0x5426000F, // 0013 LDINT R9 16
+ 0x3C240409, // 0014 SHR R9 R2 R9
+ 0x542A00FE, // 0015 LDINT R10 255
+ 0x2C24120A, // 0016 AND R9 R9 R10
+ 0x542A0007, // 0017 LDINT R10 8
+ 0x3C28040A, // 0018 SHR R10 R2 R10
+ 0x542E00FE, // 0019 LDINT R11 255
+ 0x2C28140B, // 001A AND R10 R10 R11
+ 0x542E00FE, // 001B LDINT R11 255
+ 0x2C2C040B, // 001C AND R11 R2 R11
+ 0x4C300000, // 001D LDNIL R12
+ 0x4C340000, // 001E LDNIL R13
+ 0x4C380000, // 001F LDNIL R14
+ 0x4C3C0000, // 0020 LDNIL R15
+ 0x1C400702, // 0021 EQ R16 R3 K2
+ 0x7842001C, // 0022 JMPF R16 #0040
+ 0x0C40110B, // 0023 DIV R16 R8 K11
+ 0x60440009, // 0024 GETGBL R17 G9
+ 0x044A0610, // 0025 SUB R18 K3 R16
+ 0x08480E12, // 0026 MUL R18 R7 R18
+ 0x084C1610, // 0027 MUL R19 R11 R16
+ 0x00482413, // 0028 ADD R18 R18 R19
+ 0x7C440200, // 0029 CALL R17 1
+ 0x5C342200, // 002A MOVE R13 R17
+ 0x60440009, // 002B GETGBL R17 G9
+ 0x044A0610, // 002C SUB R18 K3 R16
+ 0x08480C12, // 002D MUL R18 R6 R18
+ 0x084C1410, // 002E MUL R19 R10 R16
+ 0x00482413, // 002F ADD R18 R18 R19
+ 0x7C440200, // 0030 CALL R17 1
+ 0x5C382200, // 0031 MOVE R14 R17
+ 0x60440009, // 0032 GETGBL R17 G9
+ 0x044A0610, // 0033 SUB R18 K3 R16
+ 0x08480A12, // 0034 MUL R18 R5 R18
+ 0x084C1210, // 0035 MUL R19 R9 R16
+ 0x00482413, // 0036 ADD R18 R18 R19
+ 0x7C440200, // 0037 CALL R17 1
+ 0x5C3C2200, // 0038 MOVE R15 R17
+ 0x24440808, // 0039 GT R17 R4 R8
+ 0x78460001, // 003A JMPF R17 #003D
+ 0x5C440800, // 003B MOVE R17 R4
+ 0x70020000, // 003C JMP #003E
+ 0x5C441000, // 003D MOVE R17 R8
+ 0x5C302200, // 003E MOVE R12 R17
+ 0x7002004C, // 003F JMP #008D
+ 0x1C400703, // 0040 EQ R16 R3 K3
+ 0x78420021, // 0041 JMPF R16 #0064
+ 0x00400E0B, // 0042 ADD R16 R7 R11
+ 0x5C342000, // 0043 MOVE R13 R16
+ 0x00400C0A, // 0044 ADD R16 R6 R10
+ 0x5C382000, // 0045 MOVE R14 R16
+ 0x00400A09, // 0046 ADD R16 R5 R9
+ 0x5C3C2000, // 0047 MOVE R15 R16
+ 0x24400808, // 0048 GT R16 R4 R8
+ 0x78420001, // 0049 JMPF R16 #004C
+ 0x5C400800, // 004A MOVE R16 R4
+ 0x70020000, // 004B JMP #004D
+ 0x5C401000, // 004C MOVE R16 R8
+ 0x5C302000, // 004D MOVE R12 R16
+ 0x544200FE, // 004E LDINT R16 255
+ 0x24401A10, // 004F GT R16 R13 R16
+ 0x78420001, // 0050 JMPF R16 #0053
+ 0x544200FE, // 0051 LDINT R16 255
+ 0x70020000, // 0052 JMP #0054
+ 0x5C401A00, // 0053 MOVE R16 R13
+ 0x5C342000, // 0054 MOVE R13 R16
+ 0x544200FE, // 0055 LDINT R16 255
+ 0x24401C10, // 0056 GT R16 R14 R16
+ 0x78420001, // 0057 JMPF R16 #005A
+ 0x544200FE, // 0058 LDINT R16 255
+ 0x70020000, // 0059 JMP #005B
+ 0x5C401C00, // 005A MOVE R16 R14
+ 0x5C382000, // 005B MOVE R14 R16
+ 0x544200FE, // 005C LDINT R16 255
+ 0x24401E10, // 005D GT R16 R15 R16
+ 0x78420001, // 005E JMPF R16 #0061
+ 0x544200FE, // 005F LDINT R16 255
+ 0x70020000, // 0060 JMP #0062
+ 0x5C401E00, // 0061 MOVE R16 R15
+ 0x5C3C2000, // 0062 MOVE R15 R16
+ 0x70020028, // 0063 JMP #008D
+ 0x1C40070C, // 0064 EQ R16 R3 K12
+ 0x78420026, // 0065 JMPF R16 #008D
+ 0xB8421A00, // 0066 GETNGBL R16 K13
+ 0x8C40210E, // 0067 GETMET R16 R16 K14
+ 0x08480E0B, // 0068 MUL R18 R7 R11
+ 0x584C0002, // 0069 LDCONST R19 K2
+ 0x545200FE, // 006A LDINT R20 255
+ 0x545600FE, // 006B LDINT R21 255
+ 0x08502815, // 006C MUL R20 R20 R21
+ 0x58540002, // 006D LDCONST R21 K2
+ 0x545A00FE, // 006E LDINT R22 255
+ 0x7C400C00, // 006F CALL R16 6
+ 0x5C342000, // 0070 MOVE R13 R16
+ 0xB8421A00, // 0071 GETNGBL R16 K13
+ 0x8C40210E, // 0072 GETMET R16 R16 K14
+ 0x08480C0A, // 0073 MUL R18 R6 R10
+ 0x584C0002, // 0074 LDCONST R19 K2
+ 0x545200FE, // 0075 LDINT R20 255
+ 0x545600FE, // 0076 LDINT R21 255
+ 0x08502815, // 0077 MUL R20 R20 R21
+ 0x58540002, // 0078 LDCONST R21 K2
+ 0x545A00FE, // 0079 LDINT R22 255
+ 0x7C400C00, // 007A CALL R16 6
+ 0x5C382000, // 007B MOVE R14 R16
+ 0xB8421A00, // 007C GETNGBL R16 K13
+ 0x8C40210E, // 007D GETMET R16 R16 K14
+ 0x08480A09, // 007E MUL R18 R5 R9
+ 0x584C0002, // 007F LDCONST R19 K2
+ 0x545200FE, // 0080 LDINT R20 255
+ 0x545600FE, // 0081 LDINT R21 255
+ 0x08502815, // 0082 MUL R20 R20 R21
+ 0x58540002, // 0083 LDCONST R21 K2
+ 0x545A00FE, // 0084 LDINT R22 255
+ 0x7C400C00, // 0085 CALL R16 6
+ 0x5C3C2000, // 0086 MOVE R15 R16
+ 0x24400808, // 0087 GT R16 R4 R8
+ 0x78420001, // 0088 JMPF R16 #008B
+ 0x5C400800, // 0089 MOVE R16 R4
+ 0x70020000, // 008A JMP #008C
+ 0x5C401000, // 008B MOVE R16 R8
+ 0x5C302000, // 008C MOVE R12 R16
+ 0x54420017, // 008D LDINT R16 24
+ 0x38401810, // 008E SHL R16 R12 R16
+ 0x5446000F, // 008F LDINT R17 16
+ 0x38441E11, // 0090 SHL R17 R15 R17
+ 0x30402011, // 0091 OR R16 R16 R17
+ 0x54460007, // 0092 LDINT R17 8
+ 0x38441C11, // 0093 SHL R17 R14 R17
+ 0x30402011, // 0094 OR R16 R16 R17
+ 0x3040200D, // 0095 OR R16 R16 R13
+ 0x80042000, // 0096 RET 1 R16
})
)
);
@@ -5658,7 +11861,7 @@ be_local_closure(class_RichPaletteAnimation_tostring, /* name */
/********************************************************************
** Solidified function: init
********************************************************************/
-be_local_closure(class_RichPaletteAnimation_init, /* name */
+be_local_closure(class_CompositeColorProvider_init, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -5668,25 +11871,20 @@ be_local_closure(class_RichPaletteAnimation_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_RichPaletteAnimation, /* shared constants */
+ &be_ktab_class_CompositeColorProvider, /* shared constants */
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
+ ( &(const binstruction[10]) { /* code */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C080509, // 0003 GETMET R2 R2 K9
+ 0x8C08050F, // 0003 GETMET R2 R2 K15
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
- 0xB80A1400, // 0006 GETNGBL R2 K10
- 0x8C08050B, // 0007 GETMET R2 R2 K11
- 0x5C100200, // 0008 MOVE R4 R1
- 0x7C080400, // 0009 CALL R2 2
- 0x90020A02, // 000A SETMBR R0 K5 R2
- 0x8808010C, // 000B GETMBR R2 R0 K12
- 0x880C0105, // 000C GETMBR R3 R0 K5
- 0x980A1A03, // 000D SETIDX R2 K13 R3
- 0x80000000, // 000E RET 0
+ 0x60080012, // 0006 GETGBL R2 G18
+ 0x7C080000, // 0007 CALL R2 0
+ 0x90020002, // 0008 SETMBR R0 K0 R2
+ 0x80000000, // 0009 RET 0
})
)
);
@@ -5694,9 +11892,380 @@ be_local_closure(class_RichPaletteAnimation_init, /* name */
/********************************************************************
-** Solidified function: start
+** Solidified class: CompositeColorProvider
********************************************************************/
-be_local_closure(class_RichPaletteAnimation_start, /* name */
+extern const bclass be_class_ColorProvider;
+be_local_class(CompositeColorProvider,
+ 1,
+ &be_class_ColorProvider,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(add_provider, -1), be_const_closure(class_CompositeColorProvider_add_provider_closure) },
+ { be_const_key_weak(get_color_for_value, 7), be_const_closure(class_CompositeColorProvider_get_color_for_value_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_CompositeColorProvider_init_closure) },
+ { be_const_key_weak(PARAMS, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(blend_mode, -1), be_const_bytes_instance(14000003000000010002) },
+ })) ) } )) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_CompositeColorProvider_tostring_closure) },
+ { be_const_key_weak(providers, 4), be_const_var(0) },
+ { be_const_key_weak(_blend_colors, -1), be_const_closure(class_CompositeColorProvider__blend_colors_closure) },
+ { be_const_key_weak(produce_value, -1), be_const_closure(class_CompositeColorProvider_produce_value_closure) },
+ })),
+ be_str_weak(CompositeColorProvider)
+);
+
+/********************************************************************
+** Solidified function: wave_single_sine
+********************************************************************/
+be_local_closure(wave_single_sine, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(wave_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(wave_type),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(frequency),
+ /* K6 */ be_nested_str_weak(wave_speed),
+ }),
+ be_str_weak(wave_single_sine),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x5408FFFF, // 0004 LDINT R2 -65536
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x90060704, // 0006 SETMBR R1 K3 K4
+ 0x540A001F, // 0007 LDINT R2 32
+ 0x90060A02, // 0008 SETMBR R1 K5 R2
+ 0x540A0031, // 0009 LDINT R2 50
+ 0x90060C02, // 000A SETMBR R1 K6 R2
+ 0x80040200, // 000B RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'ClosureValueProvider' ktab size: 7, total: 9 (saved 16 bytes)
+static const bvalue be_ktab_class_ClosureValueProvider[7] = {
+ /* K0 */ be_nested_str_weak(ClosureValueProvider_X28_X25s_X29),
+ /* K1 */ be_nested_str_weak(_closure),
+ /* K2 */ be_nested_str_weak(closure_X20set),
+ /* K3 */ be_nested_str_weak(no_X20closure),
+ /* K4 */ be_nested_str_weak(on_param_changed),
+ /* K5 */ be_nested_str_weak(closure),
+ /* K6 */ be_nested_str_weak(engine),
+};
+
+
+extern const bclass be_class_ClosureValueProvider;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_ClosureValueProvider_tostring, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ClosureValueProvider, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080000, // 0001 LDCONST R2 K0
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x780E0001, // 0003 JMPF R3 #0006
+ 0x580C0002, // 0004 LDCONST R3 K2
+ 0x70020000, // 0005 JMP #0007
+ 0x580C0003, // 0006 LDCONST R3 K3
+ 0x7C040400, // 0007 CALL R1 2
+ 0x80040200, // 0008 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_ClosureValueProvider_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ClosureValueProvider, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0704, // 0003 GETMET R3 R3 K4
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C0305, // 0007 EQ R3 R1 K5
+ 0x780E0000, // 0008 JMPF R3 #000A
+ 0x90020202, // 0009 SETMBR R0 K1 R2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_ClosureValueProvider_produce_value, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_ClosureValueProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x880C0101, // 0000 GETMBR R3 R0 K1
+ 0x4C100000, // 0001 LDNIL R4
+ 0x1C100604, // 0002 EQ R4 R3 R4
+ 0x78120001, // 0003 JMPF R4 #0006
+ 0x4C100000, // 0004 LDNIL R4
+ 0x80040800, // 0005 RET 1 R4
+ 0x5C100600, // 0006 MOVE R4 R3
+ 0x88140106, // 0007 GETMBR R5 R0 K6
+ 0x5C180200, // 0008 MOVE R6 R1
+ 0x5C1C0400, // 0009 MOVE R7 R2
+ 0x7C100600, // 000A CALL R4 3
+ 0x80040800, // 000B RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: ClosureValueProvider
+********************************************************************/
+extern const bclass be_class_ValueProvider;
+be_local_class(ClosureValueProvider,
+ 1,
+ &be_class_ValueProvider,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, -1), be_const_closure(class_ClosureValueProvider_tostring_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(closure, -1), be_const_bytes_instance(0C0606) },
+ })) ) } )) },
+ { be_const_key_weak(_closure, 4), be_const_var(0) },
+ { be_const_key_weak(produce_value, 1), be_const_closure(class_ClosureValueProvider_produce_value_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ClosureValueProvider_on_param_changed_closure) },
+ })),
+ be_str_weak(ClosureValueProvider)
+);
+// compact class 'Animation' ktab size: 26, total: 37 (saved 88 bytes)
+static const bvalue be_ktab_class_Animation[26] = {
+ /* K0 */ be_nested_str_weak(get_param_value),
+ /* K1 */ be_nested_str_weak(color),
+ /* K2 */ be_nested_str_weak(animation),
+ /* K3 */ be_nested_str_weak(opacity_frame),
+ /* K4 */ be_nested_str_weak(width),
+ /* K5 */ be_nested_str_weak(frame_buffer),
+ /* K6 */ be_nested_str_weak(clear),
+ /* K7 */ be_nested_str_weak(is_running),
+ /* K8 */ be_nested_str_weak(start),
+ /* K9 */ be_nested_str_weak(start_time),
+ /* K10 */ be_nested_str_weak(update),
+ /* K11 */ be_nested_str_weak(render),
+ /* K12 */ be_nested_str_weak(apply_opacity),
+ /* K13 */ be_nested_str_weak(pixels),
+ /* K14 */ be_nested_str_weak(duration),
+ /* K15 */ be_const_int(0),
+ /* K16 */ be_nested_str_weak(loop),
+ /* K17 */ be_nested_str_weak(init),
+ /* K18 */ be_nested_str_weak(get_color_at),
+ /* K19 */ be_nested_str_weak(member),
+ /* K20 */ be_nested_str_weak(fill_pixels),
+ /* K21 */ be_nested_str_weak(opacity),
+ /* K22 */ be_nested_str_weak(int),
+ /* K23 */ be_nested_str_weak(_apply_opacity),
+ /* K24 */ be_nested_str_weak(Animation_X28priority_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20loop_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K25 */ be_nested_str_weak(priority),
+};
+
+
+extern const bclass be_class_Animation;
+
+/********************************************************************
+** Solidified function: get_color_at
+********************************************************************/
+be_local_closure(class_Animation_get_color_at, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(get_color_at),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C0C0100, // 0000 GETMET R3 R0 K0
+ 0x58140001, // 0001 LDCONST R5 K1
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C0C0600, // 0003 CALL R3 3
+ 0x80040600, // 0004 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _apply_opacity
+********************************************************************/
+be_local_closure(class_Animation__apply_opacity, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(_apply_opacity),
+ &be_const_str_solidified,
+ ( &(const binstruction[43]) { /* code */
+ 0x6014000F, // 0000 GETGBL R5 G15
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0xB81E0400, // 0002 GETNGBL R7 K2
+ 0x881C0F02, // 0003 GETMBR R7 R7 K2
+ 0x7C140400, // 0004 CALL R5 2
+ 0x78160023, // 0005 JMPF R5 #002A
+ 0x5C140400, // 0006 MOVE R5 R2
+ 0x88180103, // 0007 GETMBR R6 R0 K3
+ 0x4C1C0000, // 0008 LDNIL R7
+ 0x1C180C07, // 0009 EQ R6 R6 R7
+ 0x741A0004, // 000A JMPT R6 #0010
+ 0x88180103, // 000B GETMBR R6 R0 K3
+ 0x88180D04, // 000C GETMBR R6 R6 K4
+ 0x881C0304, // 000D GETMBR R7 R1 K4
+ 0x20180C07, // 000E NE R6 R6 R7
+ 0x781A0004, // 000F JMPF R6 #0015
+ 0xB81A0400, // 0010 GETNGBL R6 K2
+ 0x8C180D05, // 0011 GETMET R6 R6 K5
+ 0x88200304, // 0012 GETMBR R8 R1 K4
+ 0x7C180400, // 0013 CALL R6 2
+ 0x90020606, // 0014 SETMBR R0 K3 R6
+ 0x88180103, // 0015 GETMBR R6 R0 K3
+ 0x8C180D06, // 0016 GETMET R6 R6 K6
+ 0x7C180200, // 0017 CALL R6 1
+ 0x88180B07, // 0018 GETMBR R6 R5 K7
+ 0x741A0002, // 0019 JMPT R6 #001D
+ 0x8C180B08, // 001A GETMET R6 R5 K8
+ 0x88200109, // 001B GETMBR R8 R0 K9
+ 0x7C180400, // 001C CALL R6 2
+ 0x8C180B0A, // 001D GETMET R6 R5 K10
+ 0x5C200600, // 001E MOVE R8 R3
+ 0x7C180400, // 001F CALL R6 2
+ 0x8C180B0B, // 0020 GETMET R6 R5 K11
+ 0x88200103, // 0021 GETMBR R8 R0 K3
+ 0x5C240600, // 0022 MOVE R9 R3
+ 0x5C280800, // 0023 MOVE R10 R4
+ 0x7C180800, // 0024 CALL R6 4
+ 0x8C18030C, // 0025 GETMET R6 R1 K12
+ 0x8820030D, // 0026 GETMBR R8 R1 K13
+ 0x88240103, // 0027 GETMBR R9 R0 K3
+ 0x8824130D, // 0028 GETMBR R9 R9 K13
+ 0x7C180600, // 0029 CALL R6 3
+ 0x80000000, // 002A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_Animation_update, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x8808010E, // 0000 GETMBR R2 R0 K14
+ 0x240C050F, // 0001 GT R3 R2 K15
+ 0x780E000D, // 0002 JMPF R3 #0011
+ 0x880C0109, // 0003 GETMBR R3 R0 K9
+ 0x040C0203, // 0004 SUB R3 R1 R3
+ 0x28100602, // 0005 GE R4 R3 R2
+ 0x78120009, // 0006 JMPF R4 #0011
+ 0x88100110, // 0007 GETMBR R4 R0 K16
+ 0x78120005, // 0008 JMPF R4 #000F
+ 0x0C140602, // 0009 DIV R5 R3 R2
+ 0x88180109, // 000A GETMBR R6 R0 K9
+ 0x081C0A02, // 000B MUL R7 R5 R2
+ 0x00180C07, // 000C ADD R6 R6 R7
+ 0x90021206, // 000D SETMBR R0 K9 R6
+ 0x70020001, // 000E JMP #0011
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x90020E05, // 0010 SETMBR R0 K7 R5
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_Animation_init, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -5706,21 +12275,17 @@ be_local_closure(class_RichPaletteAnimation_start, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_RichPaletteAnimation, /* shared constants */
- be_str_weak(start),
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
+ ( &(const binstruction[ 7]) { /* code */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C08050E, // 0003 GETMET R2 R2 K14
+ 0x8C080511, // 0003 GETMET R2 R2 K17
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
- 0x88080105, // 0006 GETMBR R2 R0 K5
- 0x8C08050E, // 0007 GETMET R2 R2 K14
- 0x5C100200, // 0008 MOVE R4 R1
- 0x7C080400, // 0009 CALL R2 2
- 0x80040000, // 000A RET 1 R0
+ 0x80000000, // 0006 RET 0
})
)
);
@@ -5728,35 +12293,213 @@ be_local_closure(class_RichPaletteAnimation_start, /* name */
/********************************************************************
-** Solidified class: RichPaletteAnimation
+** Solidified function: get_color
********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(RichPaletteAnimation,
+be_local_closure(class_Animation_get_color, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(get_color),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C080112, // 0000 GETMET R2 R0 K18
+ 0x5810000F, // 0001 LDCONST R4 K15
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C080600, // 0003 CALL R2 3
+ 0x80040400, // 0004 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_Animation_render, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x8C100113, // 0000 GETMET R4 R0 K19
+ 0x58180001, // 0001 LDCONST R6 K1
+ 0x7C100400, // 0002 CALL R4 2
+ 0x2014090F, // 0003 NE R5 R4 K15
+ 0x78160003, // 0004 JMPF R5 #0009
+ 0x8C140314, // 0005 GETMET R5 R1 K20
+ 0x881C030D, // 0006 GETMBR R7 R1 K13
+ 0x5C200800, // 0007 MOVE R8 R4
+ 0x7C140600, // 0008 CALL R5 3
+ 0x50140200, // 0009 LDBOOL R5 1 0
+ 0x80040A00, // 000A RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: post_render
+********************************************************************/
+be_local_closure(class_Animation_post_render, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(post_render),
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x88100115, // 0000 GETMBR R4 R0 K21
+ 0x541600FE, // 0001 LDINT R5 255
+ 0x1C140805, // 0002 EQ R5 R4 R5
+ 0x78160001, // 0003 JMPF R5 #0006
+ 0x80000A00, // 0004 RET 0
+ 0x7002000F, // 0005 JMP #0016
+ 0x60140004, // 0006 GETGBL R5 G4
+ 0x5C180800, // 0007 MOVE R6 R4
+ 0x7C140200, // 0008 CALL R5 1
+ 0x1C140B16, // 0009 EQ R5 R5 K22
+ 0x78160004, // 000A JMPF R5 #0010
+ 0x8C14030C, // 000B GETMET R5 R1 K12
+ 0x881C030D, // 000C GETMBR R7 R1 K13
+ 0x5C200800, // 000D MOVE R8 R4
+ 0x7C140600, // 000E CALL R5 3
+ 0x70020005, // 000F JMP #0016
+ 0x8C140117, // 0010 GETMET R5 R0 K23
+ 0x5C1C0200, // 0011 MOVE R7 R1
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x5C240400, // 0013 MOVE R9 R2
+ 0x5C280600, // 0014 MOVE R10 R3
+ 0x7C140A00, // 0015 CALL R5 5
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_Animation_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Animation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080018, // 0001 LDCONST R2 K24
+ 0x880C0119, // 0002 GETMBR R3 R0 K25
+ 0x8810010E, // 0003 GETMBR R4 R0 K14
+ 0x88140110, // 0004 GETMBR R5 R0 K16
+ 0x88180107, // 0005 GETMBR R6 R0 K7
+ 0x7C040A00, // 0006 CALL R1 5
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Animation
+********************************************************************/
+extern const bclass be_class_ParameterizedObject;
+be_local_class(Animation,
1,
- &be_class_Animation,
- be_nested_map(6,
+ &be_class_ParameterizedObject,
+ be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(class_RichPaletteAnimation_tostring_closure) },
- { be_const_key_weak(on_param_changed, 0), be_const_closure(class_RichPaletteAnimation_on_param_changed_closure) },
+ { be_const_key_weak(opacity_frame, -1), be_const_var(0) },
+ { be_const_key_weak(get_color_at, 9), be_const_closure(class_Animation_get_color_at_closure) },
+ { be_const_key_weak(_apply_opacity, -1), be_const_closure(class_Animation__apply_opacity_closure) },
{ be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(4,
+ be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(palette, -1), be_const_bytes_instance(0C0605) },
- { be_const_key_weak(transition_type, -1), be_const_bytes_instance(1400050200010005) },
- { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
- { be_const_key_weak(cycle_period, 1), be_const_bytes_instance(050000018813) },
+ { be_const_key_weak(id, -1), be_const_bytes_instance(0C030001) },
+ { be_const_key_weak(priority, -1), be_const_bytes_instance(050000000A) },
+ { be_const_key_weak(color, -1), be_const_bytes_instance(040000) },
+ { be_const_key_weak(loop, 1), be_const_bytes_instance(0C050003) },
+ { be_const_key_weak(opacity, 2), be_const_bytes_instance(0C01FF0004) },
+ { be_const_key_weak(duration, -1), be_const_bytes_instance(0500000000) },
})) ) } )) },
- { be_const_key_weak(init, 2), be_const_closure(class_RichPaletteAnimation_init_closure) },
- { be_const_key_weak(color_provider, -1), be_const_var(0) },
- { be_const_key_weak(start, -1), be_const_closure(class_RichPaletteAnimation_start_closure) },
+ { be_const_key_weak(update, -1), be_const_closure(class_Animation_update_closure) },
+ { be_const_key_weak(init, 6), be_const_closure(class_Animation_init_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_Animation_tostring_closure) },
+ { be_const_key_weak(render, -1), be_const_closure(class_Animation_render_closure) },
+ { be_const_key_weak(post_render, -1), be_const_closure(class_Animation_post_render_closure) },
+ { be_const_key_weak(get_color, -1), be_const_closure(class_Animation_get_color_closure) },
})),
- be_str_weak(RichPaletteAnimation)
+ be_str_weak(Animation)
);
/********************************************************************
-** Solidified function: elastic
+** Solidified function: is_user_function
********************************************************************/
-be_local_closure(elastic, /* name */
+be_local_closure(is_user_function, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(_user_functions),
+ /* K2 */ be_nested_str_weak(contains),
+ }),
+ be_str_weak(is_user_function),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x8C040302, // 0002 GETMET R1 R1 K2
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ease_in
+********************************************************************/
+be_local_closure(ease_in, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -5770,9 +12513,9 @@ be_local_closure(elastic, /* name */
/* K0 */ be_nested_str_weak(animation),
/* K1 */ be_nested_str_weak(oscillator_value),
/* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(ELASTIC),
+ /* K3 */ be_nested_str_weak(EASE_IN),
}),
- be_str_weak(elastic),
+ be_str_weak(ease_in),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
@@ -5824,2900 +12567,14 @@ be_local_closure(linear, /* name */
);
/*******************************************************************/
-// compact class 'ColorCycleColorProvider' ktab size: 25, total: 52 (saved 216 bytes)
-static const bvalue be_ktab_class_ColorCycleColorProvider[25] = {
- /* K0 */ be_nested_str_weak(cycle_period),
- /* K1 */ be_nested_str_weak(_get_palette_size),
- /* K2 */ be_const_int(1),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(current_index),
- /* K5 */ be_nested_str_weak(_get_color_at_index),
- /* K6 */ be_nested_str_weak(brightness),
- /* K7 */ be_nested_str_weak(apply_brightness),
- /* K8 */ be_nested_str_weak(tasmota),
- /* K9 */ be_nested_str_weak(scale_uint),
- /* K10 */ be_nested_str_weak(ColorCycleColorProvider_X28palette_size_X3D_X25s_X2C_X20cycle_period_X3D_X25s_X2C_X20mode_X3D_X25s_X2C_X20current_index_X3D_X25s_X29),
- /* K11 */ be_nested_str_weak(manual),
- /* K12 */ be_nested_str_weak(auto),
- /* K13 */ be_nested_str_weak(palette),
- /* K14 */ be_nested_str_weak(on_param_changed),
- /* K15 */ be_nested_str_weak(palette_size),
- /* K16 */ be_nested_str_weak(values),
- /* K17 */ be_nested_str_weak(value_error),
- /* K18 */ be_nested_str_weak(Parameter_X20_X27palette_size_X27_X20is_X20read_X2Donly),
- /* K19 */ be_nested_str_weak(next),
- /* K20 */ be_nested_str_weak(_adjust_index),
- /* K21 */ be_nested_str_weak(member),
- /* K22 */ be_nested_str_weak(init),
- /* K23 */ be_nested_str_weak(get),
- /* K24 */ be_const_int(-16777216),
-};
-
-
-extern const bclass be_class_ColorCycleColorProvider;
/********************************************************************
-** Solidified function: produce_value
+** Solidified function: animation_version_string
********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_produce_value, /* name */
- be_nested_proto(
- 13, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[56]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C100101, // 0001 GETMET R4 R0 K1
- 0x7C100200, // 0002 CALL R4 1
- 0x18140902, // 0003 LE R5 R4 K2
- 0x74160001, // 0004 JMPT R5 #0007
- 0x1C140703, // 0005 EQ R5 R3 K3
- 0x78160015, // 0006 JMPF R5 #001D
- 0x88140104, // 0007 GETMBR R5 R0 K4
- 0x28180A04, // 0008 GE R6 R5 R4
- 0x781A0001, // 0009 JMPF R6 #000C
- 0x04180902, // 000A SUB R6 R4 K2
- 0x5C140C00, // 000B MOVE R5 R6
- 0x14180B03, // 000C LT R6 R5 K3
- 0x781A0000, // 000D JMPF R6 #000F
- 0x58140003, // 000E LDCONST R5 K3
- 0x90020805, // 000F SETMBR R0 K4 R5
- 0x8C180105, // 0010 GETMET R6 R0 K5
- 0x88200104, // 0011 GETMBR R8 R0 K4
- 0x7C180400, // 0012 CALL R6 2
- 0x881C0106, // 0013 GETMBR R7 R0 K6
- 0x542200FE, // 0014 LDINT R8 255
- 0x20200E08, // 0015 NE R8 R7 R8
- 0x78220004, // 0016 JMPF R8 #001C
- 0x8C200107, // 0017 GETMET R8 R0 K7
- 0x5C280C00, // 0018 MOVE R10 R6
- 0x5C2C0E00, // 0019 MOVE R11 R7
- 0x7C200600, // 001A CALL R8 3
- 0x80041000, // 001B RET 1 R8
- 0x80040C00, // 001C RET 1 R6
- 0x10140403, // 001D MOD R5 R2 R3
- 0xB81A1000, // 001E GETNGBL R6 K8
- 0x8C180D09, // 001F GETMET R6 R6 K9
- 0x5C200A00, // 0020 MOVE R8 R5
- 0x58240003, // 0021 LDCONST R9 K3
- 0x04280702, // 0022 SUB R10 R3 K2
- 0x582C0003, // 0023 LDCONST R11 K3
- 0x04300902, // 0024 SUB R12 R4 K2
- 0x7C180C00, // 0025 CALL R6 6
- 0x281C0C04, // 0026 GE R7 R6 R4
- 0x781E0001, // 0027 JMPF R7 #002A
- 0x041C0902, // 0028 SUB R7 R4 K2
- 0x5C180E00, // 0029 MOVE R6 R7
- 0x90020806, // 002A SETMBR R0 K4 R6
- 0x8C1C0105, // 002B GETMET R7 R0 K5
- 0x5C240C00, // 002C MOVE R9 R6
- 0x7C1C0400, // 002D CALL R7 2
- 0x88200106, // 002E GETMBR R8 R0 K6
- 0x542600FE, // 002F LDINT R9 255
- 0x20241009, // 0030 NE R9 R8 R9
- 0x78260004, // 0031 JMPF R9 #0037
- 0x8C240107, // 0032 GETMET R9 R0 K7
- 0x5C2C0E00, // 0033 MOVE R11 R7
- 0x5C301000, // 0034 MOVE R12 R8
- 0x7C240600, // 0035 CALL R9 3
- 0x80041200, // 0036 RET 1 R9
- 0x80040E00, // 0037 RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _adjust_index
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider__adjust_index, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(_adjust_index),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x8C040101, // 0000 GETMET R1 R0 K1
- 0x7C040200, // 0001 CALL R1 1
- 0x24080303, // 0002 GT R2 R1 K3
- 0x780A0009, // 0003 JMPF R2 #000E
- 0x88080104, // 0004 GETMBR R2 R0 K4
- 0x10080401, // 0005 MOD R2 R2 R1
- 0x140C0503, // 0006 LT R3 R2 K3
- 0x780E0000, // 0007 JMPF R3 #0009
- 0x00080401, // 0008 ADD R2 R2 R1
- 0x880C0104, // 0009 GETMBR R3 R0 K4
- 0x200C0602, // 000A NE R3 R3 R2
- 0x780E0000, // 000B JMPF R3 #000D
- 0x90020802, // 000C SETMBR R0 K4 R2
- 0x70020000, // 000D JMP #000F
- 0x90020903, // 000E SETMBR R0 K4 K3
- 0x80000000, // 000F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_tostring, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x5808000A, // 0001 LDCONST R2 K10
- 0x8C0C0101, // 0002 GETMET R3 R0 K1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x88100100, // 0004 GETMBR R4 R0 K0
- 0x88140100, // 0005 GETMBR R5 R0 K0
- 0x78160001, // 0006 JMPF R5 #0009
- 0x5814000B, // 0007 LDCONST R5 K11
- 0x70020000, // 0008 JMP #000A
- 0x5814000C, // 0009 LDCONST R5 K12
- 0x88180104, // 000A GETMBR R6 R0 K4
- 0x7C040A00, // 000B CALL R1 5
- 0x80040200, // 000C RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _get_palette_size
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider__get_palette_size, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(_get_palette_size),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x8808010D, // 0001 GETMBR R2 R0 K13
- 0x7C040200, // 0002 CALL R1 1
- 0x540A0003, // 0003 LDINT R2 4
- 0x0C040202, // 0004 DIV R1 R1 R2
- 0x80040200, // 0005 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C070E, // 0003 GETMET R3 R3 K14
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C030F, // 0007 EQ R3 R1 K15
- 0x780E0005, // 0008 JMPF R3 #000F
- 0x880C0110, // 0009 GETMBR R3 R0 K16
- 0x8C100101, // 000A GETMET R4 R0 K1
- 0x7C100200, // 000B CALL R4 1
- 0x980E1E04, // 000C SETIDX R3 K15 R4
- 0xB0062312, // 000D RAISE 1 K17 K18
- 0x7002000A, // 000E JMP #001A
- 0x1C0C0313, // 000F EQ R3 R1 K19
- 0x780E0008, // 0010 JMPF R3 #001A
- 0x200C0503, // 0011 NE R3 R2 K3
- 0x780E0006, // 0012 JMPF R3 #001A
- 0x880C0104, // 0013 GETMBR R3 R0 K4
- 0x000C0602, // 0014 ADD R3 R3 R2
- 0x90020803, // 0015 SETMBR R0 K4 R3
- 0x8C0C0114, // 0016 GETMET R3 R0 K20
- 0x7C0C0200, // 0017 CALL R3 1
- 0x880C0110, // 0018 GETMBR R3 R0 K16
- 0x980E2703, // 0019 SETIDX R3 K19 K3
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: member
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_member, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(member),
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x1C08030F, // 0000 EQ R2 R1 K15
- 0x780A0003, // 0001 JMPF R2 #0006
- 0x8C080101, // 0002 GETMET R2 R0 K1
- 0x7C080200, // 0003 CALL R2 1
- 0x80040400, // 0004 RET 1 R2
- 0x70020006, // 0005 JMP #000D
- 0x60080003, // 0006 GETGBL R2 G3
- 0x5C0C0000, // 0007 MOVE R3 R0
- 0x7C080200, // 0008 CALL R2 1
- 0x8C080515, // 0009 GETMET R2 R2 K21
- 0x5C100200, // 000A MOVE R4 R1
- 0x7C080400, // 000B CALL R2 2
- 0x80040400, // 000C RET 1 R2
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_color_for_value
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_get_color_for_value, /* name */
- be_nested_proto(
- 11, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(get_color_for_value),
- &be_const_str_solidified,
- ( &(const binstruction[53]) { /* code */
- 0x8C0C0101, // 0000 GETMET R3 R0 K1
- 0x7C0C0200, // 0001 CALL R3 1
- 0x1C100703, // 0002 EQ R4 R3 K3
- 0x78120000, // 0003 JMPF R4 #0005
- 0x80060600, // 0004 RET 1 K3
- 0x1C100702, // 0005 EQ R4 R3 K2
- 0x7812000C, // 0006 JMPF R4 #0014
- 0x8C100105, // 0007 GETMET R4 R0 K5
- 0x58180003, // 0008 LDCONST R6 K3
- 0x7C100400, // 0009 CALL R4 2
- 0x88140106, // 000A GETMBR R5 R0 K6
- 0x541A00FE, // 000B LDINT R6 255
- 0x20180A06, // 000C NE R6 R5 R6
- 0x781A0004, // 000D JMPF R6 #0013
- 0x8C180107, // 000E GETMET R6 R0 K7
- 0x5C200800, // 000F MOVE R8 R4
- 0x5C240A00, // 0010 MOVE R9 R5
- 0x7C180600, // 0011 CALL R6 3
- 0x80040C00, // 0012 RET 1 R6
- 0x80040800, // 0013 RET 1 R4
- 0x14100303, // 0014 LT R4 R1 K3
- 0x78120001, // 0015 JMPF R4 #0018
- 0x58040003, // 0016 LDCONST R1 K3
- 0x70020003, // 0017 JMP #001C
- 0x541200FE, // 0018 LDINT R4 255
- 0x24100204, // 0019 GT R4 R1 R4
- 0x78120000, // 001A JMPF R4 #001C
- 0x540600FE, // 001B LDINT R1 255
- 0xB8121000, // 001C GETNGBL R4 K8
- 0x8C100909, // 001D GETMET R4 R4 K9
- 0x5C180200, // 001E MOVE R6 R1
- 0x581C0003, // 001F LDCONST R7 K3
- 0x542200FE, // 0020 LDINT R8 255
- 0x58240003, // 0021 LDCONST R9 K3
- 0x04280702, // 0022 SUB R10 R3 K2
- 0x7C100C00, // 0023 CALL R4 6
- 0x28140803, // 0024 GE R5 R4 R3
- 0x78160001, // 0025 JMPF R5 #0028
- 0x04140702, // 0026 SUB R5 R3 K2
- 0x5C100A00, // 0027 MOVE R4 R5
- 0x8C140105, // 0028 GETMET R5 R0 K5
- 0x5C1C0800, // 0029 MOVE R7 R4
- 0x7C140400, // 002A CALL R5 2
- 0x88180106, // 002B GETMBR R6 R0 K6
- 0x541E00FE, // 002C LDINT R7 255
- 0x201C0C07, // 002D NE R7 R6 R7
- 0x781E0004, // 002E JMPF R7 #0034
- 0x8C1C0107, // 002F GETMET R7 R0 K7
- 0x5C240A00, // 0030 MOVE R9 R5
- 0x5C280C00, // 0031 MOVE R10 R6
- 0x7C1C0600, // 0032 CALL R7 3
- 0x80040E00, // 0033 RET 1 R7
- 0x80040A00, // 0034 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080516, // 0003 GETMET R2 R2 K22
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x8808010D, // 0006 GETMBR R2 R0 K13
- 0x90020903, // 0007 SETMBR R0 K4 K3
- 0x880C0110, // 0008 GETMBR R3 R0 K16
- 0x8C100101, // 0009 GETMET R4 R0 K1
- 0x7C100200, // 000A CALL R4 1
- 0x980E1E04, // 000B SETIDX R3 K15 R4
- 0x80000000, // 000C RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _get_color_at_index
-********************************************************************/
-be_local_closure(class_ColorCycleColorProvider__get_color_at_index, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorCycleColorProvider, /* shared constants */
- be_str_weak(_get_color_at_index),
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0x8808010D, // 0000 GETMBR R2 R0 K13
- 0x600C000C, // 0001 GETGBL R3 G12
- 0x5C100400, // 0002 MOVE R4 R2
- 0x7C0C0200, // 0003 CALL R3 1
- 0x54120003, // 0004 LDINT R4 4
- 0x0C0C0604, // 0005 DIV R3 R3 R4
- 0x1C100703, // 0006 EQ R4 R3 K3
- 0x74120003, // 0007 JMPT R4 #000C
- 0x28100203, // 0008 GE R4 R1 R3
- 0x74120001, // 0009 JMPT R4 #000C
- 0x14100303, // 000A LT R4 R1 K3
- 0x78120000, // 000B JMPF R4 #000D
- 0x80060600, // 000C RET 1 K3
- 0x8C100517, // 000D GETMET R4 R2 K23
- 0x541A0003, // 000E LDINT R6 4
- 0x08180206, // 000F MUL R6 R1 R6
- 0x541DFFFB, // 0010 LDINT R7 -4
- 0x7C100600, // 0011 CALL R4 3
- 0x30100918, // 0012 OR R4 R4 K24
- 0x80040800, // 0013 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: ColorCycleColorProvider
-********************************************************************/
-extern const bclass be_class_ColorProvider;
-be_local_class(ColorCycleColorProvider,
- 1,
- &be_class_ColorProvider,
- be_nested_map(11,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(_get_color_at_index, -1), be_const_closure(class_ColorCycleColorProvider__get_color_at_index_closure) },
- { be_const_key_weak(current_index, -1), be_const_var(0) },
- { be_const_key_weak(_adjust_index, 1), be_const_closure(class_ColorCycleColorProvider__adjust_index_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_ColorCycleColorProvider_tostring_closure) },
- { be_const_key_weak(_get_palette_size, -1), be_const_closure(class_ColorCycleColorProvider__get_palette_size_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ColorCycleColorProvider_on_param_changed_closure) },
- { be_const_key_weak(member, -1), be_const_closure(class_ColorCycleColorProvider_member_closure) },
- { be_const_key_weak(get_color_for_value, -1), be_const_closure(class_ColorCycleColorProvider_get_color_for_value_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(4,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(palette, 2), be_const_bytes_instance(0C040C00FF0000FFFF00FF00FFFF000002) },
- { be_const_key_weak(palette_size, -1), be_const_bytes_instance(0C000300) },
- { be_const_key_weak(next, 1), be_const_bytes_instance(040000) },
- { be_const_key_weak(cycle_period, -1), be_const_bytes_instance(050000018813) },
- })) ) } )) },
- { be_const_key_weak(init, -1), be_const_closure(class_ColorCycleColorProvider_init_closure) },
- { be_const_key_weak(produce_value, 0), be_const_closure(class_ColorCycleColorProvider_produce_value_closure) },
- })),
- be_str_weak(ColorCycleColorProvider)
-);
-
-/********************************************************************
-** Solidified function: noise_fractal
-********************************************************************/
-be_local_closure(noise_fractal, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[15]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(noise_animation),
- /* K2 */ be_nested_str_weak(rich_palette),
- /* K3 */ be_nested_str_weak(palette),
- /* K4 */ be_nested_str_weak(PALETTE_RAINBOW),
- /* K5 */ be_nested_str_weak(cycle_period),
- /* K6 */ be_nested_str_weak(transition_type),
- /* K7 */ be_const_int(1),
- /* K8 */ be_nested_str_weak(brightness),
- /* K9 */ be_nested_str_weak(color),
- /* K10 */ be_nested_str_weak(scale),
- /* K11 */ be_nested_str_weak(speed),
- /* K12 */ be_nested_str_weak(octaves),
- /* K13 */ be_const_int(3),
- /* K14 */ be_nested_str_weak(persistence),
- }),
- be_str_weak(noise_fractal),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x8C080502, // 0005 GETMET R2 R2 K2
- 0x5C100000, // 0006 MOVE R4 R0
- 0x7C080400, // 0007 CALL R2 2
- 0xB80E0000, // 0008 GETNGBL R3 K0
- 0x880C0704, // 0009 GETMBR R3 R3 K4
- 0x900A0603, // 000A SETMBR R2 K3 R3
- 0x540E1387, // 000B LDINT R3 5000
- 0x900A0A03, // 000C SETMBR R2 K5 R3
- 0x900A0D07, // 000D SETMBR R2 K6 K7
- 0x540E00FE, // 000E LDINT R3 255
- 0x900A1003, // 000F SETMBR R2 K8 R3
- 0x90061202, // 0010 SETMBR R1 K9 R2
- 0x540E001D, // 0011 LDINT R3 30
- 0x90061403, // 0012 SETMBR R1 K10 R3
- 0x540E0013, // 0013 LDINT R3 20
- 0x90061603, // 0014 SETMBR R1 K11 R3
- 0x9006190D, // 0015 SETMBR R1 K12 K13
- 0x540E007F, // 0016 LDINT R3 128
- 0x90061C03, // 0017 SETMBR R1 K14 R3
- 0x80040200, // 0018 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: register_event_handler
-********************************************************************/
-be_local_closure(register_event_handler, /* name */
- be_nested_proto(
- 12, /* nstack */
- 5, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(register_handler),
- }),
- be_str_weak(register_event_handler),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0xB8160000, // 0000 GETNGBL R5 K0
- 0x88140B01, // 0001 GETMBR R5 R5 K1
- 0x8C140B02, // 0002 GETMET R5 R5 K2
- 0x5C1C0000, // 0003 MOVE R7 R0
- 0x5C200200, // 0004 MOVE R8 R1
- 0x5C240400, // 0005 MOVE R9 R2
- 0x5C280600, // 0006 MOVE R10 R3
- 0x5C2C0800, // 0007 MOVE R11 R4
- 0x7C140C00, // 0008 CALL R5 6
- 0x80040A00, // 0009 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'StaticValueProvider' ktab size: 5, total: 15 (saved 80 bytes)
-static const bvalue be_ktab_class_StaticValueProvider[5] = {
- /* K0 */ be_nested_str_weak(value),
- /* K1 */ be_nested_str_weak(instance),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(toptr),
- /* K4 */ be_nested_str_weak(StaticValueProvider_X28value_X3D_X25s_X29),
-};
-
-
-extern const bclass be_class_StaticValueProvider;
-
-/********************************************************************
-** Solidified function: <=
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X3C_X3D, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X3C_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x600C0009, // 0001 GETGBL R3 G9
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x18080403, // 0004 LE R2 R2 R3
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: >
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X3E, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x600C0009, // 0001 GETGBL R3 G9
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x24080403, // 0004 GT R2 R2 R3
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: >=
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X3E_X3D, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X3E_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x600C0009, // 0001 GETGBL R3 G9
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x28080403, // 0004 GE R2 R2 R3
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_StaticValueProvider_produce_value, /* name */
- be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x80040600, // 0001 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: !=
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X21_X3D, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X21_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080501, // 0003 EQ R2 R2 K1
- 0x780A0009, // 0004 JMPF R2 #000F
- 0xA40A0400, // 0005 IMPORT R2 K2
- 0x8C0C0503, // 0006 GETMET R3 R2 K3
- 0x5C140000, // 0007 MOVE R5 R0
- 0x7C0C0400, // 0008 CALL R3 2
- 0x8C100503, // 0009 GETMET R4 R2 K3
- 0x5C180200, // 000A MOVE R6 R1
- 0x7C100400, // 000B CALL R4 2
- 0x200C0604, // 000C NE R3 R3 R4
- 0x80040600, // 000D RET 1 R3
- 0x70020005, // 000E JMP #0015
- 0x88080100, // 000F GETMBR R2 R0 K0
- 0x600C0009, // 0010 GETGBL R3 G9
- 0x5C100200, // 0011 MOVE R4 R1
- 0x7C0C0200, // 0012 CALL R3 1
- 0x20080403, // 0013 NE R2 R2 R3
- 0x80040400, // 0014 RET 1 R2
- 0x80000000, // 0015 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: ==
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X3D_X3D, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X3D_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080501, // 0003 EQ R2 R2 K1
- 0x780A0009, // 0004 JMPF R2 #000F
- 0xA40A0400, // 0005 IMPORT R2 K2
- 0x8C0C0503, // 0006 GETMET R3 R2 K3
- 0x5C140000, // 0007 MOVE R5 R0
- 0x7C0C0400, // 0008 CALL R3 2
- 0x8C100503, // 0009 GETMET R4 R2 K3
- 0x5C180200, // 000A MOVE R6 R1
- 0x7C100400, // 000B CALL R4 2
- 0x1C0C0604, // 000C EQ R3 R3 R4
- 0x80040600, // 000D RET 1 R3
- 0x70020005, // 000E JMP #0015
- 0x88080100, // 000F GETMBR R2 R0 K0
- 0x600C0009, // 0010 GETGBL R3 G9
- 0x5C100200, // 0011 MOVE R4 R1
- 0x7C0C0200, // 0012 CALL R3 1
- 0x1C080403, // 0013 EQ R2 R2 R3
- 0x80040400, // 0014 RET 1 R2
- 0x80000000, // 0015 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_StaticValueProvider_tostring, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080004, // 0001 LDCONST R2 K4
- 0x880C0100, // 0002 GETMBR R3 R0 K0
- 0x7C040400, // 0003 CALL R1 2
- 0x80040200, // 0004 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: <
-********************************************************************/
-be_local_closure(class_StaticValueProvider__X3C, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StaticValueProvider, /* shared constants */
- be_str_weak(_X3C),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x600C0009, // 0001 GETGBL R3 G9
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x14080403, // 0004 LT R2 R2 R3
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: StaticValueProvider
-********************************************************************/
-extern const bclass be_class_ValueProvider;
-be_local_class(StaticValueProvider,
- 0,
- &be_class_ValueProvider,
- be_nested_map(9,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(_X3C_X3D, -1), be_const_closure(class_StaticValueProvider__X3C_X3D_closure) },
- { be_const_key_weak(_X3D_X3D, -1), be_const_closure(class_StaticValueProvider__X3D_X3D_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(1,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(value, -1), be_const_bytes_instance(0C0604) },
- })) ) } )) },
- { be_const_key_weak(produce_value, -1), be_const_closure(class_StaticValueProvider_produce_value_closure) },
- { be_const_key_weak(_X21_X3D, -1), be_const_closure(class_StaticValueProvider__X21_X3D_closure) },
- { be_const_key_weak(_X3E_X3D, 1), be_const_closure(class_StaticValueProvider__X3E_X3D_closure) },
- { be_const_key_weak(_X3E, 2), be_const_closure(class_StaticValueProvider__X3E_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_StaticValueProvider_tostring_closure) },
- { be_const_key_weak(_X3C, -1), be_const_closure(class_StaticValueProvider__X3C_closure) },
- })),
- be_str_weak(StaticValueProvider)
-);
-
-/********************************************************************
-** Solidified function: square
-********************************************************************/
-be_local_closure(square, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(SQUARE),
- }),
- be_str_weak(square),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'EngineProxy' ktab size: 41, total: 114 (saved 584 bytes)
-static const bvalue be_ktab_class_EngineProxy[41] = {
- /* K0 */ be_nested_str_weak(animations),
- /* K1 */ be_nested_str_weak(animation),
- /* K2 */ be_nested_str_weak(push),
- /* K3 */ be_nested_str_weak(stop_iteration),
- /* K4 */ be_nested_str_weak(time_ms),
- /* K5 */ be_nested_str_weak(strip_length),
- /* K6 */ be_nested_str_weak(engine),
- /* K7 */ be_nested_str_weak(update),
- /* K8 */ be_const_int(0),
- /* K9 */ be_nested_str_weak(value_providers),
- /* K10 */ be_nested_str_weak(is_running),
- /* K11 */ be_nested_str_weak(start_time),
- /* K12 */ be_const_int(1),
- /* K13 */ be_nested_str_weak(sequences),
- /* K14 */ be_nested_str_weak(_X25s_X28animations_X3D_X25s_X2C_X20sequences_X3D_X25s_X2C_X20value_providers_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K15 */ be_nested_str_weak(find),
- /* K16 */ be_nested_str_weak(remove),
- /* K17 */ be_nested_str_weak(iteration_stack),
- /* K18 */ be_nested_str_weak(priority),
- /* K19 */ be_nested_str_weak(temp_buffer),
- /* K20 */ be_nested_str_weak(clear),
- /* K21 */ be_nested_str_weak(render),
- /* K22 */ be_nested_str_weak(post_render),
- /* K23 */ be_nested_str_weak(blend_pixels),
- /* K24 */ be_nested_str_weak(pixels),
- /* K25 */ be_nested_str_weak(sequence_manager),
- /* K26 */ be_nested_str_weak(_add_sequence_manager),
- /* K27 */ be_nested_str_weak(value_provider),
- /* K28 */ be_nested_str_weak(_add_value_provider),
- /* K29 */ be_nested_str_weak(_add_animation),
- /* K30 */ be_nested_str_weak(type_error),
- /* K31 */ be_nested_str_weak(only_X20Animation_X2C_X20SequenceManager_X2C_X20or_X20ValueProvider),
- /* K32 */ be_nested_str_weak(stop),
- /* K33 */ be_nested_str_weak(init),
- /* K34 */ be_nested_str_weak(setup_template),
- /* K35 */ be_nested_str_weak(_sort_animations_by_priority),
- /* K36 */ be_nested_str_weak(start),
- /* K37 */ be_nested_str_weak(pop),
- /* K38 */ be_nested_str_weak(_remove_sequence_manager),
- /* K39 */ be_nested_str_weak(_remove_value_provider),
- /* K40 */ be_nested_str_weak(_remove_animation),
-};
-
-
-extern const bclass be_class_EngineProxy;
-
-/********************************************************************
-** Solidified function: get_animations
-********************************************************************/
-be_local_closure(class_EngineProxy_get_animations, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(get_animations),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x60040012, // 0000 GETGBL R1 G18
- 0x7C040000, // 0001 CALL R1 0
- 0x60080010, // 0002 GETGBL R2 G16
- 0x880C0100, // 0003 GETMBR R3 R0 K0
- 0x7C080200, // 0004 CALL R2 1
- 0xA802000B, // 0005 EXBLK 0 #0012
- 0x5C0C0400, // 0006 MOVE R3 R2
- 0x7C0C0000, // 0007 CALL R3 0
- 0x6010000F, // 0008 GETGBL R4 G15
- 0x5C140600, // 0009 MOVE R5 R3
- 0xB81A0200, // 000A GETNGBL R6 K1
- 0x88180D01, // 000B GETMBR R6 R6 K1
- 0x7C100400, // 000C CALL R4 2
- 0x78120002, // 000D JMPF R4 #0011
- 0x8C100302, // 000E GETMET R4 R1 K2
- 0x5C180600, // 000F MOVE R6 R3
- 0x7C100400, // 0010 CALL R4 2
- 0x7001FFF3, // 0011 JMP #0006
- 0x58080003, // 0012 LDCONST R2 K3
- 0xAC080200, // 0013 CATCH R2 1 0
- 0xB0080000, // 0014 RAISE 2 R0 R0
- 0x80040200, // 0015 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_EngineProxy_update, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[73]) { /* code */
- 0x90020801, // 0000 SETMBR R0 K4 R1
- 0x88080106, // 0001 GETMBR R2 R0 K6
- 0x88080505, // 0002 GETMBR R2 R2 K5
- 0x90020A02, // 0003 SETMBR R0 K5 R2
- 0x60080003, // 0004 GETGBL R2 G3
- 0x5C0C0000, // 0005 MOVE R3 R0
- 0x7C080200, // 0006 CALL R2 1
- 0x8C080507, // 0007 GETMET R2 R2 K7
- 0x5C100200, // 0008 MOVE R4 R1
- 0x7C080400, // 0009 CALL R2 2
- 0x58080008, // 000A LDCONST R2 K8
- 0x600C000C, // 000B GETGBL R3 G12
- 0x88100109, // 000C GETMBR R4 R0 K9
- 0x7C0C0200, // 000D CALL R3 1
- 0x14100403, // 000E LT R4 R2 R3
- 0x7812000D, // 000F JMPF R4 #001E
- 0x88100109, // 0010 GETMBR R4 R0 K9
- 0x94100802, // 0011 GETIDX R4 R4 R2
- 0x8814090A, // 0012 GETMBR R5 R4 K10
- 0x78160007, // 0013 JMPF R5 #001C
- 0x8814090B, // 0014 GETMBR R5 R4 K11
- 0x4C180000, // 0015 LDNIL R6
- 0x1C140A06, // 0016 EQ R5 R5 R6
- 0x78160000, // 0017 JMPF R5 #0019
- 0x90121601, // 0018 SETMBR R4 K11 R1
- 0x8C140907, // 0019 GETMET R5 R4 K7
- 0x5C1C0200, // 001A MOVE R7 R1
- 0x7C140400, // 001B CALL R5 2
- 0x0008050C, // 001C ADD R2 R2 K12
- 0x7001FFEF, // 001D JMP #000E
- 0x58080008, // 001E LDCONST R2 K8
- 0x6010000C, // 001F GETGBL R4 G12
- 0x8814010D, // 0020 GETMBR R5 R0 K13
- 0x7C100200, // 0021 CALL R4 1
- 0x5C0C0800, // 0022 MOVE R3 R4
- 0x14100403, // 0023 LT R4 R2 R3
- 0x7812000D, // 0024 JMPF R4 #0033
- 0x8810010D, // 0025 GETMBR R4 R0 K13
- 0x94100802, // 0026 GETIDX R4 R4 R2
- 0x8814090A, // 0027 GETMBR R5 R4 K10
- 0x78160007, // 0028 JMPF R5 #0031
- 0x8814090B, // 0029 GETMBR R5 R4 K11
- 0x4C180000, // 002A LDNIL R6
- 0x1C140A06, // 002B EQ R5 R5 R6
- 0x78160000, // 002C JMPF R5 #002E
- 0x90121601, // 002D SETMBR R4 K11 R1
- 0x8C140907, // 002E GETMET R5 R4 K7
- 0x5C1C0200, // 002F MOVE R7 R1
- 0x7C140400, // 0030 CALL R5 2
- 0x0008050C, // 0031 ADD R2 R2 K12
- 0x7001FFEF, // 0032 JMP #0023
- 0x58080008, // 0033 LDCONST R2 K8
- 0x6010000C, // 0034 GETGBL R4 G12
- 0x88140100, // 0035 GETMBR R5 R0 K0
- 0x7C100200, // 0036 CALL R4 1
- 0x5C0C0800, // 0037 MOVE R3 R4
- 0x14100403, // 0038 LT R4 R2 R3
- 0x7812000D, // 0039 JMPF R4 #0048
- 0x88100100, // 003A GETMBR R4 R0 K0
- 0x94100802, // 003B GETIDX R4 R4 R2
- 0x8814090A, // 003C GETMBR R5 R4 K10
- 0x78160007, // 003D JMPF R5 #0046
- 0x8814090B, // 003E GETMBR R5 R4 K11
- 0x4C180000, // 003F LDNIL R6
- 0x1C140A06, // 0040 EQ R5 R5 R6
- 0x78160000, // 0041 JMPF R5 #0043
- 0x90121601, // 0042 SETMBR R4 K11 R1
- 0x8C140907, // 0043 GETMET R5 R4 K7
- 0x5C1C0200, // 0044 MOVE R7 R1
- 0x7C140400, // 0045 CALL R5 2
- 0x0008050C, // 0046 ADD R2 R2 K12
- 0x7001FFEF, // 0047 JMP #0038
- 0x80000000, // 0048 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_EngineProxy_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x5808000E, // 0001 LDCONST R2 K14
- 0x600C0005, // 0002 GETGBL R3 G5
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x6010000C, // 0005 GETGBL R4 G12
- 0x88140100, // 0006 GETMBR R5 R0 K0
- 0x7C100200, // 0007 CALL R4 1
- 0x6014000C, // 0008 GETGBL R5 G12
- 0x8818010D, // 0009 GETMBR R6 R0 K13
- 0x7C140200, // 000A CALL R5 1
- 0x6018000C, // 000B GETGBL R6 G12
- 0x881C0109, // 000C GETMBR R7 R0 K9
- 0x7C180200, // 000D CALL R6 1
- 0x881C010A, // 000E GETMBR R7 R0 K10
- 0x7C040C00, // 000F CALL R1 6
- 0x80040200, // 0010 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: size_animations
-********************************************************************/
-be_local_closure(class_EngineProxy_size_animations, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(size_animations),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x7C040200, // 0002 CALL R1 1
- 0x80040200, // 0003 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _add_sequence_manager
-********************************************************************/
-be_local_closure(class_EngineProxy__add_sequence_manager, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_add_sequence_manager),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x8808010D, // 0000 GETMBR R2 R0 K13
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C080403, // 0005 EQ R2 R2 R3
- 0x780A0006, // 0006 JMPF R2 #000E
- 0x8808010D, // 0007 GETMBR R2 R0 K13
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0x50080200, // 000B LDBOOL R2 1 0
- 0x80040400, // 000C RET 1 R2
- 0x70020001, // 000D JMP #0010
- 0x50080000, // 000E LDBOOL R2 0 0
- 0x80040400, // 000F RET 1 R2
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _remove_value_provider
-********************************************************************/
-be_local_closure(class_EngineProxy__remove_value_provider, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_remove_value_provider),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x88080109, // 0000 GETMBR R2 R0 K9
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x200C0403, // 0005 NE R3 R2 R3
- 0x780E0006, // 0006 JMPF R3 #000E
- 0x880C0109, // 0007 GETMBR R3 R0 K9
- 0x8C0C0710, // 0008 GETMET R3 R3 K16
- 0x5C140400, // 0009 MOVE R5 R2
- 0x7C0C0400, // 000A CALL R3 2
- 0x500C0200, // 000B LDBOOL R3 1 0
- 0x80040600, // 000C RET 1 R3
- 0x70020001, // 000D JMP #0010
- 0x500C0000, // 000E LDBOOL R3 0 0
- 0x80040600, // 000F RET 1 R3
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: push_iteration_context
-********************************************************************/
-be_local_closure(class_EngineProxy_push_iteration_context, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(push_iteration_context),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x88080111, // 0000 GETMBR R2 R0 K17
- 0x8C080502, // 0001 GETMET R2 R2 K2
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _remove_sequence_manager
-********************************************************************/
-be_local_closure(class_EngineProxy__remove_sequence_manager, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_remove_sequence_manager),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x8808010D, // 0000 GETMBR R2 R0 K13
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x200C0403, // 0005 NE R3 R2 R3
- 0x780E0006, // 0006 JMPF R3 #000E
- 0x880C010D, // 0007 GETMBR R3 R0 K13
- 0x8C0C0710, // 0008 GETMET R3 R3 K16
- 0x5C140400, // 0009 MOVE R5 R2
- 0x7C0C0400, // 000A CALL R3 2
- 0x500C0200, // 000B LDBOOL R3 1 0
- 0x80040600, // 000C RET 1 R3
- 0x70020001, // 000D JMP #0010
- 0x500C0000, // 000E LDBOOL R3 0 0
- 0x80040600, // 000F RET 1 R3
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_current_iteration_number
-********************************************************************/
-be_local_closure(class_EngineProxy_get_current_iteration_number, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(get_current_iteration_number),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x88080111, // 0001 GETMBR R2 R0 K17
- 0x7C040200, // 0002 CALL R1 1
- 0x24040308, // 0003 GT R1 R1 K8
- 0x78060003, // 0004 JMPF R1 #0009
- 0x88040111, // 0005 GETMBR R1 R0 K17
- 0x5409FFFE, // 0006 LDINT R2 -1
- 0x94040202, // 0007 GETIDX R1 R1 R2
- 0x80040200, // 0008 RET 1 R1
- 0x4C040000, // 0009 LDNIL R1
- 0x80040200, // 000A RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _sort_animations_by_priority
-********************************************************************/
-be_local_closure(class_EngineProxy__sort_animations_by_priority, /* name */
+be_local_closure(animation_version_string, /* name */
be_nested_proto(
9, /* nstack */
1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_sort_animations_by_priority),
- &be_const_str_solidified,
- ( &(const binstruction[48]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x7C040200, // 0002 CALL R1 1
- 0x1808030C, // 0003 LE R2 R1 K12
- 0x780A0000, // 0004 JMPF R2 #0006
- 0x80000400, // 0005 RET 0
- 0x5808000C, // 0006 LDCONST R2 K12
- 0x140C0401, // 0007 LT R3 R2 R1
- 0x780E0025, // 0008 JMPF R3 #002F
- 0x880C0100, // 0009 GETMBR R3 R0 K0
- 0x940C0602, // 000A GETIDX R3 R3 R2
- 0x6010000F, // 000B GETGBL R4 G15
- 0x5C140600, // 000C MOVE R5 R3
- 0xB81A0200, // 000D GETNGBL R6 K1
- 0x88180D01, // 000E GETMBR R6 R6 K1
- 0x7C100400, // 000F CALL R4 2
- 0x74120001, // 0010 JMPT R4 #0013
- 0x0008050C, // 0011 ADD R2 R2 K12
- 0x7001FFF3, // 0012 JMP #0007
- 0x5C100400, // 0013 MOVE R4 R2
- 0x24140908, // 0014 GT R5 R4 K8
- 0x78160014, // 0015 JMPF R5 #002B
- 0x0414090C, // 0016 SUB R5 R4 K12
- 0x88180100, // 0017 GETMBR R6 R0 K0
- 0x94140C05, // 0018 GETIDX R5 R6 R5
- 0x6018000F, // 0019 GETGBL R6 G15
- 0x5C1C0A00, // 001A MOVE R7 R5
- 0xB8220200, // 001B GETNGBL R8 K1
- 0x88201101, // 001C GETMBR R8 R8 K1
- 0x7C180400, // 001D CALL R6 2
- 0x781A0003, // 001E JMPF R6 #0023
- 0x88180B12, // 001F GETMBR R6 R5 K18
- 0x881C0712, // 0020 GETMBR R7 R3 K18
- 0x28180C07, // 0021 GE R6 R6 R7
- 0x781A0000, // 0022 JMPF R6 #0024
- 0x70020006, // 0023 JMP #002B
- 0x88180100, // 0024 GETMBR R6 R0 K0
- 0x041C090C, // 0025 SUB R7 R4 K12
- 0x88200100, // 0026 GETMBR R8 R0 K0
- 0x941C1007, // 0027 GETIDX R7 R8 R7
- 0x98180807, // 0028 SETIDX R6 R4 R7
- 0x0410090C, // 0029 SUB R4 R4 K12
- 0x7001FFE8, // 002A JMP #0014
- 0x88140100, // 002B GETMBR R5 R0 K0
- 0x98140803, // 002C SETIDX R5 R4 R3
- 0x0008050C, // 002D ADD R2 R2 K12
- 0x7001FFD7, // 002E JMP #0007
- 0x80000000, // 002F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_EngineProxy_render, /* name */
- be_nested_proto(
- 14, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[45]) { /* code */
- 0x8810010A, // 0000 GETMBR R4 R0 K10
- 0x78120002, // 0001 JMPF R4 #0005
- 0x4C100000, // 0002 LDNIL R4
- 0x1C100204, // 0003 EQ R4 R1 R4
- 0x78120001, // 0004 JMPF R4 #0007
- 0x50100000, // 0005 LDBOOL R4 0 0
- 0x80040800, // 0006 RET 1 R4
- 0x4C100000, // 0007 LDNIL R4
- 0x1C100604, // 0008 EQ R4 R3 R4
- 0x78120000, // 0009 JMPF R4 #000B
- 0x880C0105, // 000A GETMBR R3 R0 K5
- 0x50100000, // 000B LDBOOL R4 0 0
- 0x58140008, // 000C LDCONST R5 K8
- 0x6018000C, // 000D GETGBL R6 G12
- 0x881C0100, // 000E GETMBR R7 R0 K0
- 0x7C180200, // 000F CALL R6 1
- 0x141C0A06, // 0010 LT R7 R5 R6
- 0x781E0019, // 0011 JMPF R7 #002C
- 0x881C0100, // 0012 GETMBR R7 R0 K0
- 0x941C0E05, // 0013 GETIDX R7 R7 R5
- 0x88200F0A, // 0014 GETMBR R8 R7 K10
- 0x78220013, // 0015 JMPF R8 #002A
- 0x88200113, // 0016 GETMBR R8 R0 K19
- 0x8C201114, // 0017 GETMET R8 R8 K20
- 0x7C200200, // 0018 CALL R8 1
- 0x8C200F15, // 0019 GETMET R8 R7 K21
- 0x88280113, // 001A GETMBR R10 R0 K19
- 0x5C2C0400, // 001B MOVE R11 R2
- 0x5C300600, // 001C MOVE R12 R3
- 0x7C200800, // 001D CALL R8 4
- 0x7822000A, // 001E JMPF R8 #002A
- 0x8C240F16, // 001F GETMET R9 R7 K22
- 0x882C0113, // 0020 GETMBR R11 R0 K19
- 0x5C300400, // 0021 MOVE R12 R2
- 0x5C340600, // 0022 MOVE R13 R3
- 0x7C240800, // 0023 CALL R9 4
- 0x8C240317, // 0024 GETMET R9 R1 K23
- 0x882C0318, // 0025 GETMBR R11 R1 K24
- 0x88300113, // 0026 GETMBR R12 R0 K19
- 0x88301918, // 0027 GETMBR R12 R12 K24
- 0x7C240600, // 0028 CALL R9 3
- 0x50100200, // 0029 LDBOOL R4 1 0
- 0x00140B0C, // 002A ADD R5 R5 K12
- 0x7001FFE3, // 002B JMP #0010
- 0x80040800, // 002C RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add
-********************************************************************/
-be_local_closure(class_EngineProxy_add, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(add),
- &be_const_str_solidified,
- ( &(const binstruction[35]) { /* code */
- 0x6008000F, // 0000 GETGBL R2 G15
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0xB8120200, // 0002 GETNGBL R4 K1
- 0x88100919, // 0003 GETMBR R4 R4 K25
- 0x7C080400, // 0004 CALL R2 2
- 0x780A0004, // 0005 JMPF R2 #000B
- 0x8C08011A, // 0006 GETMET R2 R0 K26
- 0x5C100200, // 0007 MOVE R4 R1
- 0x7C080400, // 0008 CALL R2 2
- 0x80040400, // 0009 RET 1 R2
- 0x70020016, // 000A JMP #0022
- 0x6008000F, // 000B GETGBL R2 G15
- 0x5C0C0200, // 000C MOVE R3 R1
- 0xB8120200, // 000D GETNGBL R4 K1
- 0x8810091B, // 000E GETMBR R4 R4 K27
- 0x7C080400, // 000F CALL R2 2
- 0x780A0004, // 0010 JMPF R2 #0016
- 0x8C08011C, // 0011 GETMET R2 R0 K28
- 0x5C100200, // 0012 MOVE R4 R1
- 0x7C080400, // 0013 CALL R2 2
- 0x80040400, // 0014 RET 1 R2
- 0x7002000B, // 0015 JMP #0022
- 0x6008000F, // 0016 GETGBL R2 G15
- 0x5C0C0200, // 0017 MOVE R3 R1
- 0xB8120200, // 0018 GETNGBL R4 K1
- 0x88100901, // 0019 GETMBR R4 R4 K1
- 0x7C080400, // 001A CALL R2 2
- 0x780A0004, // 001B JMPF R2 #0021
- 0x8C08011D, // 001C GETMET R2 R0 K29
- 0x5C100200, // 001D MOVE R4 R1
- 0x7C080400, // 001E CALL R2 2
- 0x80040400, // 001F RET 1 R2
- 0x70020000, // 0020 JMP #0022
- 0xB0063D1F, // 0021 RAISE 1 K30 K31
- 0x80000000, // 0022 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: stop
-********************************************************************/
-be_local_closure(class_EngineProxy_stop, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(stop),
- &be_const_str_solidified,
- ( &(const binstruction[30]) { /* code */
- 0x58040008, // 0000 LDCONST R1 K8
- 0x6008000C, // 0001 GETGBL R2 G12
- 0x880C0100, // 0002 GETMBR R3 R0 K0
- 0x7C080200, // 0003 CALL R2 1
- 0x14080202, // 0004 LT R2 R1 R2
- 0x780A0005, // 0005 JMPF R2 #000C
- 0x88080100, // 0006 GETMBR R2 R0 K0
- 0x94080401, // 0007 GETIDX R2 R2 R1
- 0x8C080520, // 0008 GETMET R2 R2 K32
- 0x7C080200, // 0009 CALL R2 1
- 0x0004030C, // 000A ADD R1 R1 K12
- 0x7001FFF4, // 000B JMP #0001
- 0x58040008, // 000C LDCONST R1 K8
- 0x6008000C, // 000D GETGBL R2 G12
- 0x880C010D, // 000E GETMBR R3 R0 K13
- 0x7C080200, // 000F CALL R2 1
- 0x14080202, // 0010 LT R2 R1 R2
- 0x780A0005, // 0011 JMPF R2 #0018
- 0x8808010D, // 0012 GETMBR R2 R0 K13
- 0x94080401, // 0013 GETIDX R2 R2 R1
- 0x8C080520, // 0014 GETMET R2 R2 K32
- 0x7C080200, // 0015 CALL R2 1
- 0x0004030C, // 0016 ADD R1 R1 K12
- 0x7001FFF4, // 0017 JMP #000D
- 0x60080003, // 0018 GETGBL R2 G3
- 0x5C0C0000, // 0019 MOVE R3 R0
- 0x7C080200, // 001A CALL R2 1
- 0x8C080520, // 001B GETMET R2 R2 K32
- 0x7C080200, // 001C CALL R2 1
- 0x80040000, // 001D RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update_current_iteration
-********************************************************************/
-be_local_closure(class_EngineProxy_update_current_iteration, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(update_current_iteration),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x6008000C, // 0000 GETGBL R2 G12
- 0x880C0111, // 0001 GETMBR R3 R0 K17
- 0x7C080200, // 0002 CALL R2 1
- 0x24080508, // 0003 GT R2 R2 K8
- 0x780A0002, // 0004 JMPF R2 #0008
- 0x88080111, // 0005 GETMBR R2 R0 K17
- 0x540DFFFE, // 0006 LDINT R3 -1
- 0x98080601, // 0007 SETIDX R2 R3 R1
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_EngineProxy_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080521, // 0003 GETMET R2 R2 K33
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080106, // 0006 GETMBR R2 R0 K6
- 0x88080513, // 0007 GETMBR R2 R2 K19
- 0x90022602, // 0008 SETMBR R0 K19 R2
- 0x60080012, // 0009 GETGBL R2 G18
- 0x7C080000, // 000A CALL R2 0
- 0x90020002, // 000B SETMBR R0 K0 R2
- 0x60080012, // 000C GETGBL R2 G18
- 0x7C080000, // 000D CALL R2 0
- 0x90021A02, // 000E SETMBR R0 K13 R2
- 0x60080012, // 000F GETGBL R2 G18
- 0x7C080000, // 0010 CALL R2 0
- 0x90021202, // 0011 SETMBR R0 K9 R2
- 0x60080012, // 0012 GETGBL R2 G18
- 0x7C080000, // 0013 CALL R2 0
- 0x90022202, // 0014 SETMBR R0 K17 R2
- 0x90020908, // 0015 SETMBR R0 K4 K8
- 0x8C080122, // 0016 GETMET R2 R0 K34
- 0x7C080200, // 0017 CALL R2 1
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _add_animation
-********************************************************************/
-be_local_closure(class_EngineProxy__add_animation, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_add_animation),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C080403, // 0005 EQ R2 R2 R3
- 0x780A000E, // 0006 JMPF R2 #0016
- 0x88080100, // 0007 GETMBR R2 R0 K0
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0x8C080123, // 000B GETMET R2 R0 K35
- 0x7C080200, // 000C CALL R2 1
- 0x8808010A, // 000D GETMBR R2 R0 K10
- 0x780A0003, // 000E JMPF R2 #0013
- 0x8C080324, // 000F GETMET R2 R1 K36
- 0x88100106, // 0010 GETMBR R4 R0 K6
- 0x88100904, // 0011 GETMBR R4 R4 K4
- 0x7C080400, // 0012 CALL R2 2
- 0x50080200, // 0013 LDBOOL R2 1 0
- 0x80040400, // 0014 RET 1 R2
- 0x70020001, // 0015 JMP #0018
- 0x50080000, // 0016 LDBOOL R2 0 0
- 0x80040400, // 0017 RET 1 R2
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _add_value_provider
-********************************************************************/
-be_local_closure(class_EngineProxy__add_value_provider, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_add_value_provider),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x88080109, // 0000 GETMBR R2 R0 K9
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C080403, // 0005 EQ R2 R2 R3
- 0x780A0006, // 0006 JMPF R2 #000E
- 0x88080109, // 0007 GETMBR R2 R0 K9
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0x50080200, // 000B LDBOOL R2 1 0
- 0x80040400, // 000C RET 1 R2
- 0x70020001, // 000D JMP #0010
- 0x50080000, // 000E LDBOOL R2 0 0
- 0x80040400, // 000F RET 1 R2
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: is_empty
-********************************************************************/
-be_local_closure(class_EngineProxy_is_empty, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(is_empty),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x7C040200, // 0002 CALL R1 1
- 0x1C040308, // 0003 EQ R1 R1 K8
- 0x78060009, // 0004 JMPF R1 #000F
- 0x6004000C, // 0005 GETGBL R1 G12
- 0x8808010D, // 0006 GETMBR R2 R0 K13
- 0x7C040200, // 0007 CALL R1 1
- 0x1C040308, // 0008 EQ R1 R1 K8
- 0x78060004, // 0009 JMPF R1 #000F
- 0x6004000C, // 000A GETGBL R1 G12
- 0x88080109, // 000B GETMBR R2 R0 K9
- 0x7C040200, // 000C CALL R1 1
- 0x1C040308, // 000D EQ R1 R1 K8
- 0x74060000, // 000E JMPT R1 #0010
- 0x50040001, // 000F LDBOOL R1 0 1
- 0x50040200, // 0010 LDBOOL R1 1 0
- 0x80040200, // 0011 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: pop_iteration_context
-********************************************************************/
-be_local_closure(class_EngineProxy_pop_iteration_context, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(pop_iteration_context),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x88080111, // 0001 GETMBR R2 R0 K17
- 0x7C040200, // 0002 CALL R1 1
- 0x24040308, // 0003 GT R1 R1 K8
- 0x78060003, // 0004 JMPF R1 #0009
- 0x88040111, // 0005 GETMBR R1 R0 K17
- 0x8C040325, // 0006 GETMET R1 R1 K37
- 0x7C040200, // 0007 CALL R1 1
- 0x80040200, // 0008 RET 1 R1
- 0x4C040000, // 0009 LDNIL R1
- 0x80040200, // 000A RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: setup_template
-********************************************************************/
-be_local_closure(class_EngineProxy_setup_template, /* name */
- be_nested_proto(
- 1, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(setup_template),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_strip_length
-********************************************************************/
-be_local_closure(class_EngineProxy_get_strip_length, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(get_strip_length),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x88040106, // 0000 GETMBR R1 R0 K6
- 0x88040305, // 0001 GETMBR R1 R1 K5
- 0x80040200, // 0002 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: clear
-********************************************************************/
-be_local_closure(class_EngineProxy_clear, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(clear),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x8C040120, // 0000 GETMET R1 R0 K32
- 0x7C040200, // 0001 CALL R1 1
- 0x60040012, // 0002 GETGBL R1 G18
- 0x7C040000, // 0003 CALL R1 0
- 0x90020001, // 0004 SETMBR R0 K0 R1
- 0x60040012, // 0005 GETGBL R1 G18
- 0x7C040000, // 0006 CALL R1 0
- 0x90021A01, // 0007 SETMBR R0 K13 R1
- 0x60040012, // 0008 GETGBL R1 G18
- 0x7C040000, // 0009 CALL R1 0
- 0x90021201, // 000A SETMBR R0 K9 R1
- 0x80040000, // 000B RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove
-********************************************************************/
-be_local_closure(class_EngineProxy_remove, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(remove),
- &be_const_str_solidified,
- ( &(const binstruction[34]) { /* code */
- 0x6008000F, // 0000 GETGBL R2 G15
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0xB8120200, // 0002 GETNGBL R4 K1
- 0x88100919, // 0003 GETMBR R4 R4 K25
- 0x7C080400, // 0004 CALL R2 2
- 0x780A0004, // 0005 JMPF R2 #000B
- 0x8C080126, // 0006 GETMET R2 R0 K38
- 0x5C100200, // 0007 MOVE R4 R1
- 0x7C080400, // 0008 CALL R2 2
- 0x80040400, // 0009 RET 1 R2
- 0x70020015, // 000A JMP #0021
- 0x6008000F, // 000B GETGBL R2 G15
- 0x5C0C0200, // 000C MOVE R3 R1
- 0xB8120200, // 000D GETNGBL R4 K1
- 0x8810091B, // 000E GETMBR R4 R4 K27
- 0x7C080400, // 000F CALL R2 2
- 0x780A0004, // 0010 JMPF R2 #0016
- 0x8C080127, // 0011 GETMET R2 R0 K39
- 0x5C100200, // 0012 MOVE R4 R1
- 0x7C080400, // 0013 CALL R2 2
- 0x80040400, // 0014 RET 1 R2
- 0x7002000A, // 0015 JMP #0021
- 0x6008000F, // 0016 GETGBL R2 G15
- 0x5C0C0200, // 0017 MOVE R3 R1
- 0xB8120200, // 0018 GETNGBL R4 K1
- 0x88100901, // 0019 GETMBR R4 R4 K1
- 0x7C080400, // 001A CALL R2 2
- 0x780A0004, // 001B JMPF R2 #0021
- 0x8C080128, // 001C GETMET R2 R0 K40
- 0x5C100200, // 001D MOVE R4 R1
- 0x7C080400, // 001E CALL R2 2
- 0x80040400, // 001F RET 1 R2
- 0x7001FFFF, // 0020 JMP #0021
- 0x80000000, // 0021 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _remove_animation
-********************************************************************/
-be_local_closure(class_EngineProxy__remove_animation, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(_remove_animation),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C08050F, // 0001 GETMET R2 R2 K15
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x200C0403, // 0005 NE R3 R2 R3
- 0x780E0006, // 0006 JMPF R3 #000E
- 0x880C0100, // 0007 GETMBR R3 R0 K0
- 0x8C0C0710, // 0008 GETMET R3 R3 K16
- 0x5C140400, // 0009 MOVE R5 R2
- 0x7C0C0400, // 000A CALL R3 2
- 0x500C0200, // 000B LDBOOL R3 1 0
- 0x80040600, // 000C RET 1 R3
- 0x70020001, // 000D JMP #0010
- 0x500C0000, // 000E LDBOOL R3 0 0
- 0x80040600, // 000F RET 1 R3
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start
-********************************************************************/
-be_local_closure(class_EngineProxy_start, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EngineProxy, /* shared constants */
- be_str_weak(start),
- &be_const_str_solidified,
- ( &(const binstruction[46]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080524, // 0003 GETMET R2 R2 K36
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x58080008, // 0006 LDCONST R2 K8
- 0x600C000C, // 0007 GETGBL R3 G12
- 0x8810010D, // 0008 GETMBR R4 R0 K13
- 0x7C0C0200, // 0009 CALL R3 1
- 0x140C0403, // 000A LT R3 R2 R3
- 0x780E0006, // 000B JMPF R3 #0013
- 0x880C010D, // 000C GETMBR R3 R0 K13
- 0x940C0602, // 000D GETIDX R3 R3 R2
- 0x8C0C0724, // 000E GETMET R3 R3 K36
- 0x5C140200, // 000F MOVE R5 R1
- 0x7C0C0400, // 0010 CALL R3 2
- 0x0008050C, // 0011 ADD R2 R2 K12
- 0x7001FFF3, // 0012 JMP #0007
- 0x58080008, // 0013 LDCONST R2 K8
- 0x600C000C, // 0014 GETGBL R3 G12
- 0x88100109, // 0015 GETMBR R4 R0 K9
- 0x7C0C0200, // 0016 CALL R3 1
- 0x140C0403, // 0017 LT R3 R2 R3
- 0x780E0006, // 0018 JMPF R3 #0020
- 0x880C0109, // 0019 GETMBR R3 R0 K9
- 0x940C0602, // 001A GETIDX R3 R3 R2
- 0x8C0C0724, // 001B GETMET R3 R3 K36
- 0x5C140200, // 001C MOVE R5 R1
- 0x7C0C0400, // 001D CALL R3 2
- 0x0008050C, // 001E ADD R2 R2 K12
- 0x7001FFF3, // 001F JMP #0014
- 0x58080008, // 0020 LDCONST R2 K8
- 0x600C000C, // 0021 GETGBL R3 G12
- 0x88100100, // 0022 GETMBR R4 R0 K0
- 0x7C0C0200, // 0023 CALL R3 1
- 0x140C0403, // 0024 LT R3 R2 R3
- 0x780E0006, // 0025 JMPF R3 #002D
- 0x880C0100, // 0026 GETMBR R3 R0 K0
- 0x940C0602, // 0027 GETIDX R3 R3 R2
- 0x8C0C0724, // 0028 GETMET R3 R3 K36
- 0x5C140200, // 0029 MOVE R5 R1
- 0x7C0C0400, // 002A CALL R3 2
- 0x0008050C, // 002B ADD R2 R2 K12
- 0x7001FFF3, // 002C JMP #0021
- 0x80040000, // 002D RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: EngineProxy
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(EngineProxy,
- 7,
- &be_class_Animation,
- be_nested_map(32,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(start, -1), be_const_closure(class_EngineProxy_start_closure) },
- { be_const_key_weak(sequences, -1), be_const_var(1) },
- { be_const_key_weak(temp_buffer, 15), be_const_var(4) },
- { be_const_key_weak(iteration_stack, -1), be_const_var(5) },
- { be_const_key_weak(_remove_animation, -1), be_const_closure(class_EngineProxy__remove_animation_closure) },
- { be_const_key_weak(tostring, 16), be_const_closure(class_EngineProxy_tostring_closure) },
- { be_const_key_weak(size_animations, -1), be_const_closure(class_EngineProxy_size_animations_closure) },
- { be_const_key_weak(_add_sequence_manager, 4), be_const_closure(class_EngineProxy__add_sequence_manager_closure) },
- { be_const_key_weak(_remove_value_provider, -1), be_const_closure(class_EngineProxy__remove_value_provider_closure) },
- { be_const_key_weak(push_iteration_context, -1), be_const_closure(class_EngineProxy_push_iteration_context_closure) },
- { be_const_key_weak(_remove_sequence_manager, 12), be_const_closure(class_EngineProxy__remove_sequence_manager_closure) },
- { be_const_key_weak(get_current_iteration_number, -1), be_const_closure(class_EngineProxy_get_current_iteration_number_closure) },
- { be_const_key_weak(animations, -1), be_const_var(0) },
- { be_const_key_weak(render, -1), be_const_closure(class_EngineProxy_render_closure) },
- { be_const_key_weak(strip_length, -1), be_const_var(3) },
- { be_const_key_weak(clear, -1), be_const_closure(class_EngineProxy_clear_closure) },
- { be_const_key_weak(stop, 30), be_const_closure(class_EngineProxy_stop_closure) },
- { be_const_key_weak(time_ms, -1), be_const_var(6) },
- { be_const_key_weak(update_current_iteration, -1), be_const_closure(class_EngineProxy_update_current_iteration_closure) },
- { be_const_key_weak(init, 22), be_const_closure(class_EngineProxy_init_closure) },
- { be_const_key_weak(update, 26), be_const_closure(class_EngineProxy_update_closure) },
- { be_const_key_weak(_add_value_provider, 17), be_const_closure(class_EngineProxy__add_value_provider_closure) },
- { be_const_key_weak(is_empty, -1), be_const_closure(class_EngineProxy_is_empty_closure) },
- { be_const_key_weak(value_providers, -1), be_const_var(2) },
- { be_const_key_weak(pop_iteration_context, -1), be_const_closure(class_EngineProxy_pop_iteration_context_closure) },
- { be_const_key_weak(setup_template, -1), be_const_closure(class_EngineProxy_setup_template_closure) },
- { be_const_key_weak(_add_animation, 28), be_const_closure(class_EngineProxy__add_animation_closure) },
- { be_const_key_weak(get_strip_length, -1), be_const_closure(class_EngineProxy_get_strip_length_closure) },
- { be_const_key_weak(add, -1), be_const_closure(class_EngineProxy_add_closure) },
- { be_const_key_weak(remove, -1), be_const_closure(class_EngineProxy_remove_closure) },
- { be_const_key_weak(_sort_animations_by_priority, -1), be_const_closure(class_EngineProxy__sort_animations_by_priority_closure) },
- { be_const_key_weak(get_animations, 0), be_const_closure(class_EngineProxy_get_animations_closure) },
- })),
- be_str_weak(EngineProxy)
-);
-// compact class 'NoiseAnimation' ktab size: 49, total: 101 (saved 416 bytes)
-static const bvalue be_ktab_class_NoiseAnimation[49] = {
- /* K0 */ be_nested_str_weak(init),
- /* K1 */ be_nested_str_weak(engine),
- /* K2 */ be_nested_str_weak(strip_length),
- /* K3 */ be_nested_str_weak(current_colors),
- /* K4 */ be_nested_str_weak(resize),
- /* K5 */ be_nested_str_weak(time_offset),
- /* K6 */ be_const_int(0),
- /* K7 */ be_const_int(-16777216),
- /* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(noise_table),
- /* K10 */ be_nested_str_weak(color),
- /* K11 */ be_nested_str_weak(animation),
- /* K12 */ be_nested_str_weak(rich_palette),
- /* K13 */ be_nested_str_weak(palette),
- /* K14 */ be_nested_str_weak(PALETTE_RAINBOW),
- /* K15 */ be_nested_str_weak(cycle_period),
- /* K16 */ be_nested_str_weak(transition_type),
- /* K17 */ be_nested_str_weak(brightness),
- /* K18 */ be_nested_str_weak(int),
- /* K19 */ be_nested_str_weak(add),
- /* K20 */ be_nested_str_weak(setmember),
- /* K21 */ be_nested_str_weak(seed),
- /* K22 */ be_const_int(1103515245),
- /* K23 */ be_const_int(2147483647),
- /* K24 */ be_nested_str_weak(update),
- /* K25 */ be_nested_str_weak(speed),
- /* K26 */ be_nested_str_weak(start_time),
- /* K27 */ be_nested_str_weak(tasmota),
- /* K28 */ be_nested_str_weak(scale_uint),
- /* K29 */ be_nested_str_weak(_calculate_noise),
- /* K30 */ be_nested_str_weak(_fractal_noise),
- /* K31 */ be_nested_str_weak(is_color_provider),
- /* K32 */ be_nested_str_weak(get_color_for_value),
- /* K33 */ be_nested_str_weak(resolve_value),
- /* K34 */ be_nested_str_weak(on_param_changed),
- /* K35 */ be_nested_str_weak(_init_noise_table),
- /* K36 */ be_nested_str_weak(width),
- /* K37 */ be_nested_str_weak(set_pixel_color),
- /* K38 */ be_nested_str_weak(is_value_provider),
- /* K39 */ be_nested_str_weak(0x_X2508x),
- /* K40 */ be_nested_str_weak(NoiseAnimation_X28color_X3D_X25s_X2C_X20scale_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20octaves_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K41 */ be_nested_str_weak(scale),
- /* K42 */ be_nested_str_weak(octaves),
- /* K43 */ be_nested_str_weak(priority),
- /* K44 */ be_nested_str_weak(is_running),
- /* K45 */ be_nested_str_weak(start),
- /* K46 */ be_nested_str_weak(persistence),
- /* K47 */ be_nested_str_weak(_noise_1d),
- /* K48 */ be_const_int(2),
-};
-
-
-extern const bclass be_class_NoiseAnimation;
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_NoiseAnimation_init, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[44]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080101, // 0006 GETMBR R2 R0 K1
- 0x88080502, // 0007 GETMBR R2 R2 K2
- 0x600C0012, // 0008 GETGBL R3 G18
- 0x7C0C0000, // 0009 CALL R3 0
- 0x90020603, // 000A SETMBR R0 K3 R3
- 0x880C0103, // 000B GETMBR R3 R0 K3
- 0x8C0C0704, // 000C GETMET R3 R3 K4
- 0x5C140400, // 000D MOVE R5 R2
- 0x7C0C0400, // 000E CALL R3 2
- 0x90020B06, // 000F SETMBR R0 K5 K6
- 0x580C0006, // 0010 LDCONST R3 K6
- 0x14100602, // 0011 LT R4 R3 R2
- 0x78120003, // 0012 JMPF R4 #0017
- 0x88100103, // 0013 GETMBR R4 R0 K3
- 0x98100707, // 0014 SETIDX R4 R3 K7
- 0x000C0708, // 0015 ADD R3 R3 K8
- 0x7001FFF9, // 0016 JMP #0011
- 0x60100012, // 0017 GETGBL R4 G18
- 0x7C100000, // 0018 CALL R4 0
- 0x90021204, // 0019 SETMBR R0 K9 R4
- 0x8810010A, // 001A GETMBR R4 R0 K10
- 0x4C140000, // 001B LDNIL R5
- 0x1C100805, // 001C EQ R4 R4 R5
- 0x7812000C, // 001D JMPF R4 #002B
- 0xB8121600, // 001E GETNGBL R4 K11
- 0x8C10090C, // 001F GETMET R4 R4 K12
- 0x5C180200, // 0020 MOVE R6 R1
- 0x7C100400, // 0021 CALL R4 2
- 0xB8161600, // 0022 GETNGBL R5 K11
- 0x88140B0E, // 0023 GETMBR R5 R5 K14
- 0x90121A05, // 0024 SETMBR R4 K13 R5
- 0x54161387, // 0025 LDINT R5 5000
- 0x90121E05, // 0026 SETMBR R4 K15 R5
- 0x90122108, // 0027 SETMBR R4 K16 K8
- 0x541600FE, // 0028 LDINT R5 255
- 0x90122205, // 0029 SETMBR R4 K17 R5
- 0x90021404, // 002A SETMBR R0 K10 R4
- 0x80000000, // 002B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: setmember
-********************************************************************/
-be_local_closure(class_NoiseAnimation_setmember, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(setmember),
- &be_const_str_solidified,
- ( &(const binstruction[74]) { /* code */
- 0x1C0C030A, // 0000 EQ R3 R1 K10
- 0x780E003F, // 0001 JMPF R3 #0042
- 0x600C0004, // 0002 GETGBL R3 G4
- 0x5C100400, // 0003 MOVE R4 R2
- 0x7C0C0200, // 0004 CALL R3 1
- 0x1C0C0712, // 0005 EQ R3 R3 K18
- 0x780E003A, // 0006 JMPF R3 #0042
- 0x600C0015, // 0007 GETGBL R3 G21
- 0x7C0C0000, // 0008 CALL R3 0
- 0x8C100713, // 0009 GETMET R4 R3 K19
- 0x58180006, // 000A LDCONST R6 K6
- 0x581C0008, // 000B LDCONST R7 K8
- 0x7C100600, // 000C CALL R4 3
- 0x8C100713, // 000D GETMET R4 R3 K19
- 0x58180006, // 000E LDCONST R6 K6
- 0x581C0008, // 000F LDCONST R7 K8
- 0x7C100600, // 0010 CALL R4 3
- 0x8C100713, // 0011 GETMET R4 R3 K19
- 0x58180006, // 0012 LDCONST R6 K6
- 0x581C0008, // 0013 LDCONST R7 K8
- 0x7C100600, // 0014 CALL R4 3
- 0x8C100713, // 0015 GETMET R4 R3 K19
- 0x58180006, // 0016 LDCONST R6 K6
- 0x581C0008, // 0017 LDCONST R7 K8
- 0x7C100600, // 0018 CALL R4 3
- 0x8C100713, // 0019 GETMET R4 R3 K19
- 0x541A00FE, // 001A LDINT R6 255
- 0x581C0008, // 001B LDCONST R7 K8
- 0x7C100600, // 001C CALL R4 3
- 0x8C100713, // 001D GETMET R4 R3 K19
- 0x541A000F, // 001E LDINT R6 16
- 0x3C180406, // 001F SHR R6 R2 R6
- 0x541E00FE, // 0020 LDINT R7 255
- 0x2C180C07, // 0021 AND R6 R6 R7
- 0x581C0008, // 0022 LDCONST R7 K8
- 0x7C100600, // 0023 CALL R4 3
- 0x8C100713, // 0024 GETMET R4 R3 K19
- 0x541A0007, // 0025 LDINT R6 8
- 0x3C180406, // 0026 SHR R6 R2 R6
- 0x541E00FE, // 0027 LDINT R7 255
- 0x2C180C07, // 0028 AND R6 R6 R7
- 0x581C0008, // 0029 LDCONST R7 K8
- 0x7C100600, // 002A CALL R4 3
- 0x8C100713, // 002B GETMET R4 R3 K19
- 0x541A00FE, // 002C LDINT R6 255
- 0x2C180406, // 002D AND R6 R2 R6
- 0x581C0008, // 002E LDCONST R7 K8
- 0x7C100600, // 002F CALL R4 3
- 0xB8121600, // 0030 GETNGBL R4 K11
- 0x8C10090C, // 0031 GETMET R4 R4 K12
- 0x88180101, // 0032 GETMBR R6 R0 K1
- 0x7C100400, // 0033 CALL R4 2
- 0x90121A03, // 0034 SETMBR R4 K13 R3
- 0x54161387, // 0035 LDINT R5 5000
- 0x90121E05, // 0036 SETMBR R4 K15 R5
- 0x90122108, // 0037 SETMBR R4 K16 K8
- 0x541600FE, // 0038 LDINT R5 255
- 0x90122205, // 0039 SETMBR R4 K17 R5
- 0x60140003, // 003A GETGBL R5 G3
- 0x5C180000, // 003B MOVE R6 R0
- 0x7C140200, // 003C CALL R5 1
- 0x8C140B14, // 003D GETMET R5 R5 K20
- 0x5C1C0200, // 003E MOVE R7 R1
- 0x5C200800, // 003F MOVE R8 R4
- 0x7C140600, // 0040 CALL R5 3
- 0x70020006, // 0041 JMP #0049
- 0x600C0003, // 0042 GETGBL R3 G3
- 0x5C100000, // 0043 MOVE R4 R0
- 0x7C0C0200, // 0044 CALL R3 1
- 0x8C0C0714, // 0045 GETMET R3 R3 K20
- 0x5C140200, // 0046 MOVE R5 R1
- 0x5C180400, // 0047 MOVE R6 R2
- 0x7C0C0600, // 0048 CALL R3 3
- 0x80000000, // 0049 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _init_noise_table
-********************************************************************/
-be_local_closure(class_NoiseAnimation__init_noise_table, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(_init_noise_table),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x60040012, // 0000 GETGBL R1 G18
- 0x7C040000, // 0001 CALL R1 0
- 0x90021201, // 0002 SETMBR R0 K9 R1
- 0x88040109, // 0003 GETMBR R1 R0 K9
- 0x8C040304, // 0004 GETMET R1 R1 K4
- 0x540E00FF, // 0005 LDINT R3 256
- 0x7C040400, // 0006 CALL R1 2
- 0x88040115, // 0007 GETMBR R1 R0 K21
- 0x5C080200, // 0008 MOVE R2 R1
- 0x580C0006, // 0009 LDCONST R3 K6
- 0x541200FF, // 000A LDINT R4 256
- 0x14100604, // 000B LT R4 R3 R4
- 0x7812000A, // 000C JMPF R4 #0018
- 0x08100516, // 000D MUL R4 R2 K22
- 0x54163038, // 000E LDINT R5 12345
- 0x00100805, // 000F ADD R4 R4 R5
- 0x2C100917, // 0010 AND R4 R4 K23
- 0x5C080800, // 0011 MOVE R2 R4
- 0x88100109, // 0012 GETMBR R4 R0 K9
- 0x541600FF, // 0013 LDINT R5 256
- 0x10140405, // 0014 MOD R5 R2 R5
- 0x98100605, // 0015 SETIDX R4 R3 R5
- 0x000C0708, // 0016 ADD R3 R3 K8
- 0x7001FFF1, // 0017 JMP #000A
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_NoiseAnimation_update, /* name */
- be_nested_proto(
- 11, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080518, // 0003 GETMET R2 R2 K24
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080119, // 0006 GETMBR R2 R0 K25
- 0x240C0506, // 0007 GT R3 R2 K6
- 0x780E0011, // 0008 JMPF R3 #001B
- 0x880C011A, // 0009 GETMBR R3 R0 K26
- 0x040C0203, // 000A SUB R3 R1 R3
- 0xB8123600, // 000B GETNGBL R4 K27
- 0x8C10091C, // 000C GETMET R4 R4 K28
- 0x5C180400, // 000D MOVE R6 R2
- 0x581C0006, // 000E LDCONST R7 K6
- 0x542200FE, // 000F LDINT R8 255
- 0x58240006, // 0010 LDCONST R9 K6
- 0x542A0004, // 0011 LDINT R10 5
- 0x7C100C00, // 0012 CALL R4 6
- 0x24140906, // 0013 GT R5 R4 K6
- 0x78160005, // 0014 JMPF R5 #001B
- 0x08140604, // 0015 MUL R5 R3 R4
- 0x541A03E7, // 0016 LDINT R6 1000
- 0x0C140A06, // 0017 DIV R5 R5 R6
- 0x541A00FF, // 0018 LDINT R6 256
- 0x10140A06, // 0019 MOD R5 R5 R6
- 0x90020A05, // 001A SETMBR R0 K5 R5
- 0x8C0C011D, // 001B GETMET R3 R0 K29
- 0x5C140200, // 001C MOVE R5 R1
- 0x7C0C0400, // 001D CALL R3 2
- 0x80000000, // 001E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _calculate_noise
-********************************************************************/
-be_local_closure(class_NoiseAnimation__calculate_noise, /* name */
- be_nested_proto(
- 12, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(_calculate_noise),
- &be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x88080101, // 0000 GETMBR R2 R0 K1
- 0x88080502, // 0001 GETMBR R2 R2 K2
- 0x880C010A, // 0002 GETMBR R3 R0 K10
- 0x58100006, // 0003 LDCONST R4 K6
- 0x14140802, // 0004 LT R5 R4 R2
- 0x7816001F, // 0005 JMPF R5 #0026
- 0x8C14011E, // 0006 GETMET R5 R0 K30
- 0x5C1C0800, // 0007 MOVE R7 R4
- 0x88200105, // 0008 GETMBR R8 R0 K5
- 0x7C140600, // 0009 CALL R5 3
- 0x58180007, // 000A LDCONST R6 K7
- 0xB81E1600, // 000B GETNGBL R7 K11
- 0x8C1C0F1F, // 000C GETMET R7 R7 K31
- 0x5C240600, // 000D MOVE R9 R3
- 0x7C1C0400, // 000E CALL R7 2
- 0x781E0009, // 000F JMPF R7 #001A
- 0x881C0720, // 0010 GETMBR R7 R3 K32
- 0x4C200000, // 0011 LDNIL R8
- 0x201C0E08, // 0012 NE R7 R7 R8
- 0x781E0005, // 0013 JMPF R7 #001A
- 0x8C1C0720, // 0014 GETMET R7 R3 K32
- 0x5C240A00, // 0015 MOVE R9 R5
- 0x58280006, // 0016 LDCONST R10 K6
- 0x7C1C0600, // 0017 CALL R7 3
- 0x5C180E00, // 0018 MOVE R6 R7
- 0x70020007, // 0019 JMP #0022
- 0x8C1C0121, // 001A GETMET R7 R0 K33
- 0x5C240600, // 001B MOVE R9 R3
- 0x5828000A, // 001C LDCONST R10 K10
- 0x542E0009, // 001D LDINT R11 10
- 0x082C0A0B, // 001E MUL R11 R5 R11
- 0x002C020B, // 001F ADD R11 R1 R11
- 0x7C1C0800, // 0020 CALL R7 4
- 0x5C180E00, // 0021 MOVE R6 R7
- 0x881C0103, // 0022 GETMBR R7 R0 K3
- 0x981C0806, // 0023 SETIDX R7 R4 R6
- 0x00100908, // 0024 ADD R4 R4 K8
- 0x7001FFDD, // 0025 JMP #0004
- 0x80000000, // 0026 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_NoiseAnimation_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0722, // 0003 GETMET R3 R3 K34
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0315, // 0007 EQ R3 R1 K21
- 0x780E0001, // 0008 JMPF R3 #000B
- 0x8C0C0123, // 0009 GETMET R3 R0 K35
- 0x7C0C0200, // 000A CALL R3 1
- 0x880C0101, // 000B GETMBR R3 R0 K1
- 0x880C0702, // 000C GETMBR R3 R3 K2
- 0x6010000C, // 000D GETGBL R4 G12
- 0x88140103, // 000E GETMBR R5 R0 K3
- 0x7C100200, // 000F CALL R4 1
- 0x20100803, // 0010 NE R4 R4 R3
- 0x7812000C, // 0011 JMPF R4 #001F
- 0x88100103, // 0012 GETMBR R4 R0 K3
- 0x8C100904, // 0013 GETMET R4 R4 K4
- 0x5C180600, // 0014 MOVE R6 R3
- 0x7C100400, // 0015 CALL R4 2
- 0x6010000C, // 0016 GETGBL R4 G12
- 0x88140103, // 0017 GETMBR R5 R0 K3
- 0x7C100200, // 0018 CALL R4 1
- 0x14140803, // 0019 LT R5 R4 R3
- 0x78160003, // 001A JMPF R5 #001F
- 0x88140103, // 001B GETMBR R5 R0 K3
- 0x98140907, // 001C SETIDX R5 R4 K7
- 0x00100908, // 001D ADD R4 R4 K8
- 0x7001FFF9, // 001E JMP #0019
- 0x80000000, // 001F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_NoiseAnimation_render, /* name */
- be_nested_proto(
- 9, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x58100006, // 0000 LDCONST R4 K6
- 0x14140803, // 0001 LT R5 R4 R3
- 0x78160009, // 0002 JMPF R5 #000D
- 0x88140324, // 0003 GETMBR R5 R1 K36
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160004, // 0005 JMPF R5 #000B
- 0x8C140325, // 0006 GETMET R5 R1 K37
- 0x5C1C0800, // 0007 MOVE R7 R4
- 0x88200103, // 0008 GETMBR R8 R0 K3
- 0x94201004, // 0009 GETIDX R8 R8 R4
- 0x7C140600, // 000A CALL R5 3
- 0x00100908, // 000B ADD R4 R4 K8
- 0x7001FFF3, // 000C JMP #0001
- 0x50140200, // 000D LDBOOL R5 1 0
- 0x80040A00, // 000E RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_NoiseAnimation_tostring, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x8804010A, // 0000 GETMBR R1 R0 K10
- 0x4C080000, // 0001 LDNIL R2
- 0xB80E1600, // 0002 GETNGBL R3 K11
- 0x8C0C0726, // 0003 GETMET R3 R3 K38
- 0x5C140200, // 0004 MOVE R5 R1
- 0x7C0C0400, // 0005 CALL R3 2
- 0x780E0004, // 0006 JMPF R3 #000C
- 0x600C0008, // 0007 GETGBL R3 G8
- 0x5C100200, // 0008 MOVE R4 R1
- 0x7C0C0200, // 0009 CALL R3 1
- 0x5C080600, // 000A MOVE R2 R3
- 0x70020004, // 000B JMP #0011
- 0x600C0018, // 000C GETGBL R3 G24
- 0x58100027, // 000D LDCONST R4 K39
- 0x5C140200, // 000E MOVE R5 R1
- 0x7C0C0400, // 000F CALL R3 2
- 0x5C080600, // 0010 MOVE R2 R3
- 0x600C0018, // 0011 GETGBL R3 G24
- 0x58100028, // 0012 LDCONST R4 K40
- 0x5C140400, // 0013 MOVE R5 R2
- 0x88180129, // 0014 GETMBR R6 R0 K41
- 0x881C0119, // 0015 GETMBR R7 R0 K25
- 0x8820012A, // 0016 GETMBR R8 R0 K42
- 0x8824012B, // 0017 GETMBR R9 R0 K43
- 0x8828012C, // 0018 GETMBR R10 R0 K44
- 0x7C0C0E00, // 0019 CALL R3 7
- 0x80040600, // 001A RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start
-********************************************************************/
-be_local_closure(class_NoiseAnimation_start, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(start),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08052D, // 0003 GETMET R2 R2 K45
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x8C080123, // 0006 GETMET R2 R0 K35
- 0x7C080200, // 0007 CALL R2 1
- 0x90020B06, // 0008 SETMBR R0 K5 K6
- 0x80040000, // 0009 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _noise_1d
-********************************************************************/
-be_local_closure(class_NoiseAnimation__noise_1d, /* name */
- be_nested_proto(
- 14, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(_noise_1d),
- &be_const_str_solidified,
- ( &(const binstruction[36]) { /* code */
- 0x60080009, // 0000 GETGBL R2 G9
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x540E00FE, // 0003 LDINT R3 255
- 0x2C080403, // 0004 AND R2 R2 R3
- 0x600C0009, // 0005 GETGBL R3 G9
- 0x5C100200, // 0006 MOVE R4 R1
- 0x7C0C0200, // 0007 CALL R3 1
- 0x040C0203, // 0008 SUB R3 R1 R3
- 0x88100109, // 0009 GETMBR R4 R0 K9
- 0x94100802, // 000A GETIDX R4 R4 R2
- 0x00140508, // 000B ADD R5 R2 K8
- 0x541A00FE, // 000C LDINT R6 255
- 0x2C140A06, // 000D AND R5 R5 R6
- 0x88180109, // 000E GETMBR R6 R0 K9
- 0x94140C05, // 000F GETIDX R5 R6 R5
- 0xB81A3600, // 0010 GETNGBL R6 K27
- 0x8C180D1C, // 0011 GETMET R6 R6 K28
- 0x60200009, // 0012 GETGBL R8 G9
- 0x542600FF, // 0013 LDINT R9 256
- 0x08240609, // 0014 MUL R9 R3 R9
- 0x7C200200, // 0015 CALL R8 1
- 0x58240006, // 0016 LDCONST R9 K6
- 0x542A00FF, // 0017 LDINT R10 256
- 0x582C0006, // 0018 LDCONST R11 K6
- 0x543200FE, // 0019 LDINT R12 255
- 0x7C180C00, // 001A CALL R6 6
- 0xB81E3600, // 001B GETNGBL R7 K27
- 0x8C1C0F1C, // 001C GETMET R7 R7 K28
- 0x5C240C00, // 001D MOVE R9 R6
- 0x58280006, // 001E LDCONST R10 K6
- 0x542E00FE, // 001F LDINT R11 255
- 0x5C300800, // 0020 MOVE R12 R4
- 0x5C340A00, // 0021 MOVE R13 R5
- 0x7C1C0C00, // 0022 CALL R7 6
- 0x80040E00, // 0023 RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _fractal_noise
-********************************************************************/
-be_local_closure(class_NoiseAnimation__fractal_noise, /* name */
- be_nested_proto(
- 20, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_NoiseAnimation, /* shared constants */
- be_str_weak(_fractal_noise),
- &be_const_str_solidified,
- ( &(const binstruction[62]) { /* code */
- 0x580C0006, // 0000 LDCONST R3 K6
- 0x541200FE, // 0001 LDINT R4 255
- 0x88140129, // 0002 GETMBR R5 R0 K41
- 0x8818012A, // 0003 GETMBR R6 R0 K42
- 0x881C012E, // 0004 GETMBR R7 R0 K46
- 0x5C200A00, // 0005 MOVE R8 R5
- 0x58240006, // 0006 LDCONST R9 K6
- 0x58280006, // 0007 LDCONST R10 K6
- 0x142C1406, // 0008 LT R11 R10 R6
- 0x782E0027, // 0009 JMPF R11 #0032
- 0xB82E3600, // 000A GETNGBL R11 K27
- 0x8C2C171C, // 000B GETMET R11 R11 K28
- 0x08340208, // 000C MUL R13 R1 R8
- 0x58380006, // 000D LDCONST R14 K6
- 0x543E00FE, // 000E LDINT R15 255
- 0x544200FE, // 000F LDINT R16 255
- 0x083C1E10, // 0010 MUL R15 R15 R16
- 0x58400006, // 0011 LDCONST R16 K6
- 0x544600FE, // 0012 LDINT R17 255
- 0x7C2C0C00, // 0013 CALL R11 6
- 0x002C1602, // 0014 ADD R11 R11 R2
- 0x8C30012F, // 0015 GETMET R12 R0 K47
- 0x5C381600, // 0016 MOVE R14 R11
- 0x7C300400, // 0017 CALL R12 2
- 0xB8363600, // 0018 GETNGBL R13 K27
- 0x8C341B1C, // 0019 GETMET R13 R13 K28
- 0x5C3C1800, // 001A MOVE R15 R12
- 0x58400006, // 001B LDCONST R16 K6
- 0x544600FE, // 001C LDINT R17 255
- 0x58480006, // 001D LDCONST R18 K6
- 0x5C4C0800, // 001E MOVE R19 R4
- 0x7C340C00, // 001F CALL R13 6
- 0x000C060D, // 0020 ADD R3 R3 R13
- 0x00241204, // 0021 ADD R9 R9 R4
- 0xB8363600, // 0022 GETNGBL R13 K27
- 0x8C341B1C, // 0023 GETMET R13 R13 K28
- 0x5C3C0800, // 0024 MOVE R15 R4
- 0x58400006, // 0025 LDCONST R16 K6
- 0x544600FE, // 0026 LDINT R17 255
- 0x58480006, // 0027 LDCONST R18 K6
- 0x5C4C0E00, // 0028 MOVE R19 R7
- 0x7C340C00, // 0029 CALL R13 6
- 0x5C101A00, // 002A MOVE R4 R13
- 0x08201130, // 002B MUL R8 R8 K48
- 0x543600FE, // 002C LDINT R13 255
- 0x2434100D, // 002D GT R13 R8 R13
- 0x78360000, // 002E JMPF R13 #0030
- 0x542200FE, // 002F LDINT R8 255
- 0x00281508, // 0030 ADD R10 R10 K8
- 0x7001FFD5, // 0031 JMP #0008
- 0x242C1306, // 0032 GT R11 R9 K6
- 0x782E0008, // 0033 JMPF R11 #003D
- 0xB82E3600, // 0034 GETNGBL R11 K27
- 0x8C2C171C, // 0035 GETMET R11 R11 K28
- 0x5C340600, // 0036 MOVE R13 R3
- 0x58380006, // 0037 LDCONST R14 K6
- 0x5C3C1200, // 0038 MOVE R15 R9
- 0x58400006, // 0039 LDCONST R16 K6
- 0x544600FE, // 003A LDINT R17 255
- 0x7C2C0C00, // 003B CALL R11 6
- 0x5C0C1600, // 003C MOVE R3 R11
- 0x80040600, // 003D RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: NoiseAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(NoiseAnimation,
- 3,
- &be_class_Animation,
- be_nested_map(15,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, -1), be_const_closure(class_NoiseAnimation_init_closure) },
- { be_const_key_weak(setmember, -1), be_const_closure(class_NoiseAnimation_setmember_closure) },
- { be_const_key_weak(_init_noise_table, -1), be_const_closure(class_NoiseAnimation__init_noise_table_closure) },
- { be_const_key_weak(PARAMS, 12), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(octaves, -1), be_const_bytes_instance(07000100040001) },
- { be_const_key_weak(seed, 0), be_const_bytes_instance(07000002FFFF0000013930) },
- { be_const_key_weak(speed, 3), be_const_bytes_instance(07000001FF00001E) },
- { be_const_key_weak(persistence, 1), be_const_bytes_instance(07000001FF00018000) },
- { be_const_key_weak(color, -1), be_const_bytes_instance(0406) },
- { be_const_key_weak(scale, -1), be_const_bytes_instance(07000101FF000032) },
- })) ) } )) },
- { be_const_key_weak(update, 6), be_const_closure(class_NoiseAnimation_update_closure) },
- { be_const_key_weak(time_offset, -1), be_const_var(1) },
- { be_const_key_weak(_calculate_noise, -1), be_const_closure(class_NoiseAnimation__calculate_noise_closure) },
- { be_const_key_weak(on_param_changed, 13), be_const_closure(class_NoiseAnimation_on_param_changed_closure) },
- { be_const_key_weak(_noise_1d, -1), be_const_closure(class_NoiseAnimation__noise_1d_closure) },
- { be_const_key_weak(noise_table, -1), be_const_var(2) },
- { be_const_key_weak(tostring, 8), be_const_closure(class_NoiseAnimation_tostring_closure) },
- { be_const_key_weak(start, -1), be_const_closure(class_NoiseAnimation_start_closure) },
- { be_const_key_weak(current_colors, -1), be_const_var(0) },
- { be_const_key_weak(render, -1), be_const_closure(class_NoiseAnimation_render_closure) },
- { be_const_key_weak(_fractal_noise, -1), be_const_closure(class_NoiseAnimation__fractal_noise_closure) },
- })),
- be_str_weak(NoiseAnimation)
-);
-
-/********************************************************************
-** Solidified function: get_user_function
-********************************************************************/
-be_local_closure(get_user_function, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -8726,18 +12583,36 @@ be_local_closure(get_user_function, /* name */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(_user_functions),
- /* K2 */ be_nested_str_weak(find),
+ /* K1 */ be_nested_str_weak(VERSION),
+ /* K2 */ be_nested_str_weak(_X25s_X2E_X25s_X2E_X25s),
}),
- be_str_weak(get_user_function),
+ be_str_weak(animation_version_string),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x88040301, // 0001 GETMBR R1 R1 K1
- 0x8C040302, // 0002 GETMET R1 R1 K2
- 0x5C0C0000, // 0003 MOVE R3 R0
- 0x7C040400, // 0004 CALL R1 2
- 0x80040200, // 0005 RET 1 R1
+ ( &(const binstruction[24]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0x1C040001, // 0001 EQ R1 R0 R1
+ 0x78060001, // 0002 JMPF R1 #0005
+ 0xB8060000, // 0003 GETNGBL R1 K0
+ 0x88000301, // 0004 GETMBR R0 R1 K1
+ 0x54060017, // 0005 LDINT R1 24
+ 0x3C040001, // 0006 SHR R1 R0 R1
+ 0x540A00FE, // 0007 LDINT R2 255
+ 0x2C040202, // 0008 AND R1 R1 R2
+ 0x540A000F, // 0009 LDINT R2 16
+ 0x3C080002, // 000A SHR R2 R0 R2
+ 0x540E00FE, // 000B LDINT R3 255
+ 0x2C080403, // 000C AND R2 R2 R3
+ 0x540E0007, // 000D LDINT R3 8
+ 0x3C0C0003, // 000E SHR R3 R0 R3
+ 0x541200FE, // 000F LDINT R4 255
+ 0x2C0C0604, // 0010 AND R3 R3 R4
+ 0x60100018, // 0011 GETGBL R4 G24
+ 0x58140002, // 0012 LDCONST R5 K2
+ 0x5C180200, // 0013 MOVE R6 R1
+ 0x5C1C0400, // 0014 MOVE R7 R2
+ 0x5C200600, // 0015 MOVE R8 R3
+ 0x7C100800, // 0016 CALL R4 4
+ 0x80040800, // 0017 RET 1 R4
})
)
);
@@ -8745,451 +12620,12 @@ be_local_closure(get_user_function, /* name */
/********************************************************************
-** Solidified function: encode_constraints
+** Solidified function: animation_resolve
********************************************************************/
-be_local_closure(encode_constraints, /* name */
+be_local_closure(animation_resolve, /* name */
be_nested_proto(
7, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 13, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 3]) {
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(bool),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_const_int(3),
- /* K3 */ be_nested_str_weak(instance),
- /* K4 */ be_nested_str_weak(int),
- /* K5 */ be_const_int(0),
- /* K6 */ be_const_int(1),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(get_type_code),
- &be_const_str_solidified,
- ( &(const binstruction[50]) { /* code */
- 0x60040004, // 0000 GETGBL R1 G4
- 0x5C080000, // 0001 MOVE R2 R0
- 0x7C040200, // 0002 CALL R1 1
- 0x4C080000, // 0003 LDNIL R2
- 0x1C080002, // 0004 EQ R2 R0 R2
- 0x780A0002, // 0005 JMPF R2 #0009
- 0x540A0005, // 0006 LDINT R2 6
- 0x80040400, // 0007 RET 1 R2
- 0x70020027, // 0008 JMP #0031
- 0x1C080300, // 0009 EQ R2 R1 K0
- 0x780A0002, // 000A JMPF R2 #000E
- 0x540A0004, // 000B LDINT R2 5
- 0x80040400, // 000C RET 1 R2
- 0x70020022, // 000D JMP #0031
- 0x1C080301, // 000E EQ R2 R1 K1
- 0x780A0001, // 000F JMPF R2 #0012
- 0x80060400, // 0010 RET 1 K2
- 0x7002001E, // 0011 JMP #0031
- 0x1C080303, // 0012 EQ R2 R1 K3
- 0x780A0007, // 0013 JMPF R2 #001C
- 0x6008000F, // 0014 GETGBL R2 G15
- 0x5C0C0000, // 0015 MOVE R3 R0
- 0x60100015, // 0016 GETGBL R4 G21
- 0x7C080400, // 0017 CALL R2 2
- 0x780A0002, // 0018 JMPF R2 #001C
- 0x540A0003, // 0019 LDINT R2 4
- 0x80040400, // 001A RET 1 R2
- 0x70020014, // 001B JMP #0031
- 0x1C080304, // 001C EQ R2 R1 K4
- 0x780A0011, // 001D JMPF R2 #0030
- 0x5409FF7F, // 001E LDINT R2 -128
- 0x28080002, // 001F GE R2 R0 R2
- 0x780A0004, // 0020 JMPF R2 #0026
- 0x540A007E, // 0021 LDINT R2 127
- 0x18080002, // 0022 LE R2 R0 R2
- 0x780A0001, // 0023 JMPF R2 #0026
- 0x80060A00, // 0024 RET 1 K5
- 0x70020008, // 0025 JMP #002F
- 0x54097FFF, // 0026 LDINT R2 -32768
- 0x28080002, // 0027 GE R2 R0 R2
- 0x780A0004, // 0028 JMPF R2 #002E
- 0x540A7FFE, // 0029 LDINT R2 32767
- 0x18080002, // 002A LE R2 R0 R2
- 0x780A0001, // 002B JMPF R2 #002E
- 0x80060C00, // 002C RET 1 K6
- 0x70020000, // 002D JMP #002F
- 0x80060E00, // 002E RET 1 K7
- 0x70020000, // 002F JMP #0031
- 0x80060E00, // 0030 RET 1 K7
- 0x80000000, // 0031 RET 0
- })
- ),
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(add),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(0),
- /* K3 */ be_const_int(2),
- /* K4 */ be_const_int(3),
- /* K5 */ be_nested_str_weak(fromstring),
- }),
- be_str_weak(encode_value_with_type),
- &be_const_str_solidified,
- ( &(const binstruction[72]) { /* code */
- 0x68080000, // 0000 GETUPV R2 U0
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C0C0300, // 0003 GETMET R3 R1 K0
- 0x5C140400, // 0004 MOVE R5 R2
- 0x58180001, // 0005 LDCONST R6 K1
- 0x7C0C0600, // 0006 CALL R3 3
- 0x540E0005, // 0007 LDINT R3 6
- 0x1C0C0403, // 0008 EQ R3 R2 R3
- 0x780E0001, // 0009 JMPF R3 #000C
- 0x80000600, // 000A RET 0
- 0x7002003A, // 000B JMP #0047
- 0x540E0004, // 000C LDINT R3 5
- 0x1C0C0403, // 000D EQ R3 R2 R3
- 0x780E0007, // 000E JMPF R3 #0017
- 0x8C0C0300, // 000F GETMET R3 R1 K0
- 0x78020001, // 0010 JMPF R0 #0013
- 0x58140001, // 0011 LDCONST R5 K1
- 0x70020000, // 0012 JMP #0014
- 0x58140002, // 0013 LDCONST R5 K2
- 0x58180001, // 0014 LDCONST R6 K1
- 0x7C0C0600, // 0015 CALL R3 3
- 0x7002002F, // 0016 JMP #0047
- 0x1C0C0502, // 0017 EQ R3 R2 K2
- 0x780E0005, // 0018 JMPF R3 #001F
- 0x8C0C0300, // 0019 GETMET R3 R1 K0
- 0x541600FE, // 001A LDINT R5 255
- 0x2C140005, // 001B AND R5 R0 R5
- 0x58180001, // 001C LDCONST R6 K1
- 0x7C0C0600, // 001D CALL R3 3
- 0x70020027, // 001E JMP #0047
- 0x1C0C0501, // 001F EQ R3 R2 K1
- 0x780E0005, // 0020 JMPF R3 #0027
- 0x8C0C0300, // 0021 GETMET R3 R1 K0
- 0x5416FFFE, // 0022 LDINT R5 65535
- 0x2C140005, // 0023 AND R5 R0 R5
- 0x58180003, // 0024 LDCONST R6 K3
- 0x7C0C0600, // 0025 CALL R3 3
- 0x7002001F, // 0026 JMP #0047
- 0x1C0C0503, // 0027 EQ R3 R2 K3
- 0x780E0004, // 0028 JMPF R3 #002E
- 0x8C0C0300, // 0029 GETMET R3 R1 K0
- 0x5C140000, // 002A MOVE R5 R0
- 0x541A0003, // 002B LDINT R6 4
- 0x7C0C0600, // 002C CALL R3 3
- 0x70020018, // 002D JMP #0047
- 0x1C0C0504, // 002E EQ R3 R2 K4
- 0x780E000C, // 002F JMPF R3 #003D
- 0x600C0015, // 0030 GETGBL R3 G21
- 0x7C0C0000, // 0031 CALL R3 0
- 0x8C0C0705, // 0032 GETMET R3 R3 K5
- 0x5C140000, // 0033 MOVE R5 R0
- 0x7C0C0400, // 0034 CALL R3 2
- 0x8C100300, // 0035 GETMET R4 R1 K0
- 0x6018000C, // 0036 GETGBL R6 G12
- 0x5C1C0600, // 0037 MOVE R7 R3
- 0x7C180200, // 0038 CALL R6 1
- 0x581C0001, // 0039 LDCONST R7 K1
- 0x7C100600, // 003A CALL R4 3
- 0x40100203, // 003B CONNECT R4 R1 R3
- 0x70020009, // 003C JMP #0047
- 0x540E0003, // 003D LDINT R3 4
- 0x1C0C0403, // 003E EQ R3 R2 R3
- 0x780E0006, // 003F JMPF R3 #0047
- 0x8C0C0300, // 0040 GETMET R3 R1 K0
- 0x6014000C, // 0041 GETGBL R5 G12
- 0x5C180000, // 0042 MOVE R6 R0
- 0x7C140200, // 0043 CALL R5 1
- 0x58180003, // 0044 LDCONST R6 K3
- 0x7C0C0600, // 0045 CALL R3 3
- 0x400C0200, // 0046 CONNECT R3 R1 R0
- 0x80000000, // 0047 RET 0
- })
- ),
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
- /* K0 */ be_nested_str_weak(int),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(string),
- /* K3 */ be_const_int(1),
- /* K4 */ be_nested_str_weak(bytes),
- /* K5 */ be_const_int(2),
- /* K6 */ be_nested_str_weak(bool),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(any),
- /* K9 */ be_nested_str_weak(instance),
- /* K10 */ be_nested_str_weak(function),
- }),
- be_str_weak(get_explicit_type_code),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0x1C040100, // 0000 EQ R1 R0 K0
- 0x78060001, // 0001 JMPF R1 #0004
- 0x80060200, // 0002 RET 1 K1
- 0x70020019, // 0003 JMP #001E
- 0x1C040102, // 0004 EQ R1 R0 K2
- 0x78060001, // 0005 JMPF R1 #0008
- 0x80060600, // 0006 RET 1 K3
- 0x70020015, // 0007 JMP #001E
- 0x1C040104, // 0008 EQ R1 R0 K4
- 0x78060001, // 0009 JMPF R1 #000C
- 0x80060A00, // 000A RET 1 K5
- 0x70020011, // 000B JMP #001E
- 0x1C040106, // 000C EQ R1 R0 K6
- 0x78060001, // 000D JMPF R1 #0010
- 0x80060E00, // 000E RET 1 K7
- 0x7002000D, // 000F JMP #001E
- 0x1C040108, // 0010 EQ R1 R0 K8
- 0x78060002, // 0011 JMPF R1 #0015
- 0x54060003, // 0012 LDINT R1 4
- 0x80040200, // 0013 RET 1 R1
- 0x70020008, // 0014 JMP #001E
- 0x1C040109, // 0015 EQ R1 R0 K9
- 0x78060002, // 0016 JMPF R1 #001A
- 0x54060004, // 0017 LDINT R1 5
- 0x80040200, // 0018 RET 1 R1
- 0x70020003, // 0019 JMP #001E
- 0x1C04010A, // 001A EQ R1 R0 K10
- 0x78060001, // 001B JMPF R1 #001E
- 0x54060005, // 001C LDINT R1 6
- 0x80040200, // 001D RET 1 R1
- 0x54060003, // 001E LDINT R1 4
- 0x80040200, // 001F RET 1 R1
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(resize),
- /* K2 */ be_const_int(1),
- /* K3 */ be_nested_str_weak(contains),
- /* K4 */ be_nested_str_weak(type),
- /* K5 */ be_nested_str_weak(min),
- /* K6 */ be_nested_str_weak(max),
- /* K7 */ be_const_int(2),
- /* K8 */ be_nested_str_weak(default),
- /* K9 */ be_nested_str_weak(add),
- /* K10 */ be_nested_str_weak(enum),
- /* K11 */ be_nested_str_weak(stop_iteration),
- /* K12 */ be_nested_str_weak(nillable),
- /* K13 */ be_nested_str_weak(set),
- }),
- be_str_weak(encode_single_constraint),
- &be_const_str_solidified,
- ( &(const binstruction[97]) { /* code */
- 0x84040000, // 0000 CLOSURE R1 P0
- 0x84080001, // 0001 CLOSURE R2 P1
- 0x580C0000, // 0002 LDCONST R3 K0
- 0x60100015, // 0003 GETGBL R4 G21
- 0x7C100000, // 0004 CALL R4 0
- 0x8C140901, // 0005 GETMET R5 R4 K1
- 0x581C0002, // 0006 LDCONST R7 K2
- 0x7C140400, // 0007 CALL R5 2
- 0x84140002, // 0008 CLOSURE R5 P2
- 0x4C180000, // 0009 LDNIL R6
- 0x8C1C0103, // 000A GETMET R7 R0 K3
- 0x58240004, // 000B LDCONST R9 K4
- 0x7C1C0400, // 000C CALL R7 2
- 0x781E0003, // 000D JMPF R7 #0012
- 0x5C1C0A00, // 000E MOVE R7 R5
- 0x94200104, // 000F GETIDX R8 R0 K4
- 0x7C1C0200, // 0010 CALL R7 1
- 0x5C180E00, // 0011 MOVE R6 R7
- 0x8C1C0103, // 0012 GETMET R7 R0 K3
- 0x58240005, // 0013 LDCONST R9 K5
- 0x7C1C0400, // 0014 CALL R7 2
- 0x781E0004, // 0015 JMPF R7 #001B
- 0x300C0702, // 0016 OR R3 R3 K2
- 0x5C1C0400, // 0017 MOVE R7 R2
- 0x94200105, // 0018 GETIDX R8 R0 K5
- 0x5C240800, // 0019 MOVE R9 R4
- 0x7C1C0400, // 001A CALL R7 2
- 0x8C1C0103, // 001B GETMET R7 R0 K3
- 0x58240006, // 001C LDCONST R9 K6
- 0x7C1C0400, // 001D CALL R7 2
- 0x781E0004, // 001E JMPF R7 #0024
- 0x300C0707, // 001F OR R3 R3 K7
- 0x5C1C0400, // 0020 MOVE R7 R2
- 0x94200106, // 0021 GETIDX R8 R0 K6
- 0x5C240800, // 0022 MOVE R9 R4
- 0x7C1C0400, // 0023 CALL R7 2
- 0x8C1C0103, // 0024 GETMET R7 R0 K3
- 0x58240008, // 0025 LDCONST R9 K8
- 0x7C1C0400, // 0026 CALL R7 2
- 0x781E0005, // 0027 JMPF R7 #002E
- 0x541E0003, // 0028 LDINT R7 4
- 0x300C0607, // 0029 OR R3 R3 R7
- 0x5C1C0400, // 002A MOVE R7 R2
- 0x94200108, // 002B GETIDX R8 R0 K8
- 0x5C240800, // 002C MOVE R9 R4
- 0x7C1C0400, // 002D CALL R7 2
- 0x4C1C0000, // 002E LDNIL R7
- 0x201C0C07, // 002F NE R7 R6 R7
- 0x781E0005, // 0030 JMPF R7 #0037
- 0x541E0007, // 0031 LDINT R7 8
- 0x300C0607, // 0032 OR R3 R3 R7
- 0x8C1C0909, // 0033 GETMET R7 R4 K9
- 0x5C240C00, // 0034 MOVE R9 R6
- 0x58280002, // 0035 LDCONST R10 K2
- 0x7C1C0600, // 0036 CALL R7 3
- 0x8C1C0103, // 0037 GETMET R7 R0 K3
- 0x5824000A, // 0038 LDCONST R9 K10
- 0x7C1C0400, // 0039 CALL R7 2
- 0x781E0016, // 003A JMPF R7 #0052
- 0x541E000F, // 003B LDINT R7 16
- 0x300C0607, // 003C OR R3 R3 R7
- 0x941C010A, // 003D GETIDX R7 R0 K10
- 0x8C200909, // 003E GETMET R8 R4 K9
- 0x6028000C, // 003F GETGBL R10 G12
- 0x5C2C0E00, // 0040 MOVE R11 R7
- 0x7C280200, // 0041 CALL R10 1
- 0x582C0002, // 0042 LDCONST R11 K2
- 0x7C200600, // 0043 CALL R8 3
- 0x60200010, // 0044 GETGBL R8 G16
- 0x5C240E00, // 0045 MOVE R9 R7
- 0x7C200200, // 0046 CALL R8 1
- 0xA8020006, // 0047 EXBLK 0 #004F
- 0x5C241000, // 0048 MOVE R9 R8
- 0x7C240000, // 0049 CALL R9 0
- 0x5C280400, // 004A MOVE R10 R2
- 0x5C2C1200, // 004B MOVE R11 R9
- 0x5C300800, // 004C MOVE R12 R4
- 0x7C280400, // 004D CALL R10 2
- 0x7001FFF8, // 004E JMP #0048
- 0x5820000B, // 004F LDCONST R8 K11
- 0xAC200200, // 0050 CATCH R8 1 0
- 0xB0080000, // 0051 RAISE 2 R0 R0
- 0x8C1C0103, // 0052 GETMET R7 R0 K3
- 0x5824000C, // 0053 LDCONST R9 K12
- 0x7C1C0400, // 0054 CALL R7 2
- 0x781E0003, // 0055 JMPF R7 #005A
- 0x941C010C, // 0056 GETIDX R7 R0 K12
- 0x781E0001, // 0057 JMPF R7 #005A
- 0x541E001F, // 0058 LDINT R7 32
- 0x300C0607, // 0059 OR R3 R3 R7
- 0x8C1C090D, // 005A GETMET R7 R4 K13
- 0x58240000, // 005B LDCONST R9 K0
- 0x5C280600, // 005C MOVE R10 R3
- 0x582C0002, // 005D LDCONST R11 K2
- 0x7C1C0800, // 005E CALL R7 4
- 0xA0000000, // 005F CLOSE R0
- 0x80040800, // 0060 RET 1 R4
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(keys),
- /* K1 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(encode_constraints),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0x84040000, // 0000 CLOSURE R1 P0
- 0x60080013, // 0001 GETGBL R2 G19
- 0x7C080000, // 0002 CALL R2 0
- 0x600C0010, // 0003 GETGBL R3 G16
- 0x8C100100, // 0004 GETMET R4 R0 K0
- 0x7C100200, // 0005 CALL R4 1
- 0x7C0C0200, // 0006 CALL R3 1
- 0xA8020006, // 0007 EXBLK 0 #000F
- 0x5C100600, // 0008 MOVE R4 R3
- 0x7C100000, // 0009 CALL R4 0
- 0x5C140200, // 000A MOVE R5 R1
- 0x94180004, // 000B GETIDX R6 R0 R4
- 0x7C140200, // 000C CALL R5 1
- 0x98080805, // 000D SETIDX R2 R4 R5
- 0x7001FFF8, // 000E JMP #0008
- 0x580C0001, // 000F LDCONST R3 K1
- 0xAC0C0200, // 0010 CATCH R3 1 0
- 0xB0080000, // 0011 RAISE 2 R0 R0
- 0x80040400, // 0012 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: smooth
-********************************************************************/
-be_local_closure(smooth, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(COSINE),
- }),
- be_str_weak(smooth),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: gradient_rainbow_linear
-********************************************************************/
-be_local_closure(gradient_rainbow_linear, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
+ 3, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -9198,27 +12634,47 @@ be_local_closure(gradient_rainbow_linear, /* name */
1, /* has constants */
( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(gradient_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(gradient_type),
- /* K4 */ be_const_int(0),
- /* K5 */ be_nested_str_weak(direction),
- /* K6 */ be_nested_str_weak(movement_speed),
+ /* K1 */ be_nested_str_weak(is_value_provider),
+ /* K2 */ be_nested_str_weak(produce_value),
+ /* K3 */ be_nested_str_weak(parameterized_object),
+ /* K4 */ be_nested_str_weak(value_error),
+ /* K5 */ be_nested_str_weak(Parameter_X20name_X20cannot_X20be_X20nil_X20when_X20resolving_X20object_X20parameter),
+ /* K6 */ be_nested_str_weak(get_param_value),
}),
- be_str_weak(gradient_rainbow_linear),
+ be_str_weak(animation_resolve),
&be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x4C080000, // 0004 LDNIL R2
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x90060704, // 0006 SETMBR R1 K3 K4
- 0x90060B04, // 0007 SETMBR R1 K5 K4
- 0x540A0031, // 0008 LDINT R2 50
- 0x90060C02, // 0009 SETMBR R1 K6 R2
- 0x80040200, // 000A RET 1 R1
+ ( &(const binstruction[31]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x780E0005, // 0004 JMPF R3 #000B
+ 0x8C0C0102, // 0005 GETMET R3 R0 K2
+ 0x5C140200, // 0006 MOVE R5 R1
+ 0x5C180400, // 0007 MOVE R6 R2
+ 0x7C0C0600, // 0008 CALL R3 3
+ 0x80040600, // 0009 RET 1 R3
+ 0x70020012, // 000A JMP #001E
+ 0x4C0C0000, // 000B LDNIL R3
+ 0x200C0003, // 000C NE R3 R0 R3
+ 0x780E000E, // 000D JMPF R3 #001D
+ 0x600C000F, // 000E GETGBL R3 G15
+ 0x5C100000, // 000F MOVE R4 R0
+ 0xB8160000, // 0010 GETNGBL R5 K0
+ 0x88140B03, // 0011 GETMBR R5 R5 K3
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x780E0008, // 0013 JMPF R3 #001D
+ 0x4C0C0000, // 0014 LDNIL R3
+ 0x1C0C0203, // 0015 EQ R3 R1 R3
+ 0x780E0000, // 0016 JMPF R3 #0018
+ 0xB0060905, // 0017 RAISE 1 K4 K5
+ 0x8C0C0106, // 0018 GETMET R3 R0 K6
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x80040600, // 001B RET 1 R3
+ 0x70020000, // 001C JMP #001E
+ 0x80040000, // 001D RET 1 R0
+ 0x80000000, // 001E RET 0
})
)
);
@@ -9226,41 +12682,9 @@ be_local_closure(gradient_rainbow_linear, /* name */
/********************************************************************
-** Solidified function: clear_all_event_handlers
+** Solidified function: sawtooth
********************************************************************/
-be_local_closure(clear_all_event_handlers, /* name */
- be_nested_proto(
- 2, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(clear_all_handlers),
- }),
- be_str_weak(clear_all_event_handlers),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xB8020000, // 0000 GETNGBL R0 K0
- 0x88000101, // 0001 GETMBR R0 R0 K1
- 0x8C000102, // 0002 GETMET R0 R0 K2
- 0x7C000200, // 0003 CALL R0 1
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: twinkle_rainbow
-********************************************************************/
-be_local_closure(twinkle_rainbow, /* name */
+be_local_closure(sawtooth, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -9270,36 +12694,23 @@ be_local_closure(twinkle_rainbow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
+ ( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(twinkle_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(density),
- /* K4 */ be_nested_str_weak(twinkle_speed),
- /* K5 */ be_nested_str_weak(fade_speed),
- /* K6 */ be_nested_str_weak(min_brightness),
- /* K7 */ be_nested_str_weak(max_brightness),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(SAWTOOTH),
}),
- be_str_weak(twinkle_rainbow),
+ be_str_weak(sawtooth),
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
+ ( &(const binstruction[ 8]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0
0x7C040400, // 0003 CALL R1 2
- 0x5409FFFE, // 0004 LDINT R2 -1
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x540A0077, // 0006 LDINT R2 120
- 0x90060602, // 0007 SETMBR R1 K3 R2
- 0x540A0005, // 0008 LDINT R2 6
- 0x90060802, // 0009 SETMBR R1 K4 R2
- 0x540A00B3, // 000A LDINT R2 180
- 0x90060A02, // 000B SETMBR R1 K5 R2
- 0x540A001F, // 000C LDINT R2 32
- 0x90060C02, // 000D SETMBR R1 K6 R2
- 0x540A00FE, // 000E LDINT R2 255
- 0x90060E02, // 000F SETMBR R1 K7 R2
- 0x80040200, // 0010 RET 1 R1
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
})
)
);
@@ -9307,11 +12718,11 @@ be_local_closure(twinkle_rainbow, /* name */
/********************************************************************
-** Solidified function: is_value_provider
+** Solidified function: rich_palette_rainbow
********************************************************************/
-be_local_closure(is_value_provider, /* name */
+be_local_closure(rich_palette_rainbow, /* name */
be_nested_proto(
- 4, /* nstack */
+ 5, /* nstack */
1, /* argc */
0, /* varg */
0, /* has upvals */
@@ -9319,775 +12730,24 @@ be_local_closure(is_value_provider, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(value_provider),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(00FF000024FFA50049FFFF006E00FF00920000FFB74B0082DBEE82EEFFFF0000),
+ /* K1 */ be_nested_str_weak(animation),
+ /* K2 */ be_nested_str_weak(rich_palette),
+ /* K3 */ be_nested_str_weak(palette),
}),
- be_str_weak(is_value_provider),
+ be_str_weak(rich_palette_rainbow),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x6004000F, // 0000 GETGBL R1 G15
- 0x5C080000, // 0001 MOVE R2 R0
- 0xB80E0000, // 0002 GETNGBL R3 K0
- 0x880C0701, // 0003 GETMBR R3 R3 K1
- 0x7C040400, // 0004 CALL R1 2
- 0x80040200, // 0005 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'EventHandler' ktab size: 7, total: 11 (saved 32 bytes)
-static const bvalue be_ktab_class_EventHandler[7] = {
- /* K0 */ be_nested_str_weak(is_active),
- /* K1 */ be_nested_str_weak(condition),
- /* K2 */ be_nested_str_weak(callback_func),
- /* K3 */ be_nested_str_weak(event_name),
- /* K4 */ be_nested_str_weak(priority),
- /* K5 */ be_const_int(0),
- /* K6 */ be_nested_str_weak(metadata),
-};
-
-
-extern const bclass be_class_EventHandler;
-
-/********************************************************************
-** Solidified function: set_active
-********************************************************************/
-be_local_closure(class_EventHandler_set_active, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EventHandler, /* shared constants */
- be_str_weak(set_active),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: execute
-********************************************************************/
-be_local_closure(class_EventHandler_execute, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EventHandler, /* shared constants */
- be_str_weak(execute),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x740A0001, // 0001 JMPT R2 #0004
- 0x50080000, // 0002 LDBOOL R2 0 0
- 0x80040400, // 0003 RET 1 R2
- 0x88080101, // 0004 GETMBR R2 R0 K1
- 0x4C0C0000, // 0005 LDNIL R3
- 0x20080403, // 0006 NE R2 R2 R3
- 0x780A0005, // 0007 JMPF R2 #000E
- 0x8C080101, // 0008 GETMET R2 R0 K1
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0x740A0001, // 000B JMPT R2 #000E
- 0x50080000, // 000C LDBOOL R2 0 0
- 0x80040400, // 000D RET 1 R2
- 0x88080102, // 000E GETMBR R2 R0 K2
- 0x4C0C0000, // 000F LDNIL R3
- 0x20080403, // 0010 NE R2 R2 R3
- 0x780A0004, // 0011 JMPF R2 #0017
- 0x8C080102, // 0012 GETMET R2 R0 K2
- 0x5C100200, // 0013 MOVE R4 R1
- 0x7C080400, // 0014 CALL R2 2
- 0x50080200, // 0015 LDBOOL R2 1 0
- 0x80040400, // 0016 RET 1 R2
- 0x50080000, // 0017 LDBOOL R2 0 0
- 0x80040400, // 0018 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_EventHandler_init, /* name */
- be_nested_proto(
- 7, /* nstack */
- 6, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_EventHandler, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x90020601, // 0000 SETMBR R0 K3 R1
- 0x90020402, // 0001 SETMBR R0 K2 R2
- 0x4C180000, // 0002 LDNIL R6
- 0x20180606, // 0003 NE R6 R3 R6
- 0x781A0001, // 0004 JMPF R6 #0007
- 0x5C180600, // 0005 MOVE R6 R3
- 0x70020000, // 0006 JMP #0008
- 0x58180005, // 0007 LDCONST R6 K5
- 0x90020806, // 0008 SETMBR R0 K4 R6
- 0x90020204, // 0009 SETMBR R0 K1 R4
- 0x50180200, // 000A LDBOOL R6 1 0
- 0x90020006, // 000B SETMBR R0 K0 R6
- 0x4C180000, // 000C LDNIL R6
- 0x20180A06, // 000D NE R6 R5 R6
- 0x781A0001, // 000E JMPF R6 #0011
- 0x5C180A00, // 000F MOVE R6 R5
- 0x70020001, // 0010 JMP #0013
- 0x60180013, // 0011 GETGBL R6 G19
- 0x7C180000, // 0012 CALL R6 0
- 0x90020C06, // 0013 SETMBR R0 K6 R6
- 0x80000000, // 0014 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: EventHandler
-********************************************************************/
-be_local_class(EventHandler,
- 6,
- NULL,
- be_nested_map(9,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(set_active, -1), be_const_closure(class_EventHandler_set_active_closure) },
- { be_const_key_weak(execute, 2), be_const_closure(class_EventHandler_execute_closure) },
- { be_const_key_weak(callback_func, -1), be_const_var(1) },
- { be_const_key_weak(init, -1), be_const_closure(class_EventHandler_init_closure) },
- { be_const_key_weak(event_name, -1), be_const_var(0) },
- { be_const_key_weak(condition, -1), be_const_var(2) },
- { be_const_key_weak(priority, 3), be_const_var(3) },
- { be_const_key_weak(metadata, -1), be_const_var(5) },
- { be_const_key_weak(is_active, -1), be_const_var(4) },
- })),
- be_str_weak(EventHandler)
-);
-
-/********************************************************************
-** Solidified function: twinkle_gentle
-********************************************************************/
-be_local_closure(twinkle_gentle, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(twinkle_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(density),
- /* K4 */ be_nested_str_weak(twinkle_speed),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(fade_speed),
- /* K7 */ be_nested_str_weak(min_brightness),
- /* K8 */ be_nested_str_weak(max_brightness),
- }),
- be_str_weak(twinkle_gentle),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x5409D6FF, // 0004 LDINT R2 -10496
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x540A003F, // 0006 LDINT R2 64
- 0x90060602, // 0007 SETMBR R1 K3 R2
- 0x90060905, // 0008 SETMBR R1 K4 K5
- 0x540A0077, // 0009 LDINT R2 120
- 0x90060C02, // 000A SETMBR R1 K6 R2
- 0x540A000F, // 000B LDINT R2 16
- 0x90060E02, // 000C SETMBR R1 K7 R2
- 0x540A00B3, // 000D LDINT R2 180
- 0x90061002, // 000E SETMBR R1 K8 R2
- 0x80040200, // 000F RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'PaletteGradientAnimation' ktab size: 35, total: 52 (saved 136 bytes)
-static const bvalue be_ktab_class_PaletteGradientAnimation[35] = {
- /* K0 */ be_nested_str_weak(on_param_changed),
- /* K1 */ be_nested_str_weak(color_source),
- /* K2 */ be_nested_str_weak(_initialize_value_buffer),
- /* K3 */ be_nested_str_weak(member),
- /* K4 */ be_nested_str_weak(shift_period),
- /* K5 */ be_nested_str_weak(spatial_period),
- /* K6 */ be_nested_str_weak(phase_shift),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(_spatial_period),
- /* K9 */ be_nested_str_weak(_phase_shift),
- /* K10 */ be_nested_str_weak(value_buffer),
- /* K11 */ be_nested_str_weak(tasmota),
- /* K12 */ be_nested_str_weak(scale_uint),
- /* K13 */ be_const_int(522241),
- /* K14 */ be_const_int(1),
- /* K15 */ be_nested_str_weak(_buffer),
- /* K16 */ be_nested_str_weak(get_param),
- /* K17 */ be_nested_str_weak(animation),
- /* K18 */ be_nested_str_weak(color_provider),
- /* K19 */ be_nested_str_weak(get_lut),
- /* K20 */ be_nested_str_weak(LUT_FACTOR),
- /* K21 */ be_nested_str_weak(pixels),
- /* K22 */ be_const_int(2),
- /* K23 */ be_const_int(3),
- /* K24 */ be_nested_str_weak(start_time),
- /* K25 */ be_nested_str_weak(get_color_for_value),
- /* K26 */ be_nested_str_weak(set_pixel_color),
- /* K27 */ be_nested_str_weak(engine),
- /* K28 */ be_nested_str_weak(strip_length),
- /* K29 */ be_nested_str_weak(_X25s_X28strip_length_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K30 */ be_nested_str_weak(priority),
- /* K31 */ be_nested_str_weak(is_running),
- /* K32 */ be_nested_str_weak(resize),
- /* K33 */ be_nested_str_weak(init),
- /* K34 */ be_nested_str_weak(_update_value_buffer),
-};
-
-
-extern const bclass be_class_PaletteGradientAnimation;
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0700, // 0003 GETMET R3 R3 K0
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0301, // 0007 EQ R3 R1 K1
- 0x780E0001, // 0008 JMPF R3 #000B
- 0x8C0C0102, // 0009 GETMET R3 R0 K2
- 0x7C0C0200, // 000A CALL R3 1
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _update_value_buffer
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation__update_value_buffer, /* name */
- be_nested_proto(
- 15, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(_update_value_buffer),
- &be_const_str_solidified,
- ( &(const binstruction[72]) { /* code */
- 0x8C0C0103, // 0000 GETMET R3 R0 K3
- 0x58140004, // 0001 LDCONST R5 K4
- 0x7C0C0400, // 0002 CALL R3 2
- 0x8C100103, // 0003 GETMET R4 R0 K3
- 0x58180005, // 0004 LDCONST R6 K5
- 0x7C100400, // 0005 CALL R4 2
- 0x8C140103, // 0006 GETMET R5 R0 K3
- 0x581C0006, // 0007 LDCONST R7 K6
- 0x7C140400, // 0008 CALL R5 2
- 0x1C180707, // 0009 EQ R6 R3 K7
- 0x781A0011, // 000A JMPF R6 #001D
- 0x88180108, // 000B GETMBR R6 R0 K8
- 0x4C1C0000, // 000C LDNIL R7
- 0x20180C07, // 000D NE R6 R6 R7
- 0x781A000B, // 000E JMPF R6 #001B
- 0x88180108, // 000F GETMBR R6 R0 K8
- 0x1C180C04, // 0010 EQ R6 R6 R4
- 0x781A0008, // 0011 JMPF R6 #001B
- 0x88180109, // 0012 GETMBR R6 R0 K9
- 0x1C180C05, // 0013 EQ R6 R6 R5
- 0x781A0005, // 0014 JMPF R6 #001B
- 0x6018000C, // 0015 GETGBL R6 G12
- 0x881C010A, // 0016 GETMBR R7 R0 K10
- 0x7C180200, // 0017 CALL R6 1
- 0x1C180C02, // 0018 EQ R6 R6 R2
- 0x781A0000, // 0019 JMPF R6 #001B
- 0x80000C00, // 001A RET 0
- 0x90021004, // 001B SETMBR R0 K8 R4
- 0x90021205, // 001C SETMBR R0 K9 R5
- 0x24180907, // 001D GT R6 R4 K7
- 0x781A0001, // 001E JMPF R6 #0021
- 0x5C180800, // 001F MOVE R6 R4
- 0x70020000, // 0020 JMP #0022
- 0x5C180400, // 0021 MOVE R6 R2
- 0x581C0007, // 0022 LDCONST R7 K7
- 0x24200707, // 0023 GT R8 R3 K7
- 0x78220008, // 0024 JMPF R8 #002E
- 0xB8221600, // 0025 GETNGBL R8 K11
- 0x8C20110C, // 0026 GETMET R8 R8 K12
- 0x10280203, // 0027 MOD R10 R1 R3
- 0x582C0007, // 0028 LDCONST R11 K7
- 0x5C300600, // 0029 MOVE R12 R3
- 0x58340007, // 002A LDCONST R13 K7
- 0x5C380C00, // 002B MOVE R14 R6
- 0x7C200C00, // 002C CALL R8 6
- 0x5C1C1000, // 002D MOVE R7 R8
- 0xB8221600, // 002E GETNGBL R8 K11
- 0x8C20110C, // 002F GETMET R8 R8 K12
- 0x5C280A00, // 0030 MOVE R10 R5
- 0x582C0007, // 0031 LDCONST R11 K7
- 0x543200FE, // 0032 LDINT R12 255
- 0x58340007, // 0033 LDCONST R13 K7
- 0x5C380C00, // 0034 MOVE R14 R6
- 0x7C200C00, // 0035 CALL R8 6
- 0x58240007, // 0036 LDCONST R9 K7
- 0x00280E08, // 0037 ADD R10 R7 R8
- 0x10281406, // 0038 MOD R10 R10 R6
- 0x0C2E1A06, // 0039 DIV R11 K13 R6
- 0x3C2C170E, // 003A SHR R11 R11 K14
- 0x0830140B, // 003B MUL R12 R10 R11
- 0x8834010A, // 003C GETMBR R13 R0 K10
- 0x8C341B0F, // 003D GETMET R13 R13 K15
- 0x7C340200, // 003E CALL R13 1
- 0x14381202, // 003F LT R14 R9 R2
- 0x783A0005, // 0040 JMPF R14 #0047
- 0x543A0009, // 0041 LDINT R14 10
- 0x3C38180E, // 0042 SHR R14 R12 R14
- 0x9834120E, // 0043 SETIDX R13 R9 R14
- 0x0030180B, // 0044 ADD R12 R12 R11
- 0x0024130E, // 0045 ADD R9 R9 K14
- 0x7001FFF7, // 0046 JMP #003F
- 0x80000000, // 0047 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation_render, /* name */
- be_nested_proto(
- 16, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[75]) { /* code */
- 0x8C100110, // 0000 GETMET R4 R0 K16
- 0x58180001, // 0001 LDCONST R6 K1
- 0x7C100400, // 0002 CALL R4 2
- 0x4C140000, // 0003 LDNIL R5
- 0x1C140805, // 0004 EQ R5 R4 R5
- 0x78160001, // 0005 JMPF R5 #0008
- 0x50140000, // 0006 LDBOOL R5 0 0
- 0x80040A00, // 0007 RET 1 R5
- 0x4C140000, // 0008 LDNIL R5
- 0x6018000F, // 0009 GETGBL R6 G15
- 0x5C1C0800, // 000A MOVE R7 R4
- 0xB8222200, // 000B GETNGBL R8 K17
- 0x88201112, // 000C GETMBR R8 R8 K18
- 0x7C180400, // 000D CALL R6 2
- 0x781A0028, // 000E JMPF R6 #0038
- 0x8C180913, // 000F GETMET R6 R4 K19
- 0x7C180200, // 0010 CALL R6 1
- 0x5C140C00, // 0011 MOVE R5 R6
- 0x4C1C0000, // 0012 LDNIL R7
- 0x20180C07, // 0013 NE R6 R6 R7
- 0x781A0022, // 0014 JMPF R6 #0038
- 0x88180914, // 0015 GETMBR R6 R4 K20
- 0x541E00FF, // 0016 LDINT R7 256
- 0x3C1C0E06, // 0017 SHR R7 R7 R6
- 0x58200007, // 0018 LDCONST R8 K7
- 0x88240315, // 0019 GETMBR R9 R1 K21
- 0x8C24130F, // 001A GETMET R9 R9 K15
- 0x7C240200, // 001B CALL R9 1
- 0x8C280B0F, // 001C GETMET R10 R5 K15
- 0x7C280200, // 001D CALL R10 1
- 0x882C010A, // 001E GETMBR R11 R0 K10
- 0x8C2C170F, // 001F GETMET R11 R11 K15
- 0x7C2C0200, // 0020 CALL R11 1
- 0x14301003, // 0021 LT R12 R8 R3
- 0x78320013, // 0022 JMPF R12 #0037
- 0x94301608, // 0023 GETIDX R12 R11 R8
- 0x3C341806, // 0024 SHR R13 R12 R6
- 0x543A00FE, // 0025 LDINT R14 255
- 0x1C38180E, // 0026 EQ R14 R12 R14
- 0x783A0000, // 0027 JMPF R14 #0029
- 0x5C340E00, // 0028 MOVE R13 R7
- 0x38381B16, // 0029 SHL R14 R13 K22
- 0x0038140E, // 002A ADD R14 R10 R14
- 0x943C1D07, // 002B GETIDX R15 R14 K7
- 0x98260E0F, // 002C SETIDX R9 K7 R15
- 0x943C1D0E, // 002D GETIDX R15 R14 K14
- 0x98261C0F, // 002E SETIDX R9 K14 R15
- 0x943C1D16, // 002F GETIDX R15 R14 K22
- 0x98262C0F, // 0030 SETIDX R9 K22 R15
- 0x943C1D17, // 0031 GETIDX R15 R14 K23
- 0x98262E0F, // 0032 SETIDX R9 K23 R15
- 0x0020110E, // 0033 ADD R8 R8 K14
- 0x543E0003, // 0034 LDINT R15 4
- 0x0024120F, // 0035 ADD R9 R9 R15
- 0x7001FFE9, // 0036 JMP #0021
- 0x70020010, // 0037 JMP #0049
- 0x88180118, // 0038 GETMBR R6 R0 K24
- 0x04180406, // 0039 SUB R6 R2 R6
- 0x581C0007, // 003A LDCONST R7 K7
- 0x14200E03, // 003B LT R8 R7 R3
- 0x7822000B, // 003C JMPF R8 #0049
- 0x8820010A, // 003D GETMBR R8 R0 K10
- 0x94201007, // 003E GETIDX R8 R8 R7
- 0x8C240919, // 003F GETMET R9 R4 K25
- 0x5C2C1000, // 0040 MOVE R11 R8
- 0x5C300C00, // 0041 MOVE R12 R6
- 0x7C240600, // 0042 CALL R9 3
- 0x8C28031A, // 0043 GETMET R10 R1 K26
- 0x5C300E00, // 0044 MOVE R12 R7
- 0x5C341200, // 0045 MOVE R13 R9
- 0x7C280600, // 0046 CALL R10 3
- 0x001C0F0E, // 0047 ADD R7 R7 K14
- 0x7001FFF1, // 0048 JMP #003B
- 0x50180200, // 0049 LDBOOL R6 1 0
- 0x80040C00, // 004A RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x8804011B, // 0000 GETMBR R1 R0 K27
- 0x8804031C, // 0001 GETMBR R1 R1 K28
- 0x60080018, // 0002 GETGBL R2 G24
- 0x580C001D, // 0003 LDCONST R3 K29
- 0x60100005, // 0004 GETGBL R4 G5
- 0x5C140000, // 0005 MOVE R5 R0
- 0x7C100200, // 0006 CALL R4 1
- 0x5C140200, // 0007 MOVE R5 R1
- 0x8818011E, // 0008 GETMBR R6 R0 K30
- 0x881C011F, // 0009 GETMBR R7 R0 K31
- 0x7C080A00, // 000A CALL R2 5
- 0x80040400, // 000B RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _initialize_value_buffer
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation__initialize_value_buffer, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(_initialize_value_buffer),
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x8804011B, // 0000 GETMBR R1 R0 K27
- 0x8804031C, // 0001 GETMBR R1 R1 K28
- 0x8808010A, // 0002 GETMBR R2 R0 K10
- 0x8C080520, // 0003 GETMET R2 R2 K32
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x58080007, // 0006 LDCONST R2 K7
- 0x140C0401, // 0007 LT R3 R2 R1
- 0x780E0003, // 0008 JMPF R3 #000D
- 0x880C010A, // 0009 GETMBR R3 R0 K10
- 0x980C0507, // 000A SETIDX R3 R2 K7
- 0x0008050E, // 000B ADD R2 R2 K14
- 0x7001FFF9, // 000C JMP #0007
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080521, // 0003 GETMET R2 R2 K33
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x60080015, // 0006 GETGBL R2 G21
- 0x7C080000, // 0007 CALL R2 0
- 0x90021402, // 0008 SETMBR R0 K10 R2
- 0x8C080102, // 0009 GETMET R2 R0 K2
- 0x7C080200, // 000A CALL R2 1
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_PaletteGradientAnimation_update, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_PaletteGradientAnimation, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88080118, // 0000 GETMBR R2 R0 K24
- 0x04080202, // 0001 SUB R2 R1 R2
- 0x880C011B, // 0002 GETMBR R3 R0 K27
- 0x880C071C, // 0003 GETMBR R3 R3 K28
- 0x6010000C, // 0004 GETGBL R4 G12
- 0x8814010A, // 0005 GETMBR R5 R0 K10
- 0x7C100200, // 0006 CALL R4 1
- 0x20100803, // 0007 NE R4 R4 R3
- 0x78120003, // 0008 JMPF R4 #000D
- 0x8810010A, // 0009 GETMBR R4 R0 K10
- 0x8C100920, // 000A GETMET R4 R4 K32
- 0x5C180600, // 000B MOVE R6 R3
- 0x7C100400, // 000C CALL R4 2
- 0x8C100122, // 000D GETMET R4 R0 K34
- 0x5C180400, // 000E MOVE R6 R2
- 0x5C1C0600, // 000F MOVE R7 R3
- 0x7C100600, // 0010 CALL R4 3
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: PaletteGradientAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(PaletteGradientAnimation,
- 3,
- &be_class_Animation,
- be_nested_map(11,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(update, 10), be_const_closure(class_PaletteGradientAnimation_update_closure) },
- { be_const_key_weak(_update_value_buffer, 6), be_const_closure(class_PaletteGradientAnimation__update_value_buffer_closure) },
- { be_const_key_weak(value_buffer, -1), be_const_var(0) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_PaletteGradientAnimation_tostring_closure) },
- { be_const_key_weak(render, 0), be_const_closure(class_PaletteGradientAnimation_render_closure) },
- { be_const_key_weak(on_param_changed, 7), be_const_closure(class_PaletteGradientAnimation_on_param_changed_closure) },
- { be_const_key_weak(_initialize_value_buffer, -1), be_const_closure(class_PaletteGradientAnimation__initialize_value_buffer_closure) },
- { be_const_key_weak(_phase_shift, 2), be_const_var(2) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(4,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(color_source, -1), be_const_bytes_instance(0C0605) },
- { be_const_key_weak(shift_period, 2), be_const_bytes_instance(0500000000) },
- { be_const_key_weak(spatial_period, -1), be_const_bytes_instance(0500000000) },
- { be_const_key_weak(phase_shift, -1), be_const_bytes_instance(07000001FF000000) },
- })) ) } )) },
- { be_const_key_weak(init, -1), be_const_closure(class_PaletteGradientAnimation_init_closure) },
- { be_const_key_weak(_spatial_period, -1), be_const_var(1) },
- })),
- be_str_weak(PaletteGradientAnimation)
-);
-// compact class 'FrameBuffer' ktab size: 21, total: 43 (saved 176 bytes)
-static const bvalue be_ktab_class_FrameBuffer[21] = {
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(value_error),
- /* K2 */ be_nested_str_weak(width_X20must_X20be_X20positive),
- /* K3 */ be_nested_str_weak(width),
- /* K4 */ be_nested_str_weak(pixels),
- /* K5 */ be_nested_str_weak(resize),
- /* K6 */ be_nested_str_weak(clear),
- /* K7 */ be_nested_str_weak(int),
- /* K8 */ be_nested_str_weak(instance),
- /* K9 */ be_nested_str_weak(copy),
- /* K10 */ be_nested_str_weak(argument_X20must_X20be_X20either_X20int_X20or_X20instance),
- /* K11 */ be_nested_str_weak(index_error),
- /* K12 */ be_nested_str_weak(pixel_X20index_X20out_X20of_X20range),
- /* K13 */ be_nested_str_weak(set),
- /* K14 */ be_nested_str_weak(tohex),
- /* K15 */ be_nested_str_weak(FrameBuffer_X28width_X3D_X25s_X2C_X20pixels_X3D_X25s_X29),
- /* K16 */ be_nested_str_weak(set_pixel_color),
- /* K17 */ be_nested_str_weak(animation),
- /* K18 */ be_nested_str_weak(frame_buffer),
- /* K19 */ be_nested_str_weak(get),
- /* K20 */ be_nested_str_weak(get_pixel_color),
-};
-
-
-extern const bclass be_class_FrameBuffer;
-
-/********************************************************************
-** Solidified function: resize
-********************************************************************/
-be_local_closure(class_FrameBuffer_resize, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(resize),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x18080300, // 0000 LE R2 R1 K0
- 0x780A0000, // 0001 JMPF R2 #0003
- 0xB0060302, // 0002 RAISE 1 K1 K2
- 0x88080103, // 0003 GETMBR R2 R0 K3
- 0x1C080202, // 0004 EQ R2 R1 R2
- 0x780A0000, // 0005 JMPF R2 #0007
- 0x80000400, // 0006 RET 0
- 0x90020601, // 0007 SETMBR R0 K3 R1
- 0x88080104, // 0008 GETMBR R2 R0 K4
- 0x8C080505, // 0009 GETMET R2 R2 K5
- 0x88100103, // 000A GETMBR R4 R0 K3
- 0x54160003, // 000B LDINT R5 4
- 0x08100805, // 000C MUL R4 R4 R5
- 0x7C080400, // 000D CALL R2 2
- 0x8C080106, // 000E GETMET R2 R0 K6
- 0x7C080200, // 000F CALL R2 1
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: clear
-********************************************************************/
-be_local_closure(class_FrameBuffer_clear, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(clear),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88040104, // 0000 GETMBR R1 R0 K4
- 0x8C040306, // 0001 GETMET R1 R1 K6
+ ( &(const binstruction[ 9]) { /* code */
+ 0x60040015, // 0000 GETGBL R1 G21
+ 0x58080000, // 0001 LDCONST R2 K0
0x7C040200, // 0002 CALL R1 1
- 0x6004000C, // 0003 GETGBL R1 G12
- 0x88080104, // 0004 GETMBR R2 R0 K4
- 0x7C040200, // 0005 CALL R1 1
- 0x88080103, // 0006 GETMBR R2 R0 K3
- 0x540E0003, // 0007 LDINT R3 4
- 0x08080403, // 0008 MUL R2 R2 R3
- 0x20040202, // 0009 NE R1 R1 R2
- 0x78060005, // 000A JMPF R1 #0011
- 0x88040104, // 000B GETMBR R1 R0 K4
- 0x8C040305, // 000C GETMET R1 R1 K5
- 0x880C0103, // 000D GETMBR R3 R0 K3
- 0x54120003, // 000E LDINT R4 4
- 0x080C0604, // 000F MUL R3 R3 R4
- 0x7C040400, // 0010 CALL R1 2
- 0x80000000, // 0011 RET 0
+ 0xB80A0200, // 0003 GETNGBL R2 K1
+ 0x8C080502, // 0004 GETMET R2 R2 K2
+ 0x5C100000, // 0005 MOVE R4 R0
+ 0x7C080400, // 0006 CALL R2 2
+ 0x900A0601, // 0007 SETMBR R2 K3 R1
+ 0x80040400, // 0008 RET 1 R2
})
)
);
@@ -10095,300 +12755,40 @@ be_local_closure(class_FrameBuffer_clear, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: elastic
********************************************************************/
-be_local_closure(class_FrameBuffer_init, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[36]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080507, // 0003 EQ R2 R2 K7
- 0x780A0010, // 0004 JMPF R2 #0016
- 0x5C080200, // 0005 MOVE R2 R1
- 0x180C0500, // 0006 LE R3 R2 K0
- 0x780E0000, // 0007 JMPF R3 #0009
- 0xB0060302, // 0008 RAISE 1 K1 K2
- 0x90020602, // 0009 SETMBR R0 K3 R2
- 0x600C0015, // 000A GETGBL R3 G21
- 0x54120003, // 000B LDINT R4 4
- 0x08100404, // 000C MUL R4 R2 R4
- 0x7C0C0200, // 000D CALL R3 1
- 0x8C100705, // 000E GETMET R4 R3 K5
- 0x541A0003, // 000F LDINT R6 4
- 0x08180406, // 0010 MUL R6 R2 R6
- 0x7C100400, // 0011 CALL R4 2
- 0x90020803, // 0012 SETMBR R0 K4 R3
- 0x8C100106, // 0013 GETMET R4 R0 K6
- 0x7C100200, // 0014 CALL R4 1
- 0x7002000C, // 0015 JMP #0023
- 0x60080004, // 0016 GETGBL R2 G4
- 0x5C0C0200, // 0017 MOVE R3 R1
- 0x7C080200, // 0018 CALL R2 1
- 0x1C080508, // 0019 EQ R2 R2 K8
- 0x780A0006, // 001A JMPF R2 #0022
- 0x88080303, // 001B GETMBR R2 R1 K3
- 0x90020602, // 001C SETMBR R0 K3 R2
- 0x88080304, // 001D GETMBR R2 R1 K4
- 0x8C080509, // 001E GETMET R2 R2 K9
- 0x7C080200, // 001F CALL R2 1
- 0x90020802, // 0020 SETMBR R0 K4 R2
- 0x70020000, // 0021 JMP #0023
- 0xB006030A, // 0022 RAISE 1 K1 K10
- 0x80000000, // 0023 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_pixel_color
-********************************************************************/
-be_local_closure(class_FrameBuffer_set_pixel_color, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(set_pixel_color),
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x140C0300, // 0000 LT R3 R1 K0
- 0x740E0002, // 0001 JMPT R3 #0005
- 0x880C0103, // 0002 GETMBR R3 R0 K3
- 0x280C0203, // 0003 GE R3 R1 R3
- 0x780E0000, // 0004 JMPF R3 #0006
- 0xB006170C, // 0005 RAISE 1 K11 K12
- 0x880C0104, // 0006 GETMBR R3 R0 K4
- 0x8C0C070D, // 0007 GETMET R3 R3 K13
- 0x54160003, // 0008 LDINT R5 4
- 0x08140205, // 0009 MUL R5 R1 R5
- 0x5C180400, // 000A MOVE R6 R2
- 0x541E0003, // 000B LDINT R7 4
- 0x7C0C0800, // 000C CALL R3 4
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tohex
-********************************************************************/
-be_local_closure(class_FrameBuffer_tohex, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(tohex),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040104, // 0000 GETMBR R1 R0 K4
- 0x8C04030E, // 0001 GETMET R1 R1 K14
- 0x7C040200, // 0002 CALL R1 1
- 0x80040200, // 0003 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_FrameBuffer_tostring, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x5808000F, // 0001 LDCONST R2 K15
- 0x880C0103, // 0002 GETMBR R3 R0 K3
- 0x88100104, // 0003 GETMBR R4 R0 K4
- 0x7C040600, // 0004 CALL R1 3
- 0x80040200, // 0005 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: setitem
-********************************************************************/
-be_local_closure(class_FrameBuffer_setitem, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(setitem),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C0C0110, // 0000 GETMET R3 R0 K16
- 0x5C140200, // 0001 MOVE R5 R1
- 0x5C180400, // 0002 MOVE R6 R2
- 0x7C0C0600, // 0003 CALL R3 3
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: copy
-********************************************************************/
-be_local_closure(class_FrameBuffer_copy, /* name */
+be_local_closure(elastic, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
- 10, /* varg */
+ 0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(copy),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(ELASTIC),
+ }),
+ be_str_weak(elastic),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xB8062200, // 0000 GETNGBL R1 K17
- 0x8C040312, // 0001 GETMET R1 R1 K18
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
0x5C0C0000, // 0002 MOVE R3 R0
0x7C040400, // 0003 CALL R1 2
- 0x80040200, // 0004 RET 1 R1
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
})
)
);
/*******************************************************************/
-
-/********************************************************************
-** Solidified function: get_pixel_color
-********************************************************************/
-be_local_closure(class_FrameBuffer_get_pixel_color, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(get_pixel_color),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x14080300, // 0000 LT R2 R1 K0
- 0x740A0002, // 0001 JMPT R2 #0005
- 0x88080103, // 0002 GETMBR R2 R0 K3
- 0x28080202, // 0003 GE R2 R1 R2
- 0x780A0000, // 0004 JMPF R2 #0006
- 0xB006170C, // 0005 RAISE 1 K11 K12
- 0x88080104, // 0006 GETMBR R2 R0 K4
- 0x8C080513, // 0007 GETMET R2 R2 K19
- 0x54120003, // 0008 LDINT R4 4
- 0x08100204, // 0009 MUL R4 R1 R4
- 0x54160003, // 000A LDINT R5 4
- 0x7C080600, // 000B CALL R2 3
- 0x80040400, // 000C RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: item
-********************************************************************/
-be_local_closure(class_FrameBuffer_item, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_FrameBuffer, /* shared constants */
- be_str_weak(item),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x8C080114, // 0000 GETMET R2 R0 K20
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x80040400, // 0003 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: FrameBuffer
-********************************************************************/
-extern const bclass be_class_FrameBufferNtv;
-be_local_class(FrameBuffer,
- 2,
- &be_class_FrameBufferNtv,
- be_nested_map(12,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(pixels, -1), be_const_var(0) },
- { be_const_key_weak(resize, 6), be_const_closure(class_FrameBuffer_resize_closure) },
- { be_const_key_weak(clear, -1), be_const_closure(class_FrameBuffer_clear_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_FrameBuffer_init_closure) },
- { be_const_key_weak(set_pixel_color, -1), be_const_closure(class_FrameBuffer_set_pixel_color_closure) },
- { be_const_key_weak(tohex, -1), be_const_closure(class_FrameBuffer_tohex_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_FrameBuffer_tostring_closure) },
- { be_const_key_weak(copy, -1), be_const_closure(class_FrameBuffer_copy_closure) },
- { be_const_key_weak(setitem, 9), be_const_closure(class_FrameBuffer_setitem_closure) },
- { be_const_key_weak(get_pixel_color, 7), be_const_closure(class_FrameBuffer_get_pixel_color_closure) },
- { be_const_key_weak(item, -1), be_const_closure(class_FrameBuffer_item_closure) },
- { be_const_key_weak(width, -1), be_const_var(1) },
- })),
- be_str_weak(FrameBuffer)
-);
// compact class 'AnimationEngine' ktab size: 90, total: 211 (saved 968 bytes)
static const bvalue be_ktab_class_AnimationEngine[90] = {
/* K0 */ be_nested_str_weak(is_running),
@@ -11981,80 +14381,12 @@ be_local_class(AnimationEngine,
);
/********************************************************************
-** Solidified function: cosine_osc
+** Solidified function: get_registered_events
********************************************************************/
-be_local_closure(cosine_osc, /* name */
+be_local_closure(get_registered_events, /* name */
be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(COSINE),
- }),
- be_str_weak(cosine_osc),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: is_color_provider
-********************************************************************/
-be_local_closure(is_color_provider, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(color_provider),
- }),
- be_str_weak(is_color_provider),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x6004000F, // 0000 GETGBL R1 G15
- 0x5C080000, // 0001 MOVE R2 R0
- 0xB80E0000, // 0002 GETNGBL R3 K0
- 0x880C0701, // 0003 GETMBR R3 R3 K1
- 0x7C040400, // 0004 CALL R1 2
- 0x80040200, // 0005 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_event_handlers
-********************************************************************/
-be_local_closure(get_event_handlers, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
+ 2, /* nstack */
+ 0, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -12064,662 +14396,21 @@ be_local_closure(get_event_handlers, /* name */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(animation),
/* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(get_handlers),
+ /* K2 */ be_nested_str_weak(get_registered_events),
}),
- be_str_weak(get_event_handlers),
+ be_str_weak(get_registered_events),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x88040301, // 0001 GETMBR R1 R1 K1
- 0x8C040302, // 0002 GETMET R1 R1 K2
- 0x5C0C0000, // 0003 MOVE R3 R0
- 0x7C040400, // 0004 CALL R1 2
- 0x80040200, // 0005 RET 1 R1
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8020000, // 0000 GETNGBL R0 K0
+ 0x88000101, // 0001 GETMBR R0 R0 K1
+ 0x8C000102, // 0002 GETMET R0 R0 K2
+ 0x7C000200, // 0003 CALL R0 1
+ 0x80040000, // 0004 RET 1 R0
})
)
);
/*******************************************************************/
-// compact class 'WaveAnimation' ktab size: 42, total: 67 (saved 200 bytes)
-static const bvalue be_ktab_class_WaveAnimation[42] = {
- /* K0 */ be_nested_str_weak(wave_table),
- /* K1 */ be_nested_str_weak(resize),
- /* K2 */ be_nested_str_weak(wave_type),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(scale_uint),
- /* K6 */ be_const_int(1),
- /* K7 */ be_const_int(2),
- /* K8 */ be_nested_str_weak(sine),
- /* K9 */ be_nested_str_weak(triangle),
- /* K10 */ be_nested_str_weak(square),
- /* K11 */ be_nested_str_weak(sawtooth),
- /* K12 */ be_nested_str_weak(unknown),
- /* K13 */ be_nested_str_weak(color),
- /* K14 */ be_nested_str_weak(animation),
- /* K15 */ be_nested_str_weak(is_value_provider),
- /* K16 */ be_nested_str_weak(0x_X2508x),
- /* K17 */ be_nested_str_weak(WaveAnimation_X28_X25s_X2C_X20color_X3D_X25s_X2C_X20freq_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K18 */ be_nested_str_weak(frequency),
- /* K19 */ be_nested_str_weak(wave_speed),
- /* K20 */ be_nested_str_weak(priority),
- /* K21 */ be_nested_str_weak(is_running),
- /* K22 */ be_nested_str_weak(width),
- /* K23 */ be_nested_str_weak(current_colors),
- /* K24 */ be_nested_str_weak(size),
- /* K25 */ be_nested_str_weak(set_pixel_color),
- /* K26 */ be_nested_str_weak(on_param_changed),
- /* K27 */ be_nested_str_weak(_init_wave_table),
- /* K28 */ be_nested_str_weak(update),
- /* K29 */ be_nested_str_weak(start_time),
- /* K30 */ be_nested_str_weak(time_offset),
- /* K31 */ be_nested_str_weak(_calculate_wave),
- /* K32 */ be_nested_str_weak(init),
- /* K33 */ be_nested_str_weak(engine),
- /* K34 */ be_nested_str_weak(strip_length),
- /* K35 */ be_nested_str_weak(phase),
- /* K36 */ be_nested_str_weak(amplitude),
- /* K37 */ be_nested_str_weak(center_level),
- /* K38 */ be_nested_str_weak(back_color),
- /* K39 */ be_nested_str_weak(is_color_provider),
- /* K40 */ be_nested_str_weak(get_color_for_value),
- /* K41 */ be_nested_str_weak(resolve_value),
-};
-
-
-extern const bclass be_class_WaveAnimation;
-
-/********************************************************************
-** Solidified function: _init_wave_table
-********************************************************************/
-be_local_closure(class_WaveAnimation__init_wave_table, /* name */
- be_nested_proto(
- 12, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(_init_wave_table),
- &be_const_str_solidified,
- ( &(const binstruction[108]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x540E00FF, // 0002 LDINT R3 256
- 0x7C040400, // 0003 CALL R1 2
- 0x88040102, // 0004 GETMBR R1 R0 K2
- 0x58080003, // 0005 LDCONST R2 K3
- 0x540E00FF, // 0006 LDINT R3 256
- 0x140C0403, // 0007 LT R3 R2 R3
- 0x780E0061, // 0008 JMPF R3 #006B
- 0x580C0003, // 0009 LDCONST R3 K3
- 0x1C100303, // 000A EQ R4 R1 K3
- 0x78120035, // 000B JMPF R4 #0042
- 0x5412003F, // 000C LDINT R4 64
- 0x10100404, // 000D MOD R4 R2 R4
- 0x5416003F, // 000E LDINT R5 64
- 0x14140405, // 000F LT R5 R2 R5
- 0x78160009, // 0010 JMPF R5 #001B
- 0xB8160800, // 0011 GETNGBL R5 K4
- 0x8C140B05, // 0012 GETMET R5 R5 K5
- 0x5C1C0800, // 0013 MOVE R7 R4
- 0x58200003, // 0014 LDCONST R8 K3
- 0x5426003F, // 0015 LDINT R9 64
- 0x542A007F, // 0016 LDINT R10 128
- 0x542E00FE, // 0017 LDINT R11 255
- 0x7C140C00, // 0018 CALL R5 6
- 0x5C0C0A00, // 0019 MOVE R3 R5
- 0x70020025, // 001A JMP #0041
- 0x5416007F, // 001B LDINT R5 128
- 0x14140405, // 001C LT R5 R2 R5
- 0x7816000A, // 001D JMPF R5 #0029
- 0xB8160800, // 001E GETNGBL R5 K4
- 0x8C140B05, // 001F GETMET R5 R5 K5
- 0x541E007F, // 0020 LDINT R7 128
- 0x041C0E02, // 0021 SUB R7 R7 R2
- 0x58200003, // 0022 LDCONST R8 K3
- 0x5426003F, // 0023 LDINT R9 64
- 0x542A007F, // 0024 LDINT R10 128
- 0x542E00FE, // 0025 LDINT R11 255
- 0x7C140C00, // 0026 CALL R5 6
- 0x5C0C0A00, // 0027 MOVE R3 R5
- 0x70020017, // 0028 JMP #0041
- 0x541600BF, // 0029 LDINT R5 192
- 0x14140405, // 002A LT R5 R2 R5
- 0x7816000A, // 002B JMPF R5 #0037
- 0xB8160800, // 002C GETNGBL R5 K4
- 0x8C140B05, // 002D GETMET R5 R5 K5
- 0x541E007F, // 002E LDINT R7 128
- 0x041C0407, // 002F SUB R7 R2 R7
- 0x58200003, // 0030 LDCONST R8 K3
- 0x5426003F, // 0031 LDINT R9 64
- 0x542A007F, // 0032 LDINT R10 128
- 0x582C0003, // 0033 LDCONST R11 K3
- 0x7C140C00, // 0034 CALL R5 6
- 0x5C0C0A00, // 0035 MOVE R3 R5
- 0x70020009, // 0036 JMP #0041
- 0xB8160800, // 0037 GETNGBL R5 K4
- 0x8C140B05, // 0038 GETMET R5 R5 K5
- 0x541E00FF, // 0039 LDINT R7 256
- 0x041C0E02, // 003A SUB R7 R7 R2
- 0x58200003, // 003B LDCONST R8 K3
- 0x5426003F, // 003C LDINT R9 64
- 0x542A007F, // 003D LDINT R10 128
- 0x582C0003, // 003E LDCONST R11 K3
- 0x7C140C00, // 003F CALL R5 6
- 0x5C0C0A00, // 0040 MOVE R3 R5
- 0x70020024, // 0041 JMP #0067
- 0x1C100306, // 0042 EQ R4 R1 K6
- 0x78120017, // 0043 JMPF R4 #005C
- 0x5412007F, // 0044 LDINT R4 128
- 0x14100404, // 0045 LT R4 R2 R4
- 0x78120009, // 0046 JMPF R4 #0051
- 0xB8120800, // 0047 GETNGBL R4 K4
- 0x8C100905, // 0048 GETMET R4 R4 K5
- 0x5C180400, // 0049 MOVE R6 R2
- 0x581C0003, // 004A LDCONST R7 K3
- 0x5422007F, // 004B LDINT R8 128
- 0x58240003, // 004C LDCONST R9 K3
- 0x542A00FE, // 004D LDINT R10 255
- 0x7C100C00, // 004E CALL R4 6
- 0x5C0C0800, // 004F MOVE R3 R4
- 0x70020009, // 0050 JMP #005B
- 0xB8120800, // 0051 GETNGBL R4 K4
- 0x8C100905, // 0052 GETMET R4 R4 K5
- 0x541A00FF, // 0053 LDINT R6 256
- 0x04180C02, // 0054 SUB R6 R6 R2
- 0x581C0003, // 0055 LDCONST R7 K3
- 0x5422007F, // 0056 LDINT R8 128
- 0x58240003, // 0057 LDCONST R9 K3
- 0x542A00FE, // 0058 LDINT R10 255
- 0x7C100C00, // 0059 CALL R4 6
- 0x5C0C0800, // 005A MOVE R3 R4
- 0x7002000A, // 005B JMP #0067
- 0x1C100307, // 005C EQ R4 R1 K7
- 0x78120007, // 005D JMPF R4 #0066
- 0x5412007F, // 005E LDINT R4 128
- 0x14100404, // 005F LT R4 R2 R4
- 0x78120001, // 0060 JMPF R4 #0063
- 0x541200FE, // 0061 LDINT R4 255
- 0x70020000, // 0062 JMP #0064
- 0x58100003, // 0063 LDCONST R4 K3
- 0x5C0C0800, // 0064 MOVE R3 R4
- 0x70020000, // 0065 JMP #0067
- 0x5C0C0400, // 0066 MOVE R3 R2
- 0x88100100, // 0067 GETMBR R4 R0 K0
- 0x98100403, // 0068 SETIDX R4 R2 R3
- 0x00080506, // 0069 ADD R2 R2 K6
- 0x7001FF9A, // 006A JMP #0006
- 0x80000000, // 006B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_WaveAnimation_tostring, /* name */
- be_nested_proto(
- 14, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[41]) { /* code */
- 0x60040012, // 0000 GETGBL R1 G18
- 0x7C040000, // 0001 CALL R1 0
- 0x40080308, // 0002 CONNECT R2 R1 K8
- 0x40080309, // 0003 CONNECT R2 R1 K9
- 0x4008030A, // 0004 CONNECT R2 R1 K10
- 0x4008030B, // 0005 CONNECT R2 R1 K11
- 0x88080102, // 0006 GETMBR R2 R0 K2
- 0x940C0202, // 0007 GETIDX R3 R1 R2
- 0x4C100000, // 0008 LDNIL R4
- 0x200C0604, // 0009 NE R3 R3 R4
- 0x780E0001, // 000A JMPF R3 #000D
- 0x940C0202, // 000B GETIDX R3 R1 R2
- 0x70020000, // 000C JMP #000E
- 0x580C000C, // 000D LDCONST R3 K12
- 0x8810010D, // 000E GETMBR R4 R0 K13
- 0x4C140000, // 000F LDNIL R5
- 0xB81A1C00, // 0010 GETNGBL R6 K14
- 0x8C180D0F, // 0011 GETMET R6 R6 K15
- 0x5C200800, // 0012 MOVE R8 R4
- 0x7C180400, // 0013 CALL R6 2
- 0x781A0004, // 0014 JMPF R6 #001A
- 0x60180008, // 0015 GETGBL R6 G8
- 0x5C1C0800, // 0016 MOVE R7 R4
- 0x7C180200, // 0017 CALL R6 1
- 0x5C140C00, // 0018 MOVE R5 R6
- 0x70020004, // 0019 JMP #001F
- 0x60180018, // 001A GETGBL R6 G24
- 0x581C0010, // 001B LDCONST R7 K16
- 0x5C200800, // 001C MOVE R8 R4
- 0x7C180400, // 001D CALL R6 2
- 0x5C140C00, // 001E MOVE R5 R6
- 0x60180018, // 001F GETGBL R6 G24
- 0x581C0011, // 0020 LDCONST R7 K17
- 0x5C200600, // 0021 MOVE R8 R3
- 0x5C240A00, // 0022 MOVE R9 R5
- 0x88280112, // 0023 GETMBR R10 R0 K18
- 0x882C0113, // 0024 GETMBR R11 R0 K19
- 0x88300114, // 0025 GETMBR R12 R0 K20
- 0x88340115, // 0026 GETMBR R13 R0 K21
- 0x7C180E00, // 0027 CALL R6 7
- 0x80040C00, // 0028 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_WaveAnimation_render, /* name */
- be_nested_proto(
- 9, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0x58100003, // 0000 LDCONST R4 K3
- 0x14140803, // 0001 LT R5 R4 R3
- 0x7816000E, // 0002 JMPF R5 #0012
- 0x88140316, // 0003 GETMBR R5 R1 K22
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160009, // 0005 JMPF R5 #0010
- 0x88140117, // 0006 GETMBR R5 R0 K23
- 0x8C140B18, // 0007 GETMET R5 R5 K24
- 0x7C140200, // 0008 CALL R5 1
- 0x14140805, // 0009 LT R5 R4 R5
- 0x78160004, // 000A JMPF R5 #0010
- 0x8C140319, // 000B GETMET R5 R1 K25
- 0x5C1C0800, // 000C MOVE R7 R4
- 0x88200117, // 000D GETMBR R8 R0 K23
- 0x94201004, // 000E GETIDX R8 R8 R4
- 0x7C140600, // 000F CALL R5 3
- 0x00100906, // 0010 ADD R4 R4 K6
- 0x7001FFEE, // 0011 JMP #0001
- 0x50140200, // 0012 LDBOOL R5 1 0
- 0x80040A00, // 0013 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_WaveAnimation_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C071A, // 0003 GETMET R3 R3 K26
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0302, // 0007 EQ R3 R1 K2
- 0x780E0001, // 0008 JMPF R3 #000B
- 0x8C0C011B, // 0009 GETMET R3 R0 K27
- 0x7C0C0200, // 000A CALL R3 1
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_WaveAnimation_update, /* name */
- be_nested_proto(
- 11, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08051C, // 0003 GETMET R2 R2 K28
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080113, // 0006 GETMBR R2 R0 K19
- 0x240C0503, // 0007 GT R3 R2 K3
- 0x780E0011, // 0008 JMPF R3 #001B
- 0x880C011D, // 0009 GETMBR R3 R0 K29
- 0x040C0203, // 000A SUB R3 R1 R3
- 0xB8120800, // 000B GETNGBL R4 K4
- 0x8C100905, // 000C GETMET R4 R4 K5
- 0x5C180400, // 000D MOVE R6 R2
- 0x581C0003, // 000E LDCONST R7 K3
- 0x542200FE, // 000F LDINT R8 255
- 0x58240003, // 0010 LDCONST R9 K3
- 0x542A0009, // 0011 LDINT R10 10
- 0x7C100C00, // 0012 CALL R4 6
- 0x24140903, // 0013 GT R5 R4 K3
- 0x78160005, // 0014 JMPF R5 #001B
- 0x08140604, // 0015 MUL R5 R3 R4
- 0x541A03E7, // 0016 LDINT R6 1000
- 0x0C140A06, // 0017 DIV R5 R5 R6
- 0x541A00FF, // 0018 LDINT R6 256
- 0x10140A06, // 0019 MOD R5 R5 R6
- 0x90023C05, // 001A SETMBR R0 K30 R5
- 0x8C0C011F, // 001B GETMET R3 R0 K31
- 0x5C140200, // 001C MOVE R5 R1
- 0x7C0C0400, // 001D CALL R3 2
- 0x80000000, // 001E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_WaveAnimation_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080520, // 0003 GETMET R2 R2 K32
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x60080012, // 0006 GETGBL R2 G18
- 0x7C080000, // 0007 CALL R2 0
- 0x90022E02, // 0008 SETMBR R0 K23 R2
- 0x90023D03, // 0009 SETMBR R0 K30 K3
- 0x60080012, // 000A GETGBL R2 G18
- 0x7C080000, // 000B CALL R2 0
- 0x90020002, // 000C SETMBR R0 K0 R2
- 0x8C08011B, // 000D GETMET R2 R0 K27
- 0x7C080200, // 000E CALL R2 1
- 0x80000000, // 000F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _calculate_wave
-********************************************************************/
-be_local_closure(class_WaveAnimation__calculate_wave, /* name */
- be_nested_proto(
- 27, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_WaveAnimation, /* shared constants */
- be_str_weak(_calculate_wave),
- &be_const_str_solidified,
- ( &(const binstruction[168]) { /* code */
- 0x88080121, // 0000 GETMBR R2 R0 K33
- 0x88080522, // 0001 GETMBR R2 R2 K34
- 0x880C0112, // 0002 GETMBR R3 R0 K18
- 0x88100123, // 0003 GETMBR R4 R0 K35
- 0x88140124, // 0004 GETMBR R5 R0 K36
- 0x88180125, // 0005 GETMBR R6 R0 K37
- 0x881C0126, // 0006 GETMBR R7 R0 K38
- 0x8820010D, // 0007 GETMBR R8 R0 K13
- 0x88240117, // 0008 GETMBR R9 R0 K23
- 0x8C241318, // 0009 GETMET R9 R9 K24
- 0x7C240200, // 000A CALL R9 1
- 0x20241202, // 000B NE R9 R9 R2
- 0x78260003, // 000C JMPF R9 #0011
- 0x88240117, // 000D GETMBR R9 R0 K23
- 0x8C241301, // 000E GETMET R9 R9 K1
- 0x5C2C0400, // 000F MOVE R11 R2
- 0x7C240400, // 0010 CALL R9 2
- 0x58240003, // 0011 LDCONST R9 K3
- 0x14281202, // 0012 LT R10 R9 R2
- 0x782A0092, // 0013 JMPF R10 #00A7
- 0xB82A0800, // 0014 GETNGBL R10 K4
- 0x8C281505, // 0015 GETMET R10 R10 K5
- 0x5C301200, // 0016 MOVE R12 R9
- 0x58340003, // 0017 LDCONST R13 K3
- 0x04380506, // 0018 SUB R14 R2 K6
- 0x583C0003, // 0019 LDCONST R15 K3
- 0x544200FE, // 001A LDINT R16 255
- 0x7C280C00, // 001B CALL R10 6
- 0x082C1403, // 001C MUL R11 R10 R3
- 0x5432001F, // 001D LDINT R12 32
- 0x0C2C160C, // 001E DIV R11 R11 R12
- 0x002C1604, // 001F ADD R11 R11 R4
- 0x8830011E, // 0020 GETMBR R12 R0 K30
- 0x002C160C, // 0021 ADD R11 R11 R12
- 0x543200FE, // 0022 LDINT R12 255
- 0x2C2C160C, // 0023 AND R11 R11 R12
- 0x88300100, // 0024 GETMBR R12 R0 K0
- 0x9430180B, // 0025 GETIDX R12 R12 R11
- 0xB8360800, // 0026 GETNGBL R13 K4
- 0x8C341B05, // 0027 GETMET R13 R13 K5
- 0x5C3C0A00, // 0028 MOVE R15 R5
- 0x58400003, // 0029 LDCONST R16 K3
- 0x544600FE, // 002A LDINT R17 255
- 0x58480003, // 002B LDCONST R18 K3
- 0x544E007F, // 002C LDINT R19 128
- 0x7C340C00, // 002D CALL R13 6
- 0x58380003, // 002E LDCONST R14 K3
- 0x543E007F, // 002F LDINT R15 128
- 0x283C180F, // 0030 GE R15 R12 R15
- 0x783E000D, // 0031 JMPF R15 #0040
- 0x543E007F, // 0032 LDINT R15 128
- 0x043C180F, // 0033 SUB R15 R12 R15
- 0xB8420800, // 0034 GETNGBL R16 K4
- 0x8C402105, // 0035 GETMET R16 R16 K5
- 0x5C481E00, // 0036 MOVE R18 R15
- 0x584C0003, // 0037 LDCONST R19 K3
- 0x5452007E, // 0038 LDINT R20 127
- 0x58540003, // 0039 LDCONST R21 K3
- 0x5C581A00, // 003A MOVE R22 R13
- 0x7C400C00, // 003B CALL R16 6
- 0x5C3C2000, // 003C MOVE R15 R16
- 0x00400C0F, // 003D ADD R16 R6 R15
- 0x5C382000, // 003E MOVE R14 R16
- 0x7002000C, // 003F JMP #004D
- 0x543E007F, // 0040 LDINT R15 128
- 0x043C1E0C, // 0041 SUB R15 R15 R12
- 0xB8420800, // 0042 GETNGBL R16 K4
- 0x8C402105, // 0043 GETMET R16 R16 K5
- 0x5C481E00, // 0044 MOVE R18 R15
- 0x584C0003, // 0045 LDCONST R19 K3
- 0x5452007F, // 0046 LDINT R20 128
- 0x58540003, // 0047 LDCONST R21 K3
- 0x5C581A00, // 0048 MOVE R22 R13
- 0x7C400C00, // 0049 CALL R16 6
- 0x5C3C2000, // 004A MOVE R15 R16
- 0x04400C0F, // 004B SUB R16 R6 R15
- 0x5C382000, // 004C MOVE R14 R16
- 0x543E00FE, // 004D LDINT R15 255
- 0x243C1C0F, // 004E GT R15 R14 R15
- 0x783E0001, // 004F JMPF R15 #0052
- 0x543A00FE, // 0050 LDINT R14 255
- 0x70020002, // 0051 JMP #0055
- 0x143C1D03, // 0052 LT R15 R14 K3
- 0x783E0000, // 0053 JMPF R15 #0055
- 0x58380003, // 0054 LDCONST R14 K3
- 0x5C3C0E00, // 0055 MOVE R15 R7
- 0x54420009, // 0056 LDINT R16 10
- 0x24401C10, // 0057 GT R16 R14 R16
- 0x78420049, // 0058 JMPF R16 #00A3
- 0xB8421C00, // 0059 GETNGBL R16 K14
- 0x8C402127, // 005A GETMET R16 R16 K39
- 0x5C481000, // 005B MOVE R18 R8
- 0x7C400400, // 005C CALL R16 2
- 0x78420009, // 005D JMPF R16 #0068
- 0x88401128, // 005E GETMBR R16 R8 K40
- 0x4C440000, // 005F LDNIL R17
- 0x20402011, // 0060 NE R16 R16 R17
- 0x78420005, // 0061 JMPF R16 #0068
- 0x8C401128, // 0062 GETMET R16 R8 K40
- 0x5C481C00, // 0063 MOVE R18 R14
- 0x584C0003, // 0064 LDCONST R19 K3
- 0x7C400600, // 0065 CALL R16 3
- 0x5C3C2000, // 0066 MOVE R15 R16
- 0x7002003A, // 0067 JMP #00A3
- 0x8C400129, // 0068 GETMET R16 R0 K41
- 0x5C481000, // 0069 MOVE R18 R8
- 0x584C000D, // 006A LDCONST R19 K13
- 0x54520009, // 006B LDINT R20 10
- 0x08501C14, // 006C MUL R20 R14 R20
- 0x00500214, // 006D ADD R20 R1 R20
- 0x7C400800, // 006E CALL R16 4
- 0x5C3C2000, // 006F MOVE R15 R16
- 0x54420017, // 0070 LDINT R16 24
- 0x3C401E10, // 0071 SHR R16 R15 R16
- 0x544600FE, // 0072 LDINT R17 255
- 0x2C402011, // 0073 AND R16 R16 R17
- 0x5446000F, // 0074 LDINT R17 16
- 0x3C441E11, // 0075 SHR R17 R15 R17
- 0x544A00FE, // 0076 LDINT R18 255
- 0x2C442212, // 0077 AND R17 R17 R18
- 0x544A0007, // 0078 LDINT R18 8
- 0x3C481E12, // 0079 SHR R18 R15 R18
- 0x544E00FE, // 007A LDINT R19 255
- 0x2C482413, // 007B AND R18 R18 R19
- 0x544E00FE, // 007C LDINT R19 255
- 0x2C4C1E13, // 007D AND R19 R15 R19
- 0xB8520800, // 007E GETNGBL R20 K4
- 0x8C502905, // 007F GETMET R20 R20 K5
- 0x5C581C00, // 0080 MOVE R22 R14
- 0x585C0003, // 0081 LDCONST R23 K3
- 0x546200FE, // 0082 LDINT R24 255
- 0x58640003, // 0083 LDCONST R25 K3
- 0x5C682200, // 0084 MOVE R26 R17
- 0x7C500C00, // 0085 CALL R20 6
- 0x5C442800, // 0086 MOVE R17 R20
- 0xB8520800, // 0087 GETNGBL R20 K4
- 0x8C502905, // 0088 GETMET R20 R20 K5
- 0x5C581C00, // 0089 MOVE R22 R14
- 0x585C0003, // 008A LDCONST R23 K3
- 0x546200FE, // 008B LDINT R24 255
- 0x58640003, // 008C LDCONST R25 K3
- 0x5C682400, // 008D MOVE R26 R18
- 0x7C500C00, // 008E CALL R20 6
- 0x5C482800, // 008F MOVE R18 R20
- 0xB8520800, // 0090 GETNGBL R20 K4
- 0x8C502905, // 0091 GETMET R20 R20 K5
- 0x5C581C00, // 0092 MOVE R22 R14
- 0x585C0003, // 0093 LDCONST R23 K3
- 0x546200FE, // 0094 LDINT R24 255
- 0x58640003, // 0095 LDCONST R25 K3
- 0x5C682600, // 0096 MOVE R26 R19
- 0x7C500C00, // 0097 CALL R20 6
- 0x5C4C2800, // 0098 MOVE R19 R20
- 0x54520017, // 0099 LDINT R20 24
- 0x38502014, // 009A SHL R20 R16 R20
- 0x5456000F, // 009B LDINT R21 16
- 0x38542215, // 009C SHL R21 R17 R21
- 0x30502815, // 009D OR R20 R20 R21
- 0x54560007, // 009E LDINT R21 8
- 0x38542415, // 009F SHL R21 R18 R21
- 0x30502815, // 00A0 OR R20 R20 R21
- 0x30502813, // 00A1 OR R20 R20 R19
- 0x5C3C2800, // 00A2 MOVE R15 R20
- 0x88400117, // 00A3 GETMBR R16 R0 K23
- 0x9840120F, // 00A4 SETIDX R16 R9 R15
- 0x00241306, // 00A5 ADD R9 R9 K6
- 0x7001FF6A, // 00A6 JMP #0012
- 0x80000000, // 00A7 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: WaveAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(WaveAnimation,
- 3,
- &be_class_Animation,
- be_nested_map(11,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(current_colors, -1), be_const_var(0) },
- { be_const_key_weak(update, -1), be_const_closure(class_WaveAnimation_update_closure) },
- { be_const_key_weak(wave_table, -1), be_const_var(2) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_WaveAnimation_tostring_closure) },
- { be_const_key_weak(render, 7), be_const_closure(class_WaveAnimation_render_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_WaveAnimation_on_param_changed_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_WaveAnimation_init_closure) },
- { be_const_key_weak(time_offset, 1), be_const_var(1) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(8,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(phase, 7), be_const_bytes_instance(07000001FF000000) },
- { be_const_key_weak(center_level, 3), be_const_bytes_instance(07000001FF00018000) },
- { be_const_key_weak(amplitude, -1), be_const_bytes_instance(07000001FF00018000) },
- { be_const_key_weak(frequency, 5), be_const_bytes_instance(07000001FF000020) },
- { be_const_key_weak(wave_speed, -1), be_const_bytes_instance(07000001FF000032) },
- { be_const_key_weak(wave_type, -1), be_const_bytes_instance(07000000030000) },
- { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) },
- { be_const_key_weak(color, -1), be_const_bytes_instance(04020000FFFF) },
- })) ) } )) },
- { be_const_key_weak(_init_wave_table, 6), be_const_closure(class_WaveAnimation__init_wave_table_closure) },
- { be_const_key_weak(_calculate_wave, -1), be_const_closure(class_WaveAnimation__calculate_wave_closure) },
- })),
- be_str_weak(WaveAnimation)
-);
/********************************************************************
** Solidified function: wave_rainbow_sine
@@ -12781,6 +14472,66 @@ be_local_closure(wave_rainbow_sine, /* name */
);
/*******************************************************************/
+
+/********************************************************************
+** Solidified function: noise_rainbow
+********************************************************************/
+be_local_closure(noise_rainbow, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(noise_animation),
+ /* K2 */ be_nested_str_weak(rich_palette),
+ /* K3 */ be_nested_str_weak(palette),
+ /* K4 */ be_nested_str_weak(PALETTE_RAINBOW),
+ /* K5 */ be_nested_str_weak(cycle_period),
+ /* K6 */ be_nested_str_weak(transition_type),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(brightness),
+ /* K9 */ be_nested_str_weak(color),
+ /* K10 */ be_nested_str_weak(scale),
+ /* K11 */ be_nested_str_weak(speed),
+ /* K12 */ be_nested_str_weak(octaves),
+ }),
+ be_str_weak(noise_rainbow),
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x8C080502, // 0005 GETMET R2 R2 K2
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0xB80E0000, // 0008 GETNGBL R3 K0
+ 0x880C0704, // 0009 GETMBR R3 R3 K4
+ 0x900A0603, // 000A SETMBR R2 K3 R3
+ 0x540E1387, // 000B LDINT R3 5000
+ 0x900A0A03, // 000C SETMBR R2 K5 R3
+ 0x900A0D07, // 000D SETMBR R2 K6 K7
+ 0x540E00FE, // 000E LDINT R3 255
+ 0x900A1003, // 000F SETMBR R2 K8 R3
+ 0x90061202, // 0010 SETMBR R1 K9 R2
+ 0x540E0031, // 0011 LDINT R3 50
+ 0x90061403, // 0012 SETMBR R1 K10 R3
+ 0x540E001D, // 0013 LDINT R3 30
+ 0x90061603, // 0014 SETMBR R1 K11 R3
+ 0x90061907, // 0015 SETMBR R1 K12 K7
+ 0x80040200, // 0016 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
// compact class 'SequenceManager' ktab size: 46, total: 165 (saved 952 bytes)
static const bvalue be_ktab_class_SequenceManager[46] = {
/* K0 */ be_nested_str_weak(repeat_count),
@@ -13901,3783 +15652,11 @@ be_local_class(SequenceManager,
})),
be_str_weak(SequenceManager)
);
-// compact class 'Animation' ktab size: 26, total: 37 (saved 88 bytes)
-static const bvalue be_ktab_class_Animation[26] = {
- /* K0 */ be_nested_str_weak(get_param_value),
- /* K1 */ be_nested_str_weak(color),
- /* K2 */ be_nested_str_weak(animation),
- /* K3 */ be_nested_str_weak(opacity_frame),
- /* K4 */ be_nested_str_weak(width),
- /* K5 */ be_nested_str_weak(frame_buffer),
- /* K6 */ be_nested_str_weak(clear),
- /* K7 */ be_nested_str_weak(is_running),
- /* K8 */ be_nested_str_weak(start),
- /* K9 */ be_nested_str_weak(start_time),
- /* K10 */ be_nested_str_weak(update),
- /* K11 */ be_nested_str_weak(render),
- /* K12 */ be_nested_str_weak(apply_opacity),
- /* K13 */ be_nested_str_weak(pixels),
- /* K14 */ be_nested_str_weak(duration),
- /* K15 */ be_const_int(0),
- /* K16 */ be_nested_str_weak(loop),
- /* K17 */ be_nested_str_weak(init),
- /* K18 */ be_nested_str_weak(get_color_at),
- /* K19 */ be_nested_str_weak(member),
- /* K20 */ be_nested_str_weak(fill_pixels),
- /* K21 */ be_nested_str_weak(opacity),
- /* K22 */ be_nested_str_weak(int),
- /* K23 */ be_nested_str_weak(_apply_opacity),
- /* K24 */ be_nested_str_weak(Animation_X28priority_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20loop_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K25 */ be_nested_str_weak(priority),
-};
-
-
-extern const bclass be_class_Animation;
-
-/********************************************************************
-** Solidified function: get_color_at
-********************************************************************/
-be_local_closure(class_Animation_get_color_at, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(get_color_at),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C0C0100, // 0000 GETMET R3 R0 K0
- 0x58140001, // 0001 LDCONST R5 K1
- 0x5C180400, // 0002 MOVE R6 R2
- 0x7C0C0600, // 0003 CALL R3 3
- 0x80040600, // 0004 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _apply_opacity
-********************************************************************/
-be_local_closure(class_Animation__apply_opacity, /* name */
- be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(_apply_opacity),
- &be_const_str_solidified,
- ( &(const binstruction[43]) { /* code */
- 0x6014000F, // 0000 GETGBL R5 G15
- 0x5C180400, // 0001 MOVE R6 R2
- 0xB81E0400, // 0002 GETNGBL R7 K2
- 0x881C0F02, // 0003 GETMBR R7 R7 K2
- 0x7C140400, // 0004 CALL R5 2
- 0x78160023, // 0005 JMPF R5 #002A
- 0x5C140400, // 0006 MOVE R5 R2
- 0x88180103, // 0007 GETMBR R6 R0 K3
- 0x4C1C0000, // 0008 LDNIL R7
- 0x1C180C07, // 0009 EQ R6 R6 R7
- 0x741A0004, // 000A JMPT R6 #0010
- 0x88180103, // 000B GETMBR R6 R0 K3
- 0x88180D04, // 000C GETMBR R6 R6 K4
- 0x881C0304, // 000D GETMBR R7 R1 K4
- 0x20180C07, // 000E NE R6 R6 R7
- 0x781A0004, // 000F JMPF R6 #0015
- 0xB81A0400, // 0010 GETNGBL R6 K2
- 0x8C180D05, // 0011 GETMET R6 R6 K5
- 0x88200304, // 0012 GETMBR R8 R1 K4
- 0x7C180400, // 0013 CALL R6 2
- 0x90020606, // 0014 SETMBR R0 K3 R6
- 0x88180103, // 0015 GETMBR R6 R0 K3
- 0x8C180D06, // 0016 GETMET R6 R6 K6
- 0x7C180200, // 0017 CALL R6 1
- 0x88180B07, // 0018 GETMBR R6 R5 K7
- 0x741A0002, // 0019 JMPT R6 #001D
- 0x8C180B08, // 001A GETMET R6 R5 K8
- 0x88200109, // 001B GETMBR R8 R0 K9
- 0x7C180400, // 001C CALL R6 2
- 0x8C180B0A, // 001D GETMET R6 R5 K10
- 0x5C200600, // 001E MOVE R8 R3
- 0x7C180400, // 001F CALL R6 2
- 0x8C180B0B, // 0020 GETMET R6 R5 K11
- 0x88200103, // 0021 GETMBR R8 R0 K3
- 0x5C240600, // 0022 MOVE R9 R3
- 0x5C280800, // 0023 MOVE R10 R4
- 0x7C180800, // 0024 CALL R6 4
- 0x8C18030C, // 0025 GETMET R6 R1 K12
- 0x8820030D, // 0026 GETMBR R8 R1 K13
- 0x88240103, // 0027 GETMBR R9 R0 K3
- 0x8824130D, // 0028 GETMBR R9 R9 K13
- 0x7C180600, // 0029 CALL R6 3
- 0x80000000, // 002A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_Animation_update, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x8808010E, // 0000 GETMBR R2 R0 K14
- 0x240C050F, // 0001 GT R3 R2 K15
- 0x780E000D, // 0002 JMPF R3 #0011
- 0x880C0109, // 0003 GETMBR R3 R0 K9
- 0x040C0203, // 0004 SUB R3 R1 R3
- 0x28100602, // 0005 GE R4 R3 R2
- 0x78120009, // 0006 JMPF R4 #0011
- 0x88100110, // 0007 GETMBR R4 R0 K16
- 0x78120005, // 0008 JMPF R4 #000F
- 0x0C140602, // 0009 DIV R5 R3 R2
- 0x88180109, // 000A GETMBR R6 R0 K9
- 0x081C0A02, // 000B MUL R7 R5 R2
- 0x00180C07, // 000C ADD R6 R6 R7
- 0x90021206, // 000D SETMBR R0 K9 R6
- 0x70020001, // 000E JMP #0011
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x90020E05, // 0010 SETMBR R0 K7 R5
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_Animation_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080511, // 0003 GETMET R2 R2 K17
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_color
-********************************************************************/
-be_local_closure(class_Animation_get_color, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(get_color),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C080112, // 0000 GETMET R2 R0 K18
- 0x5810000F, // 0001 LDCONST R4 K15
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C080600, // 0003 CALL R2 3
- 0x80040400, // 0004 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_Animation_render, /* name */
- be_nested_proto(
- 9, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x8C100113, // 0000 GETMET R4 R0 K19
- 0x58180001, // 0001 LDCONST R6 K1
- 0x7C100400, // 0002 CALL R4 2
- 0x2014090F, // 0003 NE R5 R4 K15
- 0x78160003, // 0004 JMPF R5 #0009
- 0x8C140314, // 0005 GETMET R5 R1 K20
- 0x881C030D, // 0006 GETMBR R7 R1 K13
- 0x5C200800, // 0007 MOVE R8 R4
- 0x7C140600, // 0008 CALL R5 3
- 0x50140200, // 0009 LDBOOL R5 1 0
- 0x80040A00, // 000A RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: post_render
-********************************************************************/
-be_local_closure(class_Animation_post_render, /* name */
- be_nested_proto(
- 11, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(post_render),
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x88100115, // 0000 GETMBR R4 R0 K21
- 0x541600FE, // 0001 LDINT R5 255
- 0x1C140805, // 0002 EQ R5 R4 R5
- 0x78160001, // 0003 JMPF R5 #0006
- 0x80000A00, // 0004 RET 0
- 0x7002000F, // 0005 JMP #0016
- 0x60140004, // 0006 GETGBL R5 G4
- 0x5C180800, // 0007 MOVE R6 R4
- 0x7C140200, // 0008 CALL R5 1
- 0x1C140B16, // 0009 EQ R5 R5 K22
- 0x78160004, // 000A JMPF R5 #0010
- 0x8C14030C, // 000B GETMET R5 R1 K12
- 0x881C030D, // 000C GETMBR R7 R1 K13
- 0x5C200800, // 000D MOVE R8 R4
- 0x7C140600, // 000E CALL R5 3
- 0x70020005, // 000F JMP #0016
- 0x8C140117, // 0010 GETMET R5 R0 K23
- 0x5C1C0200, // 0011 MOVE R7 R1
- 0x5C200800, // 0012 MOVE R8 R4
- 0x5C240400, // 0013 MOVE R9 R2
- 0x5C280600, // 0014 MOVE R10 R3
- 0x7C140A00, // 0015 CALL R5 5
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_Animation_tostring, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Animation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080018, // 0001 LDCONST R2 K24
- 0x880C0119, // 0002 GETMBR R3 R0 K25
- 0x8810010E, // 0003 GETMBR R4 R0 K14
- 0x88140110, // 0004 GETMBR R5 R0 K16
- 0x88180107, // 0005 GETMBR R6 R0 K7
- 0x7C040A00, // 0006 CALL R1 5
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Animation
-********************************************************************/
-extern const bclass be_class_ParameterizedObject;
-be_local_class(Animation,
- 1,
- &be_class_ParameterizedObject,
- be_nested_map(10,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(opacity_frame, -1), be_const_var(0) },
- { be_const_key_weak(get_color_at, 9), be_const_closure(class_Animation_get_color_at_closure) },
- { be_const_key_weak(_apply_opacity, -1), be_const_closure(class_Animation__apply_opacity_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(id, -1), be_const_bytes_instance(0C030001) },
- { be_const_key_weak(priority, -1), be_const_bytes_instance(050000000A) },
- { be_const_key_weak(color, -1), be_const_bytes_instance(040000) },
- { be_const_key_weak(loop, 1), be_const_bytes_instance(0C050003) },
- { be_const_key_weak(opacity, 2), be_const_bytes_instance(0C01FF0004) },
- { be_const_key_weak(duration, -1), be_const_bytes_instance(0500000000) },
- })) ) } )) },
- { be_const_key_weak(update, -1), be_const_closure(class_Animation_update_closure) },
- { be_const_key_weak(init, 6), be_const_closure(class_Animation_init_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_Animation_tostring_closure) },
- { be_const_key_weak(render, -1), be_const_closure(class_Animation_render_closure) },
- { be_const_key_weak(post_render, -1), be_const_closure(class_Animation_post_render_closure) },
- { be_const_key_weak(get_color, -1), be_const_closure(class_Animation_get_color_closure) },
- })),
- be_str_weak(Animation)
-);
-
-/********************************************************************
-** Solidified function: is_user_function
-********************************************************************/
-be_local_closure(is_user_function, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(_user_functions),
- /* K2 */ be_nested_str_weak(contains),
- }),
- be_str_weak(is_user_function),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x88040301, // 0001 GETMBR R1 R1 K1
- 0x8C040302, // 0002 GETMET R1 R1 K2
- 0x5C0C0000, // 0003 MOVE R3 R0
- 0x7C040400, // 0004 CALL R1 2
- 0x80040200, // 0005 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: register_user_function
-********************************************************************/
-be_local_closure(register_user_function, /* name */
- be_nested_proto(
- 3, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(_user_functions),
- }),
- be_str_weak(register_user_function),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x88080501, // 0001 GETMBR R2 R2 K1
- 0x98080001, // 0002 SETIDX R2 R0 R1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'BeaconAnimation' ktab size: 15, total: 19 (saved 32 bytes)
-static const bvalue be_ktab_class_BeaconAnimation[15] = {
- /* K0 */ be_nested_str_weak(back_color),
- /* K1 */ be_nested_str_weak(pos),
- /* K2 */ be_nested_str_weak(slew_size),
- /* K3 */ be_nested_str_weak(beacon_size),
- /* K4 */ be_nested_str_weak(color),
- /* K5 */ be_const_int(-16777216),
- /* K6 */ be_const_int(0),
- /* K7 */ be_nested_str_weak(fill_pixels),
- /* K8 */ be_nested_str_weak(pixels),
- /* K9 */ be_nested_str_weak(tasmota),
- /* K10 */ be_nested_str_weak(scale_int),
- /* K11 */ be_const_int(1),
- /* K12 */ be_nested_str_weak(blend_linear),
- /* K13 */ be_nested_str_weak(set_pixel_color),
- /* K14 */ be_nested_str_weak(BeaconAnimation_X28color_X3D0x_X2508x_X2C_X20pos_X3D_X25s_X2C_X20beacon_size_X3D_X25s_X2C_X20slew_size_X3D_X25s_X29),
-};
-
-
-extern const bclass be_class_BeaconAnimation;
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_BeaconAnimation_render, /* name */
- be_nested_proto(
- 23, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BeaconAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[97]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x88140101, // 0001 GETMBR R5 R0 K1
- 0x88180102, // 0002 GETMBR R6 R0 K2
- 0x881C0103, // 0003 GETMBR R7 R0 K3
- 0x88200104, // 0004 GETMBR R8 R0 K4
- 0x20240905, // 0005 NE R9 R4 K5
- 0x78260006, // 0006 JMPF R9 #000E
- 0x2C240905, // 0007 AND R9 R4 K5
- 0x20241306, // 0008 NE R9 R9 K6
- 0x78260003, // 0009 JMPF R9 #000E
- 0x8C240307, // 000A GETMET R9 R1 K7
- 0x882C0308, // 000B GETMBR R11 R1 K8
- 0x5C300800, // 000C MOVE R12 R4
- 0x7C240600, // 000D CALL R9 3
- 0x5C240A00, // 000E MOVE R9 R5
- 0x00280A07, // 000F ADD R10 R5 R7
- 0x142C1306, // 0010 LT R11 R9 K6
- 0x782E0000, // 0011 JMPF R11 #0013
- 0x58240006, // 0012 LDCONST R9 K6
- 0x282C1403, // 0013 GE R11 R10 R3
- 0x782E0000, // 0014 JMPF R11 #0016
- 0x5C280600, // 0015 MOVE R10 R3
- 0x8C2C0307, // 0016 GETMET R11 R1 K7
- 0x88340308, // 0017 GETMBR R13 R1 K8
- 0x5C381000, // 0018 MOVE R14 R8
- 0x5C3C1200, // 0019 MOVE R15 R9
- 0x5C401400, // 001A MOVE R16 R10
- 0x7C2C0A00, // 001B CALL R11 5
- 0x4C2C0000, // 001C LDNIL R11
- 0x24300D06, // 001D GT R12 R6 K6
- 0x7832003F, // 001E JMPF R12 #005F
- 0x04300A06, // 001F SUB R12 R5 R6
- 0x5C340A00, // 0020 MOVE R13 R5
- 0x14381906, // 0021 LT R14 R12 K6
- 0x783A0000, // 0022 JMPF R14 #0024
- 0x58300006, // 0023 LDCONST R12 K6
- 0x28381A03, // 0024 GE R14 R13 R3
- 0x783A0000, // 0025 JMPF R14 #0027
- 0x5C340600, // 0026 MOVE R13 R3
- 0x5C2C1800, // 0027 MOVE R11 R12
- 0x1438160D, // 0028 LT R14 R11 R13
- 0x783A0013, // 0029 JMPF R14 #003E
- 0xB83A1200, // 002A GETNGBL R14 K9
- 0x8C381D0A, // 002B GETMET R14 R14 K10
- 0x5C401600, // 002C MOVE R16 R11
- 0x04440A06, // 002D SUB R17 R5 R6
- 0x0444230B, // 002E SUB R17 R17 K11
- 0x5C480A00, // 002F MOVE R18 R5
- 0x544E00FE, // 0030 LDINT R19 255
- 0x58500006, // 0031 LDCONST R20 K6
- 0x7C380C00, // 0032 CALL R14 6
- 0x8C3C030C, // 0033 GETMET R15 R1 K12
- 0x5C440800, // 0034 MOVE R17 R4
- 0x5C481000, // 0035 MOVE R18 R8
- 0x5C4C1C00, // 0036 MOVE R19 R14
- 0x7C3C0800, // 0037 CALL R15 4
- 0x8C40030D, // 0038 GETMET R16 R1 K13
- 0x5C481600, // 0039 MOVE R18 R11
- 0x5C4C1E00, // 003A MOVE R19 R15
- 0x7C400600, // 003B CALL R16 3
- 0x002C170B, // 003C ADD R11 R11 K11
- 0x7001FFE9, // 003D JMP #0028
- 0x00380A07, // 003E ADD R14 R5 R7
- 0x003C0A07, // 003F ADD R15 R5 R7
- 0x003C1E06, // 0040 ADD R15 R15 R6
- 0x14401D06, // 0041 LT R16 R14 K6
- 0x78420000, // 0042 JMPF R16 #0044
- 0x58380006, // 0043 LDCONST R14 K6
- 0x28401E03, // 0044 GE R16 R15 R3
- 0x78420000, // 0045 JMPF R16 #0047
- 0x5C3C0600, // 0046 MOVE R15 R3
- 0x5C2C1C00, // 0047 MOVE R11 R14
- 0x1440160F, // 0048 LT R16 R11 R15
- 0x78420014, // 0049 JMPF R16 #005F
- 0xB8421200, // 004A GETNGBL R16 K9
- 0x8C40210A, // 004B GETMET R16 R16 K10
- 0x5C481600, // 004C MOVE R18 R11
- 0x004C0A07, // 004D ADD R19 R5 R7
- 0x044C270B, // 004E SUB R19 R19 K11
- 0x00500A07, // 004F ADD R20 R5 R7
- 0x00502806, // 0050 ADD R20 R20 R6
- 0x58540006, // 0051 LDCONST R21 K6
- 0x545A00FE, // 0052 LDINT R22 255
- 0x7C400C00, // 0053 CALL R16 6
- 0x8C44030C, // 0054 GETMET R17 R1 K12
- 0x5C4C0800, // 0055 MOVE R19 R4
- 0x5C501000, // 0056 MOVE R20 R8
- 0x5C542000, // 0057 MOVE R21 R16
- 0x7C440800, // 0058 CALL R17 4
- 0x8C48030D, // 0059 GETMET R18 R1 K13
- 0x5C501600, // 005A MOVE R20 R11
- 0x5C542200, // 005B MOVE R21 R17
- 0x7C480600, // 005C CALL R18 3
- 0x002C170B, // 005D ADD R11 R11 K11
- 0x7001FFE8, // 005E JMP #0048
- 0x50300200, // 005F LDBOOL R12 1 0
- 0x80041800, // 0060 RET 1 R12
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_BeaconAnimation_tostring, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BeaconAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x5808000E, // 0001 LDCONST R2 K14
- 0x880C0104, // 0002 GETMBR R3 R0 K4
- 0x88100101, // 0003 GETMBR R4 R0 K1
- 0x88140103, // 0004 GETMBR R5 R0 K3
- 0x88180102, // 0005 GETMBR R6 R0 K2
- 0x7C040A00, // 0006 CALL R1 5
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: BeaconAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(BeaconAnimation,
- 0,
- &be_class_Animation,
- be_nested_map(3,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(4,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(slew_size, -1), be_const_bytes_instance(0500000000) },
- { be_const_key_weak(pos, -1), be_const_bytes_instance(040000) },
- { be_const_key_weak(back_color, 0), be_const_bytes_instance(0402000000FF) },
- { be_const_key_weak(beacon_size, -1), be_const_bytes_instance(0500000001) },
- })) ) } )) },
- { be_const_key_weak(render, 2), be_const_closure(class_BeaconAnimation_render_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_BeaconAnimation_tostring_closure) },
- })),
- be_str_weak(BeaconAnimation)
-);
-
-/********************************************************************
-** Solidified function: animation_version_string
-********************************************************************/
-be_local_closure(animation_version_string, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(VERSION),
- /* K2 */ be_nested_str_weak(_X25s_X2E_X25s_X2E_X25s),
- }),
- be_str_weak(animation_version_string),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
- 0x1C040001, // 0001 EQ R1 R0 R1
- 0x78060001, // 0002 JMPF R1 #0005
- 0xB8060000, // 0003 GETNGBL R1 K0
- 0x88000301, // 0004 GETMBR R0 R1 K1
- 0x54060017, // 0005 LDINT R1 24
- 0x3C040001, // 0006 SHR R1 R0 R1
- 0x540A00FE, // 0007 LDINT R2 255
- 0x2C040202, // 0008 AND R1 R1 R2
- 0x540A000F, // 0009 LDINT R2 16
- 0x3C080002, // 000A SHR R2 R0 R2
- 0x540E00FE, // 000B LDINT R3 255
- 0x2C080403, // 000C AND R2 R2 R3
- 0x540E0007, // 000D LDINT R3 8
- 0x3C0C0003, // 000E SHR R3 R0 R3
- 0x541200FE, // 000F LDINT R4 255
- 0x2C0C0604, // 0010 AND R3 R3 R4
- 0x60100018, // 0011 GETGBL R4 G24
- 0x58140002, // 0012 LDCONST R5 K2
- 0x5C180200, // 0013 MOVE R6 R1
- 0x5C1C0400, // 0014 MOVE R7 R2
- 0x5C200600, // 0015 MOVE R8 R3
- 0x7C100800, // 0016 CALL R4 4
- 0x80040800, // 0017 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: animation_resolve
-********************************************************************/
-be_local_closure(animation_resolve, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(is_value_provider),
- /* K2 */ be_nested_str_weak(produce_value),
- /* K3 */ be_nested_str_weak(parameterized_object),
- /* K4 */ be_nested_str_weak(value_error),
- /* K5 */ be_nested_str_weak(Parameter_X20name_X20cannot_X20be_X20nil_X20when_X20resolving_X20object_X20parameter),
- /* K6 */ be_nested_str_weak(get_param_value),
- }),
- be_str_weak(animation_resolve),
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0xB80E0000, // 0000 GETNGBL R3 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x5C140000, // 0002 MOVE R5 R0
- 0x7C0C0400, // 0003 CALL R3 2
- 0x780E0005, // 0004 JMPF R3 #000B
- 0x8C0C0102, // 0005 GETMET R3 R0 K2
- 0x5C140200, // 0006 MOVE R5 R1
- 0x5C180400, // 0007 MOVE R6 R2
- 0x7C0C0600, // 0008 CALL R3 3
- 0x80040600, // 0009 RET 1 R3
- 0x70020012, // 000A JMP #001E
- 0x4C0C0000, // 000B LDNIL R3
- 0x200C0003, // 000C NE R3 R0 R3
- 0x780E000E, // 000D JMPF R3 #001D
- 0x600C000F, // 000E GETGBL R3 G15
- 0x5C100000, // 000F MOVE R4 R0
- 0xB8160000, // 0010 GETNGBL R5 K0
- 0x88140B03, // 0011 GETMBR R5 R5 K3
- 0x7C0C0400, // 0012 CALL R3 2
- 0x780E0008, // 0013 JMPF R3 #001D
- 0x4C0C0000, // 0014 LDNIL R3
- 0x1C0C0203, // 0015 EQ R3 R1 R3
- 0x780E0000, // 0016 JMPF R3 #0018
- 0xB0060905, // 0017 RAISE 1 K4 K5
- 0x8C0C0106, // 0018 GETMET R3 R0 K6
- 0x5C140200, // 0019 MOVE R5 R1
- 0x7C0C0400, // 001A CALL R3 2
- 0x80040600, // 001B RET 1 R3
- 0x70020000, // 001C JMP #001E
- 0x80040000, // 001D RET 1 R0
- 0x80000000, // 001E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sawtooth
-********************************************************************/
-be_local_closure(sawtooth, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(SAWTOOTH),
- }),
- be_str_weak(sawtooth),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: noise_single_color
-********************************************************************/
-be_local_closure(noise_single_color, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(noise_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(scale),
- /* K4 */ be_nested_str_weak(speed),
- /* K5 */ be_nested_str_weak(octaves),
- /* K6 */ be_const_int(1),
- }),
- be_str_weak(noise_single_color),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x5409FFFE, // 0004 LDINT R2 -1
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x540A0031, // 0006 LDINT R2 50
- 0x90060602, // 0007 SETMBR R1 K3 R2
- 0x540A001D, // 0008 LDINT R2 30
- 0x90060802, // 0009 SETMBR R1 K4 R2
- 0x90060B06, // 000A SETMBR R1 K5 K6
- 0x80040200, // 000B RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'GradientMeterAnimation' ktab size: 27, total: 38 (saved 88 bytes)
-static const bvalue be_ktab_class_GradientMeterAnimation[27] = {
- /* K0 */ be_nested_str_weak(init),
- /* K1 */ be_nested_str_weak(peak_level),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(peak_time),
- /* K4 */ be_nested_str_weak(_level),
- /* K5 */ be_nested_str_weak(shift_period),
- /* K6 */ be_nested_str_weak(peak_hold),
- /* K7 */ be_nested_str_weak(level),
- /* K8 */ be_nested_str_weak(update),
- /* K9 */ be_nested_str_weak(get_param),
- /* K10 */ be_nested_str_weak(color_source),
- /* K11 */ be_nested_str_weak(start_time),
- /* K12 */ be_nested_str_weak(tasmota),
- /* K13 */ be_nested_str_weak(scale_uint),
- /* K14 */ be_const_int(1),
- /* K15 */ be_nested_str_weak(animation),
- /* K16 */ be_nested_str_weak(color_provider),
- /* K17 */ be_nested_str_weak(get_lut),
- /* K18 */ be_nested_str_weak(LUT_FACTOR),
- /* K19 */ be_nested_str_weak(pixels),
- /* K20 */ be_nested_str_weak(_buffer),
- /* K21 */ be_nested_str_weak(value_buffer),
- /* K22 */ be_const_int(2),
- /* K23 */ be_const_int(3),
- /* K24 */ be_nested_str_weak(get_color_for_value),
- /* K25 */ be_nested_str_weak(set_pixel_color),
- /* K26 */ be_nested_str_weak(GradientMeterAnimation_X28level_X3D_X25s_X2C_X20peak_hold_X3D_X25sms_X2C_X20peak_X3D_X25s_X29),
-};
-
-
-extern const bclass be_class_GradientMeterAnimation;
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_GradientMeterAnimation_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientMeterAnimation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x90020302, // 0006 SETMBR R0 K1 K2
- 0x90020702, // 0007 SETMBR R0 K3 K2
- 0x90020902, // 0008 SETMBR R0 K4 K2
- 0x90020B02, // 0009 SETMBR R0 K5 K2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_GradientMeterAnimation_update, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientMeterAnimation, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0x88080106, // 0000 GETMBR R2 R0 K6
- 0x240C0502, // 0001 GT R3 R2 K2
- 0x780E000F, // 0002 JMPF R3 #0013
- 0x880C0107, // 0003 GETMBR R3 R0 K7
- 0x90020803, // 0004 SETMBR R0 K4 R3
- 0x88100101, // 0005 GETMBR R4 R0 K1
- 0x28140604, // 0006 GE R5 R3 R4
- 0x78160002, // 0007 JMPF R5 #000B
- 0x90020203, // 0008 SETMBR R0 K1 R3
- 0x90020601, // 0009 SETMBR R0 K3 R1
- 0x70020007, // 000A JMP #0013
- 0x24140902, // 000B GT R5 R4 K2
- 0x78160005, // 000C JMPF R5 #0013
- 0x88140103, // 000D GETMBR R5 R0 K3
- 0x04140205, // 000E SUB R5 R1 R5
- 0x24180A02, // 000F GT R6 R5 R2
- 0x781A0001, // 0010 JMPF R6 #0013
- 0x90020203, // 0011 SETMBR R0 K1 R3
- 0x90020601, // 0012 SETMBR R0 K3 R1
- 0x600C0003, // 0013 GETGBL R3 G3
- 0x5C100000, // 0014 MOVE R4 R0
- 0x7C0C0200, // 0015 CALL R3 1
- 0x8C0C0708, // 0016 GETMET R3 R3 K8
- 0x5C140200, // 0017 MOVE R5 R1
- 0x7C0C0400, // 0018 CALL R3 2
- 0x80000000, // 0019 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_GradientMeterAnimation_render, /* name */
- be_nested_proto(
- 21, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientMeterAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[113]) { /* code */
- 0x8C100109, // 0000 GETMET R4 R0 K9
- 0x5818000A, // 0001 LDCONST R6 K10
- 0x7C100400, // 0002 CALL R4 2
- 0x4C140000, // 0003 LDNIL R5
- 0x1C140805, // 0004 EQ R5 R4 R5
- 0x78160001, // 0005 JMPF R5 #0008
- 0x50140000, // 0006 LDBOOL R5 0 0
- 0x80040A00, // 0007 RET 1 R5
- 0x8814010B, // 0008 GETMBR R5 R0 K11
- 0x04140405, // 0009 SUB R5 R2 R5
- 0x88180104, // 000A GETMBR R6 R0 K4
- 0x881C0106, // 000B GETMBR R7 R0 K6
- 0xB8221800, // 000C GETNGBL R8 K12
- 0x8C20110D, // 000D GETMET R8 R8 K13
- 0x5C280C00, // 000E MOVE R10 R6
- 0x582C0002, // 000F LDCONST R11 K2
- 0x543200FE, // 0010 LDINT R12 255
- 0x58340002, // 0011 LDCONST R13 K2
- 0x5C380600, // 0012 MOVE R14 R3
- 0x7C200C00, // 0013 CALL R8 6
- 0x5425FFFE, // 0014 LDINT R9 -1
- 0x24280F02, // 0015 GT R10 R7 K2
- 0x782A000C, // 0016 JMPF R10 #0024
- 0x88280101, // 0017 GETMBR R10 R0 K1
- 0x24281406, // 0018 GT R10 R10 R6
- 0x782A0009, // 0019 JMPF R10 #0024
- 0xB82A1800, // 001A GETNGBL R10 K12
- 0x8C28150D, // 001B GETMET R10 R10 K13
- 0x88300101, // 001C GETMBR R12 R0 K1
- 0x58340002, // 001D LDCONST R13 K2
- 0x543A00FE, // 001E LDINT R14 255
- 0x583C0002, // 001F LDCONST R15 K2
- 0x5C400600, // 0020 MOVE R16 R3
- 0x7C280C00, // 0021 CALL R10 6
- 0x0428150E, // 0022 SUB R10 R10 K14
- 0x5C241400, // 0023 MOVE R9 R10
- 0x4C280000, // 0024 LDNIL R10
- 0x602C000F, // 0025 GETGBL R11 G15
- 0x5C300800, // 0026 MOVE R12 R4
- 0xB8361E00, // 0027 GETNGBL R13 K15
- 0x88341B10, // 0028 GETMBR R13 R13 K16
- 0x7C2C0400, // 0029 CALL R11 2
- 0x782E0028, // 002A JMPF R11 #0054
- 0x8C2C0911, // 002B GETMET R11 R4 K17
- 0x7C2C0200, // 002C CALL R11 1
- 0x5C281600, // 002D MOVE R10 R11
- 0x4C300000, // 002E LDNIL R12
- 0x202C160C, // 002F NE R11 R11 R12
- 0x782E0022, // 0030 JMPF R11 #0054
- 0x882C0912, // 0031 GETMBR R11 R4 K18
- 0x543200FF, // 0032 LDINT R12 256
- 0x3C30180B, // 0033 SHR R12 R12 R11
- 0x58340002, // 0034 LDCONST R13 K2
- 0x88380313, // 0035 GETMBR R14 R1 K19
- 0x8C381D14, // 0036 GETMET R14 R14 K20
- 0x7C380200, // 0037 CALL R14 1
- 0x8C3C1514, // 0038 GETMET R15 R10 K20
- 0x7C3C0200, // 0039 CALL R15 1
- 0x88400115, // 003A GETMBR R16 R0 K21
- 0x8C402114, // 003B GETMET R16 R16 K20
- 0x7C400200, // 003C CALL R16 1
- 0x14441A08, // 003D LT R17 R13 R8
- 0x78460013, // 003E JMPF R17 #0053
- 0x9444200D, // 003F GETIDX R17 R16 R13
- 0x3C48220B, // 0040 SHR R18 R17 R11
- 0x544E00FE, // 0041 LDINT R19 255
- 0x1C4C2213, // 0042 EQ R19 R17 R19
- 0x784E0000, // 0043 JMPF R19 #0045
- 0x5C481800, // 0044 MOVE R18 R12
- 0x384C2516, // 0045 SHL R19 R18 K22
- 0x004C1E13, // 0046 ADD R19 R15 R19
- 0x94502702, // 0047 GETIDX R20 R19 K2
- 0x983A0414, // 0048 SETIDX R14 K2 R20
- 0x9450270E, // 0049 GETIDX R20 R19 K14
- 0x983A1C14, // 004A SETIDX R14 K14 R20
- 0x94502716, // 004B GETIDX R20 R19 K22
- 0x983A2C14, // 004C SETIDX R14 K22 R20
- 0x94502717, // 004D GETIDX R20 R19 K23
- 0x983A2E14, // 004E SETIDX R14 K23 R20
- 0x00341B0E, // 004F ADD R13 R13 K14
- 0x54520003, // 0050 LDINT R20 4
- 0x00381C14, // 0051 ADD R14 R14 R20
- 0x7001FFE9, // 0052 JMP #003D
- 0x7002000E, // 0053 JMP #0063
- 0x582C0002, // 0054 LDCONST R11 K2
- 0x14301608, // 0055 LT R12 R11 R8
- 0x7832000B, // 0056 JMPF R12 #0063
- 0x88300115, // 0057 GETMBR R12 R0 K21
- 0x9430180B, // 0058 GETIDX R12 R12 R11
- 0x8C340918, // 0059 GETMET R13 R4 K24
- 0x5C3C1800, // 005A MOVE R15 R12
- 0x5C400A00, // 005B MOVE R16 R5
- 0x7C340600, // 005C CALL R13 3
- 0x8C380319, // 005D GETMET R14 R1 K25
- 0x5C401600, // 005E MOVE R16 R11
- 0x5C441A00, // 005F MOVE R17 R13
- 0x7C380600, // 0060 CALL R14 3
- 0x002C170E, // 0061 ADD R11 R11 K14
- 0x7001FFF1, // 0062 JMP #0055
- 0x282C1208, // 0063 GE R11 R9 R8
- 0x782E0009, // 0064 JMPF R11 #006F
- 0x882C0115, // 0065 GETMBR R11 R0 K21
- 0x942C1609, // 0066 GETIDX R11 R11 R9
- 0x8C300918, // 0067 GETMET R12 R4 K24
- 0x5C381600, // 0068 MOVE R14 R11
- 0x5C3C0A00, // 0069 MOVE R15 R5
- 0x7C300600, // 006A CALL R12 3
- 0x8C340319, // 006B GETMET R13 R1 K25
- 0x5C3C1200, // 006C MOVE R15 R9
- 0x5C401800, // 006D MOVE R16 R12
- 0x7C340600, // 006E CALL R13 3
- 0x502C0200, // 006F LDBOOL R11 1 0
- 0x80041600, // 0070 RET 1 R11
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_GradientMeterAnimation_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientMeterAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x88040107, // 0000 GETMBR R1 R0 K7
- 0x88080106, // 0001 GETMBR R2 R0 K6
- 0x600C0018, // 0002 GETGBL R3 G24
- 0x5810001A, // 0003 LDCONST R4 K26
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x881C0101, // 0006 GETMBR R7 R0 K1
- 0x7C0C0800, // 0007 CALL R3 4
- 0x80040600, // 0008 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: GradientMeterAnimation
-********************************************************************/
-extern const bclass be_class_PaletteGradientAnimation;
-be_local_class(GradientMeterAnimation,
- 3,
- &be_class_PaletteGradientAnimation,
- be_nested_map(8,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(2,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(peak_hold, -1), be_const_bytes_instance(05000001E803) },
- { be_const_key_weak(level, -1), be_const_bytes_instance(07000001FF0001FF00) },
- })) ) } )) },
- { be_const_key_weak(_level, -1), be_const_var(2) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_GradientMeterAnimation_tostring_closure) },
- { be_const_key_weak(init, 0), be_const_closure(class_GradientMeterAnimation_init_closure) },
- { be_const_key_weak(update, 1), be_const_closure(class_GradientMeterAnimation_update_closure) },
- { be_const_key_weak(render, 2), be_const_closure(class_GradientMeterAnimation_render_closure) },
- { be_const_key_weak(peak_time, -1), be_const_var(1) },
- { be_const_key_weak(peak_level, -1), be_const_var(0) },
- })),
- be_str_weak(GradientMeterAnimation)
-);
-
-/********************************************************************
-** Solidified function: ease_in
-********************************************************************/
-be_local_closure(ease_in, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(EASE_IN),
- }),
- be_str_weak(ease_in),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: ramp
-********************************************************************/
-be_local_closure(ramp, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(oscillator_value),
- /* K2 */ be_nested_str_weak(form),
- /* K3 */ be_nested_str_weak(SAWTOOTH),
- }),
- be_str_weak(ramp),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0xB80A0000, // 0004 GETNGBL R2 K0
- 0x88080503, // 0005 GETMBR R2 R2 K3
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: wave_custom
-********************************************************************/
-be_local_closure(wave_custom, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(wave_animation),
- /* K2 */ be_nested_str_weak(color),
- /* K3 */ be_nested_str_weak(wave_type),
- /* K4 */ be_const_int(2),
- /* K5 */ be_nested_str_weak(frequency),
- /* K6 */ be_nested_str_weak(wave_speed),
- }),
- be_str_weak(wave_custom),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x5409FEFF, // 0004 LDINT R2 -256
- 0x90060402, // 0005 SETMBR R1 K2 R2
- 0x90060704, // 0006 SETMBR R1 K3 K4
- 0x540A0027, // 0007 LDINT R2 40
- 0x90060A02, // 0008 SETMBR R1 K5 R2
- 0x540A001D, // 0009 LDINT R2 30
- 0x90060C02, // 000A SETMBR R1 K6 R2
- 0x80040200, // 000B RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'ClosureValueProvider' ktab size: 7, total: 9 (saved 16 bytes)
-static const bvalue be_ktab_class_ClosureValueProvider[7] = {
- /* K0 */ be_nested_str_weak(ClosureValueProvider_X28_X25s_X29),
- /* K1 */ be_nested_str_weak(_closure),
- /* K2 */ be_nested_str_weak(closure_X20set),
- /* K3 */ be_nested_str_weak(no_X20closure),
- /* K4 */ be_nested_str_weak(on_param_changed),
- /* K5 */ be_nested_str_weak(closure),
- /* K6 */ be_nested_str_weak(engine),
-};
-
-
-extern const bclass be_class_ClosureValueProvider;
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_ClosureValueProvider_tostring, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ClosureValueProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080000, // 0001 LDCONST R2 K0
- 0x880C0101, // 0002 GETMBR R3 R0 K1
- 0x780E0001, // 0003 JMPF R3 #0006
- 0x580C0002, // 0004 LDCONST R3 K2
- 0x70020000, // 0005 JMP #0007
- 0x580C0003, // 0006 LDCONST R3 K3
- 0x7C040400, // 0007 CALL R1 2
- 0x80040200, // 0008 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_ClosureValueProvider_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ClosureValueProvider, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0704, // 0003 GETMET R3 R3 K4
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x1C0C0305, // 0007 EQ R3 R1 K5
- 0x780E0000, // 0008 JMPF R3 #000A
- 0x90020202, // 0009 SETMBR R0 K1 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_ClosureValueProvider_produce_value, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ClosureValueProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x880C0101, // 0000 GETMBR R3 R0 K1
- 0x4C100000, // 0001 LDNIL R4
- 0x1C100604, // 0002 EQ R4 R3 R4
- 0x78120001, // 0003 JMPF R4 #0006
- 0x4C100000, // 0004 LDNIL R4
- 0x80040800, // 0005 RET 1 R4
- 0x5C100600, // 0006 MOVE R4 R3
- 0x88140106, // 0007 GETMBR R5 R0 K6
- 0x5C180200, // 0008 MOVE R6 R1
- 0x5C1C0400, // 0009 MOVE R7 R2
- 0x7C100600, // 000A CALL R4 3
- 0x80040800, // 000B RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: ClosureValueProvider
-********************************************************************/
-extern const bclass be_class_ValueProvider;
-be_local_class(ClosureValueProvider,
- 1,
- &be_class_ValueProvider,
- be_nested_map(5,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(class_ClosureValueProvider_tostring_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(1,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(closure, -1), be_const_bytes_instance(0C0606) },
- })) ) } )) },
- { be_const_key_weak(_closure, 4), be_const_var(0) },
- { be_const_key_weak(produce_value, 1), be_const_closure(class_ClosureValueProvider_produce_value_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ClosureValueProvider_on_param_changed_closure) },
- })),
- be_str_weak(ClosureValueProvider)
-);
-
-/********************************************************************
-** Solidified function: get_registered_events
-********************************************************************/
-be_local_closure(get_registered_events, /* name */
- be_nested_proto(
- 2, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(event_manager),
- /* K2 */ be_nested_str_weak(get_registered_events),
- }),
- be_str_weak(get_registered_events),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xB8020000, // 0000 GETNGBL R0 K0
- 0x88000101, // 0001 GETMBR R0 R0 K1
- 0x8C000102, // 0002 GETMET R0 R0 K2
- 0x7C000200, // 0003 CALL R0 1
- 0x80040000, // 0004 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: pulsating_animation
-********************************************************************/
-be_local_closure(pulsating_animation, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(breathe_animation),
- /* K2 */ be_nested_str_weak(curve_factor),
- /* K3 */ be_const_int(1),
- /* K4 */ be_nested_str_weak(period),
- }),
- be_str_weak(pulsating_animation),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x90060503, // 0004 SETMBR R1 K2 K3
- 0x540A03E7, // 0005 LDINT R2 1000
- 0x90060802, // 0006 SETMBR R1 K4 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'StripLengthProvider' ktab size: 4, total: 6 (saved 16 bytes)
-static const bvalue be_ktab_class_StripLengthProvider[4] = {
- /* K0 */ be_nested_str_weak(engine),
- /* K1 */ be_nested_str_weak(strip_length),
- /* K2 */ be_nested_str_weak(unknown),
- /* K3 */ be_nested_str_weak(StripLengthProvider_X28length_X3D_X25s_X29),
-};
-
-
-extern const bclass be_class_StripLengthProvider;
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_StripLengthProvider_produce_value, /* name */
- be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StripLengthProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x880C0701, // 0001 GETMBR R3 R3 K1
- 0x80040600, // 0002 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_StripLengthProvider_tostring, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_StripLengthProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x20040202, // 0002 NE R1 R1 R2
- 0x78060002, // 0003 JMPF R1 #0007
- 0x88040100, // 0004 GETMBR R1 R0 K0
- 0x88040301, // 0005 GETMBR R1 R1 K1
- 0x70020000, // 0006 JMP #0008
- 0x58040002, // 0007 LDCONST R1 K2
- 0x60080018, // 0008 GETGBL R2 G24
- 0x580C0003, // 0009 LDCONST R3 K3
- 0x5C100200, // 000A MOVE R4 R1
- 0x7C080400, // 000B CALL R2 2
- 0x80040400, // 000C RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: StripLengthProvider
-********************************************************************/
-extern const bclass be_class_ValueProvider;
-be_local_class(StripLengthProvider,
- 0,
- &be_class_ValueProvider,
- be_nested_map(2,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(class_StripLengthProvider_tostring_closure) },
- { be_const_key_weak(produce_value, 0), be_const_closure(class_StripLengthProvider_produce_value_closure) },
- })),
- be_str_weak(StripLengthProvider)
-);
-
-/********************************************************************
-** Solidified function: solid
-********************************************************************/
-be_local_closure(solid, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- }),
- be_str_weak(solid),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040300, // 0001 GETMET R1 R1 K0
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x80040200, // 0004 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-// compact class 'BreatheColorProvider' ktab size: 18, total: 29 (saved 88 bytes)
-static const bvalue be_ktab_class_BreatheColorProvider[18] = {
- /* K0 */ be_nested_str_weak(BreatheColorProvider_X28base_color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X29),
- /* K1 */ be_nested_str_weak(base_color),
- /* K2 */ be_nested_str_weak(min_brightness),
- /* K3 */ be_nested_str_weak(max_brightness),
- /* K4 */ be_nested_str_weak(duration),
- /* K5 */ be_nested_str_weak(curve_factor),
- /* K6 */ be_const_int(1),
- /* K7 */ be_nested_str_weak(form),
- /* K8 */ be_nested_str_weak(animation),
- /* K9 */ be_nested_str_weak(COSINE),
- /* K10 */ be_nested_str_weak(on_param_changed),
- /* K11 */ be_nested_str_weak(produce_value),
- /* K12 */ be_nested_str_weak(tasmota),
- /* K13 */ be_nested_str_weak(scale_uint),
- /* K14 */ be_const_int(0),
- /* K15 */ be_nested_str_weak(init),
- /* K16 */ be_nested_str_weak(min_value),
- /* K17 */ be_nested_str_weak(max_value),
-};
-
-
-extern const bclass be_class_BreatheColorProvider;
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_BreatheColorProvider_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BreatheColorProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080000, // 0001 LDCONST R2 K0
- 0x880C0101, // 0002 GETMBR R3 R0 K1
- 0x88100102, // 0003 GETMBR R4 R0 K2
- 0x88140103, // 0004 GETMBR R5 R0 K3
- 0x88180104, // 0005 GETMBR R6 R0 K4
- 0x881C0105, // 0006 GETMBR R7 R0 K5
- 0x7C040C00, // 0007 CALL R1 6
- 0x80040200, // 0008 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_BreatheColorProvider_on_param_changed, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BreatheColorProvider, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0x1C0C0305, // 0000 EQ R3 R1 K5
- 0x780E0008, // 0001 JMPF R3 #000B
- 0x1C0C0506, // 0002 EQ R3 R2 K6
- 0x780E0003, // 0003 JMPF R3 #0008
- 0xB80E1000, // 0004 GETNGBL R3 K8
- 0x880C0709, // 0005 GETMBR R3 R3 K9
- 0x90020E03, // 0006 SETMBR R0 K7 R3
- 0x70020002, // 0007 JMP #000B
- 0xB80E1000, // 0008 GETNGBL R3 K8
- 0x880C0709, // 0009 GETMBR R3 R3 K9
- 0x90020E03, // 000A SETMBR R0 K7 R3
- 0x600C0003, // 000B GETGBL R3 G3
- 0x5C100000, // 000C MOVE R4 R0
- 0x7C0C0200, // 000D CALL R3 1
- 0x8C0C070A, // 000E GETMET R3 R3 K10
- 0x5C140200, // 000F MOVE R5 R1
- 0x5C180400, // 0010 MOVE R6 R2
- 0x7C0C0600, // 0011 CALL R3 3
- 0x80000000, // 0012 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_BreatheColorProvider_produce_value, /* name */
- be_nested_proto(
- 19, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BreatheColorProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[97]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C070B, // 0003 GETMET R3 R3 K11
- 0x5C140200, // 0004 MOVE R5 R1
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C0C0600, // 0006 CALL R3 3
- 0x88100105, // 0007 GETMBR R4 R0 K5
- 0x5C140600, // 0008 MOVE R5 R3
- 0x24180906, // 0009 GT R6 R4 K6
- 0x781A0019, // 000A JMPF R6 #0025
- 0xB81A1800, // 000B GETNGBL R6 K12
- 0x8C180D0D, // 000C GETMET R6 R6 K13
- 0x5C200600, // 000D MOVE R8 R3
- 0x5824000E, // 000E LDCONST R9 K14
- 0x542A00FE, // 000F LDINT R10 255
- 0x582C000E, // 0010 LDCONST R11 K14
- 0x54321FFF, // 0011 LDINT R12 8192
- 0x7C180C00, // 0012 CALL R6 6
- 0x5C1C0800, // 0013 MOVE R7 R4
- 0x24200F06, // 0014 GT R8 R7 K6
- 0x78220005, // 0015 JMPF R8 #001C
- 0x08200C06, // 0016 MUL R8 R6 R6
- 0x54261FFF, // 0017 LDINT R9 8192
- 0x0C201009, // 0018 DIV R8 R8 R9
- 0x5C181000, // 0019 MOVE R6 R8
- 0x041C0F06, // 001A SUB R7 R7 K6
- 0x7001FFF7, // 001B JMP #0014
- 0xB8221800, // 001C GETNGBL R8 K12
- 0x8C20110D, // 001D GETMET R8 R8 K13
- 0x5C280C00, // 001E MOVE R10 R6
- 0x582C000E, // 001F LDCONST R11 K14
- 0x54321FFF, // 0020 LDINT R12 8192
- 0x5834000E, // 0021 LDCONST R13 K14
- 0x543A00FE, // 0022 LDINT R14 255
- 0x7C200C00, // 0023 CALL R8 6
- 0x5C141000, // 0024 MOVE R5 R8
- 0xB81A1800, // 0025 GETNGBL R6 K12
- 0x8C180D0D, // 0026 GETMET R6 R6 K13
- 0x5C200A00, // 0027 MOVE R8 R5
- 0x5824000E, // 0028 LDCONST R9 K14
- 0x542A00FE, // 0029 LDINT R10 255
- 0x882C0102, // 002A GETMBR R11 R0 K2
- 0x88300103, // 002B GETMBR R12 R0 K3
- 0x7C180C00, // 002C CALL R6 6
- 0x881C0101, // 002D GETMBR R7 R0 K1
- 0x54220017, // 002E LDINT R8 24
- 0x3C200E08, // 002F SHR R8 R7 R8
- 0x542600FE, // 0030 LDINT R9 255
- 0x2C201009, // 0031 AND R8 R8 R9
- 0x5426000F, // 0032 LDINT R9 16
- 0x3C240E09, // 0033 SHR R9 R7 R9
- 0x542A00FE, // 0034 LDINT R10 255
- 0x2C24120A, // 0035 AND R9 R9 R10
- 0x542A0007, // 0036 LDINT R10 8
- 0x3C280E0A, // 0037 SHR R10 R7 R10
- 0x542E00FE, // 0038 LDINT R11 255
- 0x2C28140B, // 0039 AND R10 R10 R11
- 0x542E00FE, // 003A LDINT R11 255
- 0x2C2C0E0B, // 003B AND R11 R7 R11
- 0xB8321800, // 003C GETNGBL R12 K12
- 0x8C30190D, // 003D GETMET R12 R12 K13
- 0x5C381200, // 003E MOVE R14 R9
- 0x583C000E, // 003F LDCONST R15 K14
- 0x544200FE, // 0040 LDINT R16 255
- 0x5844000E, // 0041 LDCONST R17 K14
- 0x5C480C00, // 0042 MOVE R18 R6
- 0x7C300C00, // 0043 CALL R12 6
- 0x5C241800, // 0044 MOVE R9 R12
- 0xB8321800, // 0045 GETNGBL R12 K12
- 0x8C30190D, // 0046 GETMET R12 R12 K13
- 0x5C381400, // 0047 MOVE R14 R10
- 0x583C000E, // 0048 LDCONST R15 K14
- 0x544200FE, // 0049 LDINT R16 255
- 0x5844000E, // 004A LDCONST R17 K14
- 0x5C480C00, // 004B MOVE R18 R6
- 0x7C300C00, // 004C CALL R12 6
- 0x5C281800, // 004D MOVE R10 R12
- 0xB8321800, // 004E GETNGBL R12 K12
- 0x8C30190D, // 004F GETMET R12 R12 K13
- 0x5C381600, // 0050 MOVE R14 R11
- 0x583C000E, // 0051 LDCONST R15 K14
- 0x544200FE, // 0052 LDINT R16 255
- 0x5844000E, // 0053 LDCONST R17 K14
- 0x5C480C00, // 0054 MOVE R18 R6
- 0x7C300C00, // 0055 CALL R12 6
- 0x5C2C1800, // 0056 MOVE R11 R12
- 0x54320017, // 0057 LDINT R12 24
- 0x3830100C, // 0058 SHL R12 R8 R12
- 0x5436000F, // 0059 LDINT R13 16
- 0x3834120D, // 005A SHL R13 R9 R13
- 0x3030180D, // 005B OR R12 R12 R13
- 0x54360007, // 005C LDINT R13 8
- 0x3834140D, // 005D SHL R13 R10 R13
- 0x3030180D, // 005E OR R12 R12 R13
- 0x3030180B, // 005F OR R12 R12 R11
- 0x80041800, // 0060 RET 1 R12
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_BreatheColorProvider_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_BreatheColorProvider, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C08050F, // 0003 GETMET R2 R2 K15
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0xB80A1000, // 0006 GETNGBL R2 K8
- 0x88080509, // 0007 GETMBR R2 R2 K9
- 0x90020E02, // 0008 SETMBR R0 K7 R2
- 0x9002210E, // 0009 SETMBR R0 K16 K14
- 0x540A00FE, // 000A LDINT R2 255
- 0x90022202, // 000B SETMBR R0 K17 R2
- 0x540A0BB7, // 000C LDINT R2 3000
- 0x90020802, // 000D SETMBR R0 K4 R2
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: BreatheColorProvider
-********************************************************************/
-extern const bclass be_class_OscillatorValueProvider;
-be_local_class(BreatheColorProvider,
- 0,
- &be_class_OscillatorValueProvider,
- be_nested_map(5,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, 1), be_const_closure(class_BreatheColorProvider_tostring_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_BreatheColorProvider_init_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_BreatheColorProvider_on_param_changed_closure) },
- { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(4,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(base_color, -1), be_const_bytes_instance(0400FF) },
- { be_const_key_weak(max_brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
- { be_const_key_weak(curve_factor, -1), be_const_bytes_instance(07000100050002) },
- { be_const_key_weak(min_brightness, -1), be_const_bytes_instance(07000001FF000000) },
- })) ) } )) },
- { be_const_key_weak(produce_value, -1), be_const_closure(class_BreatheColorProvider_produce_value_closure) },
- })),
- be_str_weak(BreatheColorProvider)
-);
-// compact class 'CrenelPositionAnimation' ktab size: 19, total: 24 (saved 40 bytes)
-static const bvalue be_ktab_class_CrenelPositionAnimation[19] = {
- /* K0 */ be_nested_str_weak(back_color),
- /* K1 */ be_nested_str_weak(pos),
- /* K2 */ be_nested_str_weak(pulse_size),
- /* K3 */ be_nested_str_weak(low_size),
- /* K4 */ be_nested_str_weak(nb_pulse),
- /* K5 */ be_nested_str_weak(color),
- /* K6 */ be_const_int(-16777216),
- /* K7 */ be_nested_str_weak(fill_pixels),
- /* K8 */ be_nested_str_weak(pixels),
- /* K9 */ be_const_int(0),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(set_pixel_color),
- /* K12 */ be_nested_str_weak(get_param),
- /* K13 */ be_nested_str_weak(animation),
- /* K14 */ be_nested_str_weak(is_value_provider),
- /* K15 */ be_nested_str_weak(0x_X2508x),
- /* K16 */ be_nested_str_weak(CrenelPositionAnimation_X28color_X3D_X25s_X2C_X20pos_X3D_X25s_X2C_X20pulse_size_X3D_X25s_X2C_X20low_size_X3D_X25s_X2C_X20nb_pulse_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K17 */ be_nested_str_weak(priority),
- /* K18 */ be_nested_str_weak(is_running),
-};
-
-
-extern const bclass be_class_CrenelPositionAnimation;
-
-/********************************************************************
-** Solidified function: render
-********************************************************************/
-be_local_closure(class_CrenelPositionAnimation_render, /* name */
- be_nested_proto(
- 16, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_CrenelPositionAnimation, /* shared constants */
- be_str_weak(render),
- &be_const_str_solidified,
- ( &(const binstruction[64]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x88140101, // 0001 GETMBR R5 R0 K1
- 0x88180102, // 0002 GETMBR R6 R0 K2
- 0x881C0103, // 0003 GETMBR R7 R0 K3
- 0x88200104, // 0004 GETMBR R8 R0 K4
- 0x88240105, // 0005 GETMBR R9 R0 K5
- 0x60280009, // 0006 GETGBL R10 G9
- 0x002C0C07, // 0007 ADD R11 R6 R7
- 0x7C280200, // 0008 CALL R10 1
- 0x202C0906, // 0009 NE R11 R4 K6
- 0x782E0003, // 000A JMPF R11 #000F
- 0x8C2C0307, // 000B GETMET R11 R1 K7
- 0x88340308, // 000C GETMBR R13 R1 K8
- 0x5C380800, // 000D MOVE R14 R4
- 0x7C2C0600, // 000E CALL R11 3
- 0x182C1509, // 000F LE R11 R10 K9
- 0x782E0000, // 0010 JMPF R11 #0012
- 0x5828000A, // 0011 LDCONST R10 K10
- 0x1C2C1109, // 0012 EQ R11 R8 K9
- 0x782E0001, // 0013 JMPF R11 #0016
- 0x502C0200, // 0014 LDBOOL R11 1 0
- 0x80041600, // 0015 RET 1 R11
- 0x142C1109, // 0016 LT R11 R8 K9
- 0x782E0006, // 0017 JMPF R11 #001F
- 0x002C0A06, // 0018 ADD R11 R5 R6
- 0x042C170A, // 0019 SUB R11 R11 K10
- 0x102C160A, // 001A MOD R11 R11 R10
- 0x042C1606, // 001B SUB R11 R11 R6
- 0x002C170A, // 001C ADD R11 R11 K10
- 0x5C141600, // 001D MOVE R5 R11
- 0x70020007, // 001E JMP #0027
- 0x442C1400, // 001F NEG R11 R10
- 0x142C0A0B, // 0020 LT R11 R5 R11
- 0x782E0004, // 0021 JMPF R11 #0027
- 0x202C1109, // 0022 NE R11 R8 K9
- 0x782E0002, // 0023 JMPF R11 #0027
- 0x00140A0A, // 0024 ADD R5 R5 R10
- 0x0420110A, // 0025 SUB R8 R8 K10
- 0x7001FFF7, // 0026 JMP #001F
- 0x142C0A03, // 0027 LT R11 R5 R3
- 0x782E0014, // 0028 JMPF R11 #003E
- 0x202C1109, // 0029 NE R11 R8 K9
- 0x782E0012, // 002A JMPF R11 #003E
- 0x582C0009, // 002B LDCONST R11 K9
- 0x14300B09, // 002C LT R12 R5 K9
- 0x78320001, // 002D JMPF R12 #0030
- 0x44300A00, // 002E NEG R12 R5
- 0x5C2C1800, // 002F MOVE R11 R12
- 0x14301606, // 0030 LT R12 R11 R6
- 0x78320008, // 0031 JMPF R12 #003B
- 0x00300A0B, // 0032 ADD R12 R5 R11
- 0x14301803, // 0033 LT R12 R12 R3
- 0x78320005, // 0034 JMPF R12 #003B
- 0x8C30030B, // 0035 GETMET R12 R1 K11
- 0x00380A0B, // 0036 ADD R14 R5 R11
- 0x5C3C1200, // 0037 MOVE R15 R9
- 0x7C300600, // 0038 CALL R12 3
- 0x002C170A, // 0039 ADD R11 R11 K10
- 0x7001FFF4, // 003A JMP #0030
- 0x00140A0A, // 003B ADD R5 R5 R10
- 0x0420110A, // 003C SUB R8 R8 K10
- 0x7001FFE8, // 003D JMP #0027
- 0x502C0200, // 003E LDBOOL R11 1 0
- 0x80041600, // 003F RET 1 R11
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_CrenelPositionAnimation_tostring, /* name */
- be_nested_proto(
- 12, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_CrenelPositionAnimation, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[30]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
- 0x8C08010C, // 0001 GETMET R2 R0 K12
- 0x58100005, // 0002 LDCONST R4 K5
- 0x7C080400, // 0003 CALL R2 2
- 0xB80E1A00, // 0004 GETNGBL R3 K13
- 0x8C0C070E, // 0005 GETMET R3 R3 K14
- 0x5C140400, // 0006 MOVE R5 R2
- 0x7C0C0400, // 0007 CALL R3 2
- 0x780E0004, // 0008 JMPF R3 #000E
- 0x600C0008, // 0009 GETGBL R3 G8
- 0x5C100400, // 000A MOVE R4 R2
- 0x7C0C0200, // 000B CALL R3 1
- 0x5C040600, // 000C MOVE R1 R3
- 0x70020004, // 000D JMP #0013
- 0x600C0018, // 000E GETGBL R3 G24
- 0x5810000F, // 000F LDCONST R4 K15
- 0x88140105, // 0010 GETMBR R5 R0 K5
- 0x7C0C0400, // 0011 CALL R3 2
- 0x5C040600, // 0012 MOVE R1 R3
- 0x600C0018, // 0013 GETGBL R3 G24
- 0x58100010, // 0014 LDCONST R4 K16
- 0x5C140200, // 0015 MOVE R5 R1
- 0x88180101, // 0016 GETMBR R6 R0 K1
- 0x881C0102, // 0017 GETMBR R7 R0 K2
- 0x88200103, // 0018 GETMBR R8 R0 K3
- 0x88240104, // 0019 GETMBR R9 R0 K4
- 0x88280111, // 001A GETMBR R10 R0 K17
- 0x882C0112, // 001B GETMBR R11 R0 K18
- 0x7C0C1000, // 001C CALL R3 8
- 0x80040600, // 001D RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: CrenelPositionAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(CrenelPositionAnimation,
- 0,
- &be_class_Animation,
- be_nested_map(3,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(5,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(nb_pulse, -1), be_const_bytes_instance(0400FF) },
- { be_const_key_weak(low_size, 4), be_const_bytes_instance(0500000003) },
- { be_const_key_weak(pos, 1), be_const_bytes_instance(040000) },
- { be_const_key_weak(pulse_size, -1), be_const_bytes_instance(0500000001) },
- { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) },
- })) ) } )) },
- { be_const_key_weak(render, 2), be_const_closure(class_CrenelPositionAnimation_render_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_CrenelPositionAnimation_tostring_closure) },
- })),
- be_str_weak(CrenelPositionAnimation)
-);
-
-/********************************************************************
-** Solidified function: create_closure_value
-********************************************************************/
-be_local_closure(create_closure_value, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(closure_value),
- /* K2 */ be_nested_str_weak(closure),
- }),
- be_str_weak(create_closure_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x5C100000, // 0002 MOVE R4 R0
- 0x7C080400, // 0003 CALL R2 2
- 0x900A0401, // 0004 SETMBR R2 K2 R1
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: animation_init
-********************************************************************/
-be_local_closure(animation_init, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(introspect),
- /* K2 */ be_nested_str_weak(contains),
- /* K3 */ be_nested_str_weak(_ntv),
- /* K4 */ be_nested_str_weak(undefined),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x8C0C0502, // 0002 GETMET R3 R2 K2
- 0x88140303, // 0003 GETMBR R5 R1 K3
- 0x5C180000, // 0004 MOVE R6 R0
- 0x7C0C0600, // 0005 CALL R3 3
- 0x780E0003, // 0006 JMPF R3 #000B
- 0x880C0303, // 0007 GETMBR R3 R1 K3
- 0x880C0600, // 0008 GETMBR R3 R3 R0
- 0x80040600, // 0009 RET 1 R3
- 0x70020003, // 000A JMP #000F
- 0x600C000B, // 000B GETGBL R3 G11
- 0x58100004, // 000C LDCONST R4 K4
- 0x7C0C0200, // 000D CALL R3 1
- 0x80040600, // 000E RET 1 R3
- 0x80000000, // 000F RET 0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(_ntv),
- /* K2 */ be_nested_str_weak(event_manager),
- /* K3 */ be_nested_str_weak(EventManager),
- /* K4 */ be_nested_str_weak(member),
- /* K5 */ be_nested_str_weak(_user_functions),
- }),
- be_str_weak(animation_init),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x6004000B, // 0000 GETGBL R1 G11
- 0x58080000, // 0001 LDCONST R2 K0
- 0x7C040200, // 0002 CALL R1 1
- 0x90060200, // 0003 SETMBR R1 K1 R0
- 0x8C080103, // 0004 GETMET R2 R0 K3
- 0x7C080200, // 0005 CALL R2 1
- 0x90060402, // 0006 SETMBR R1 K2 R2
- 0x84080000, // 0007 CLOSURE R2 P0
- 0x90060802, // 0008 SETMBR R1 K4 R2
- 0x60080013, // 0009 GETGBL R2 G19
- 0x7C080000, // 000A CALL R2 0
- 0x90060A02, // 000B SETMBR R1 K5 R2
- 0x80040200, // 000C RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-extern const bclass be_class_ParameterizedObject;
-// compact class 'ParameterizedObject' ktab size: 59, total: 124 (saved 520 bytes)
-static const bvalue be_ktab_class_ParameterizedObject[59] = {
- /* K0 */ be_const_class(be_class_ParameterizedObject),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(_MASK),
- /* K4 */ be_nested_str_weak(find),
- /* K5 */ be_const_int(2),
- /* K6 */ be_nested_str_weak(_TYPES),
- /* K7 */ be_nested_str_weak(push),
- /* K8 */ be_nested_str_weak(has_param),
- /* K9 */ be_nested_str_weak(_set_parameter_value),
- /* K10 */ be_nested_str_weak(_X27_X25s_X27_X20object_X20has_X20no_X20attribute_X20_X27_X25s_X27),
- /* K11 */ be_nested_str_weak(attribute_error),
- /* K12 */ be_nested_str_weak(_get_param_def),
- /* K13 */ be_nested_str_weak(animation),
- /* K14 */ be_nested_str_weak(is_value_provider),
- /* K15 */ be_nested_str_weak(constraint_mask),
- /* K16 */ be_nested_str_weak(nillable),
- /* K17 */ be_nested_str_weak(default),
- /* K18 */ be_nested_str_weak(constraint_find),
- /* K19 */ be_nested_str_weak(_X27_X25s_X27_X20does_X20not_X20accept_X20nil_X20values),
- /* K20 */ be_nested_str_weak(value_error),
- /* K21 */ be_nested_str_weak(type),
- /* K22 */ be_nested_str_weak(int),
- /* K23 */ be_nested_str_weak(time),
- /* K24 */ be_nested_str_weak(percentage),
- /* K25 */ be_nested_str_weak(color),
- /* K26 */ be_nested_str_weak(palette),
- /* K27 */ be_nested_str_weak(bytes),
- /* K28 */ be_nested_str_weak(any),
- /* K29 */ be_nested_str_weak(real),
- /* K30 */ be_nested_str_weak(math),
- /* K31 */ be_nested_str_weak(round),
- /* K32 */ be_nested_str_weak(instance),
- /* K33 */ be_nested_str_weak(_X27_X25s_X27_X20expects_X20type_X20_X27_X25s_X27_X20but_X20got_X20_X27_X25s_X27_X20_X28value_X3A_X20_X25s_X29),
- /* K34 */ be_nested_str_weak(min),
- /* K35 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20below_X20minimum_X20_X25s),
- /* K36 */ be_nested_str_weak(max),
- /* K37 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20above_X20maximum_X20_X25s),
- /* K38 */ be_nested_str_weak(enum),
- /* K39 */ be_nested_str_weak(_X27_X25s_X27_X20value_X20_X25s_X20is_X20not_X20in_X20allowed_X20values_X20_X25s),
- /* K40 */ be_nested_str_weak(values),
- /* K41 */ be_nested_str_weak(contains),
- /* K42 */ be_nested_str_weak(resolve_value),
- /* K43 */ be_nested_str_weak(engine),
- /* K44 */ be_nested_str_weak(time_ms),
- /* K45 */ be_nested_str_weak(is_running),
- /* K46 */ be_nested_str_weak(start_time),
- /* K47 */ be_nested_str_weak(introspect),
- /* K48 */ be_nested_str_weak(PARAMS),
- /* K49 */ be_nested_str_weak(keys),
- /* K50 */ be_nested_str_weak(stop_iteration),
- /* K51 */ be_nested_str_weak(missing_X20engine_X20parameter),
- /* K52 */ be_nested_str_weak(_init_parameter_values),
- /* K53 */ be_nested_str_weak(toptr),
- /* K54 */ be_nested_str_weak(_validate_param),
- /* K55 */ be_nested_str_weak(on_param_changed),
- /* K56 */ be_nested_str_weak(_X25s_X28running_X3D_X25s_X29),
- /* K57 */ be_nested_str_weak(produce_value),
- /* K58 */ be_nested_str_weak(member),
-};
-
-
-extern const bclass be_class_ParameterizedObject;
-
-/********************************************************************
-** Solidified function: constraint_find
-********************************************************************/
-be_local_closure(class_ParameterizedObject_constraint_find, /* name */
- be_nested_proto(
- 17, /* nstack */
- 3, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(2),
- /* K3 */ be_const_int(3),
- /* K4 */ be_nested_str_weak(get),
- }),
- be_str_weak(_skip_typed_value),
- &be_const_str_solidified,
- ( &(const binstruction[47]) { /* code */
- 0x6008000C, // 0000 GETGBL R2 G12
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x28080202, // 0003 GE R2 R1 R2
- 0x780A0000, // 0004 JMPF R2 #0006
- 0x80060000, // 0005 RET 1 K0
- 0x94080001, // 0006 GETIDX R2 R0 R1
- 0x540E0005, // 0007 LDINT R3 6
- 0x1C0C0403, // 0008 EQ R3 R2 R3
- 0x780E0001, // 0009 JMPF R3 #000C
- 0x80060200, // 000A RET 1 K1
- 0x70020021, // 000B JMP #002E
- 0x540E0004, // 000C LDINT R3 5
- 0x1C0C0403, // 000D EQ R3 R2 R3
- 0x780E0001, // 000E JMPF R3 #0011
- 0x80060400, // 000F RET 1 K2
- 0x7002001C, // 0010 JMP #002E
- 0x1C0C0500, // 0011 EQ R3 R2 K0
- 0x780E0001, // 0012 JMPF R3 #0015
- 0x80060400, // 0013 RET 1 K2
- 0x70020018, // 0014 JMP #002E
- 0x1C0C0501, // 0015 EQ R3 R2 K1
- 0x780E0001, // 0016 JMPF R3 #0019
- 0x80060600, // 0017 RET 1 K3
- 0x70020014, // 0018 JMP #002E
- 0x1C0C0502, // 0019 EQ R3 R2 K2
- 0x780E0002, // 001A JMPF R3 #001E
- 0x540E0004, // 001B LDINT R3 5
- 0x80040600, // 001C RET 1 R3
- 0x7002000F, // 001D JMP #002E
- 0x1C0C0503, // 001E EQ R3 R2 K3
- 0x780E0004, // 001F JMPF R3 #0025
- 0x000C0301, // 0020 ADD R3 R1 K1
- 0x940C0003, // 0021 GETIDX R3 R0 R3
- 0x000E0403, // 0022 ADD R3 K2 R3
- 0x80040600, // 0023 RET 1 R3
- 0x70020008, // 0024 JMP #002E
- 0x540E0003, // 0025 LDINT R3 4
- 0x1C0C0403, // 0026 EQ R3 R2 R3
- 0x780E0005, // 0027 JMPF R3 #002E
- 0x8C0C0104, // 0028 GETMET R3 R0 K4
- 0x00140301, // 0029 ADD R5 R1 K1
- 0x58180002, // 002A LDCONST R6 K2
- 0x7C0C0600, // 002B CALL R3 3
- 0x000E0603, // 002C ADD R3 K3 R3
- 0x80040600, // 002D RET 1 R3
- 0x80060000, // 002E RET 1 K0
- })
- ),
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_const_int(1),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(get),
- /* K3 */ be_const_int(2),
- /* K4 */ be_const_int(3),
- /* K5 */ be_nested_str_weak(asstring),
- }),
- be_str_weak(_read_typed_value),
- &be_const_str_solidified,
- ( &(const binstruction[83]) { /* code */
- 0x6008000C, // 0000 GETGBL R2 G12
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x28080202, // 0003 GE R2 R1 R2
- 0x780A0001, // 0004 JMPF R2 #0007
- 0x4C080000, // 0005 LDNIL R2
- 0x80040400, // 0006 RET 1 R2
- 0x94080001, // 0007 GETIDX R2 R0 R1
- 0x00040300, // 0008 ADD R1 R1 K0
- 0x540E0005, // 0009 LDINT R3 6
- 0x1C0C0403, // 000A EQ R3 R2 R3
- 0x780E0002, // 000B JMPF R3 #000F
- 0x4C0C0000, // 000C LDNIL R3
- 0x80040600, // 000D RET 1 R3
- 0x70020041, // 000E JMP #0051
- 0x540E0004, // 000F LDINT R3 5
- 0x1C0C0403, // 0010 EQ R3 R2 R3
- 0x780E0003, // 0011 JMPF R3 #0016
- 0x940C0001, // 0012 GETIDX R3 R0 R1
- 0x200C0701, // 0013 NE R3 R3 K1
- 0x80040600, // 0014 RET 1 R3
- 0x7002003A, // 0015 JMP #0051
- 0x1C0C0501, // 0016 EQ R3 R2 K1
- 0x780E0009, // 0017 JMPF R3 #0022
- 0x940C0001, // 0018 GETIDX R3 R0 R1
- 0x5412007E, // 0019 LDINT R4 127
- 0x24100604, // 001A GT R4 R3 R4
- 0x78120002, // 001B JMPF R4 #001F
- 0x541200FF, // 001C LDINT R4 256
- 0x04100604, // 001D SUB R4 R3 R4
- 0x70020000, // 001E JMP #0020
- 0x5C100600, // 001F MOVE R4 R3
- 0x80040800, // 0020 RET 1 R4
- 0x7002002E, // 0021 JMP #0051
- 0x1C0C0500, // 0022 EQ R3 R2 K0
- 0x780E000C, // 0023 JMPF R3 #0031
- 0x8C0C0102, // 0024 GETMET R3 R0 K2
- 0x5C140200, // 0025 MOVE R5 R1
- 0x58180003, // 0026 LDCONST R6 K3
- 0x7C0C0600, // 0027 CALL R3 3
- 0x54127FFE, // 0028 LDINT R4 32767
- 0x24100604, // 0029 GT R4 R3 R4
- 0x78120002, // 002A JMPF R4 #002E
- 0x5412FFFF, // 002B LDINT R4 65536
- 0x04100604, // 002C SUB R4 R3 R4
- 0x70020000, // 002D JMP #002F
- 0x5C100600, // 002E MOVE R4 R3
- 0x80040800, // 002F RET 1 R4
- 0x7002001F, // 0030 JMP #0051
- 0x1C0C0503, // 0031 EQ R3 R2 K3
- 0x780E0005, // 0032 JMPF R3 #0039
- 0x8C0C0102, // 0033 GETMET R3 R0 K2
- 0x5C140200, // 0034 MOVE R5 R1
- 0x541A0003, // 0035 LDINT R6 4
- 0x7C0C0600, // 0036 CALL R3 3
- 0x80040600, // 0037 RET 1 R3
- 0x70020017, // 0038 JMP #0051
- 0x1C0C0504, // 0039 EQ R3 R2 K4
- 0x780E0008, // 003A JMPF R3 #0044
- 0x940C0001, // 003B GETIDX R3 R0 R1
- 0x00100300, // 003C ADD R4 R1 K0
- 0x00140203, // 003D ADD R5 R1 R3
- 0x40100805, // 003E CONNECT R4 R4 R5
- 0x94100004, // 003F GETIDX R4 R0 R4
- 0x8C100905, // 0040 GETMET R4 R4 K5
- 0x7C100200, // 0041 CALL R4 1
- 0x80040800, // 0042 RET 1 R4
- 0x7002000C, // 0043 JMP #0051
- 0x540E0003, // 0044 LDINT R3 4
- 0x1C0C0403, // 0045 EQ R3 R2 R3
- 0x780E0009, // 0046 JMPF R3 #0051
- 0x8C0C0102, // 0047 GETMET R3 R0 K2
- 0x5C140200, // 0048 MOVE R5 R1
- 0x58180003, // 0049 LDCONST R6 K3
- 0x7C0C0600, // 004A CALL R3 3
- 0x00100303, // 004B ADD R4 R1 K3
- 0x00140203, // 004C ADD R5 R1 R3
- 0x00140B00, // 004D ADD R5 R5 K0
- 0x40100805, // 004E CONNECT R4 R4 R5
- 0x94100004, // 004F GETIDX R4 R0 R4
- 0x80040800, // 0050 RET 1 R4
- 0x4C0C0000, // 0051 LDNIL R3
- 0x80040600, // 0052 RET 1 R3
- })
- ),
- }),
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(constraint_find),
- &be_const_str_solidified,
- ( &(const binstruction[112]) { /* code */
- 0x580C0000, // 0000 LDCONST R3 K0
- 0x84100000, // 0001 CLOSURE R4 P0
- 0x84140001, // 0002 CLOSURE R5 P1
- 0x6018000C, // 0003 GETGBL R6 G12
- 0x5C1C0000, // 0004 MOVE R7 R0
- 0x7C180200, // 0005 CALL R6 1
- 0x14180D01, // 0006 LT R6 R6 K1
- 0x781A0000, // 0007 JMPF R6 #0009
- 0x80040400, // 0008 RET 1 R2
- 0x94180102, // 0009 GETIDX R6 R0 K2
- 0x581C0001, // 000A LDCONST R7 K1
- 0x88200703, // 000B GETMBR R8 R3 K3
- 0x8C201104, // 000C GETMET R8 R8 K4
- 0x5C280200, // 000D MOVE R10 R1
- 0x7C200400, // 000E CALL R8 2
- 0x4C240000, // 000F LDNIL R9
- 0x1C241009, // 0010 EQ R9 R8 R9
- 0x78260000, // 0011 JMPF R9 #0013
- 0x80040400, // 0012 RET 1 R2
- 0x38220208, // 0013 SHL R8 K1 R8
- 0x2C240C08, // 0014 AND R9 R6 R8
- 0x74260000, // 0015 JMPT R9 #0017
- 0x80040400, // 0016 RET 1 R2
- 0x5426001F, // 0017 LDINT R9 32
- 0x1C241009, // 0018 EQ R9 R8 R9
- 0x78260001, // 0019 JMPF R9 #001C
- 0x50240200, // 001A LDBOOL R9 1 0
- 0x80041200, // 001B RET 1 R9
- 0x24241101, // 001C GT R9 R8 K1
- 0x78260006, // 001D JMPF R9 #0025
- 0x2C240D01, // 001E AND R9 R6 K1
- 0x78260004, // 001F JMPF R9 #0025
- 0x5C240800, // 0020 MOVE R9 R4
- 0x5C280000, // 0021 MOVE R10 R0
- 0x5C2C0E00, // 0022 MOVE R11 R7
- 0x7C240400, // 0023 CALL R9 2
- 0x001C0E09, // 0024 ADD R7 R7 R9
- 0x24241105, // 0025 GT R9 R8 K5
- 0x78260006, // 0026 JMPF R9 #002E
- 0x2C240D05, // 0027 AND R9 R6 K5
- 0x78260004, // 0028 JMPF R9 #002E
- 0x5C240800, // 0029 MOVE R9 R4
- 0x5C280000, // 002A MOVE R10 R0
- 0x5C2C0E00, // 002B MOVE R11 R7
- 0x7C240400, // 002C CALL R9 2
- 0x001C0E09, // 002D ADD R7 R7 R9
- 0x54260003, // 002E LDINT R9 4
- 0x24241009, // 002F GT R9 R8 R9
- 0x78260007, // 0030 JMPF R9 #0039
- 0x54260003, // 0031 LDINT R9 4
- 0x2C240C09, // 0032 AND R9 R6 R9
- 0x78260004, // 0033 JMPF R9 #0039
- 0x5C240800, // 0034 MOVE R9 R4
- 0x5C280000, // 0035 MOVE R10 R0
- 0x5C2C0E00, // 0036 MOVE R11 R7
- 0x7C240400, // 0037 CALL R9 2
- 0x001C0E09, // 0038 ADD R7 R7 R9
- 0x54260007, // 0039 LDINT R9 8
- 0x24241009, // 003A GT R9 R8 R9
- 0x78260003, // 003B JMPF R9 #0040
- 0x54260007, // 003C LDINT R9 8
- 0x2C240C09, // 003D AND R9 R6 R9
- 0x78260000, // 003E JMPF R9 #0040
- 0x001C0F01, // 003F ADD R7 R7 K1
- 0x6024000C, // 0040 GETGBL R9 G12
- 0x5C280000, // 0041 MOVE R10 R0
- 0x7C240200, // 0042 CALL R9 1
- 0x28240E09, // 0043 GE R9 R7 R9
- 0x78260000, // 0044 JMPF R9 #0046
- 0x80040400, // 0045 RET 1 R2
- 0x54260007, // 0046 LDINT R9 8
- 0x1C241009, // 0047 EQ R9 R8 R9
- 0x78260009, // 0048 JMPF R9 #0053
- 0x94240007, // 0049 GETIDX R9 R0 R7
- 0x6028000C, // 004A GETGBL R10 G12
- 0x882C0706, // 004B GETMBR R11 R3 K6
- 0x7C280200, // 004C CALL R10 1
- 0x1428120A, // 004D LT R10 R9 R10
- 0x782A0002, // 004E JMPF R10 #0052
- 0x88280706, // 004F GETMBR R10 R3 K6
- 0x94281409, // 0050 GETIDX R10 R10 R9
- 0x80041400, // 0051 RET 1 R10
- 0x80040400, // 0052 RET 1 R2
- 0x5426000F, // 0053 LDINT R9 16
- 0x1C241009, // 0054 EQ R9 R8 R9
- 0x78260014, // 0055 JMPF R9 #006B
- 0x94240007, // 0056 GETIDX R9 R0 R7
- 0x001C0F01, // 0057 ADD R7 R7 K1
- 0x60280012, // 0058 GETGBL R10 G18
- 0x7C280000, // 0059 CALL R10 0
- 0x582C0002, // 005A LDCONST R11 K2
- 0x14301609, // 005B LT R12 R11 R9
- 0x7832000C, // 005C JMPF R12 #006A
- 0x8C301507, // 005D GETMET R12 R10 K7
- 0x5C380A00, // 005E MOVE R14 R5
- 0x5C3C0000, // 005F MOVE R15 R0
- 0x5C400E00, // 0060 MOVE R16 R7
- 0x7C380400, // 0061 CALL R14 2
- 0x7C300400, // 0062 CALL R12 2
- 0x5C340800, // 0063 MOVE R13 R4
- 0x5C380000, // 0064 MOVE R14 R0
- 0x5C3C0E00, // 0065 MOVE R15 R7
- 0x7C340400, // 0066 CALL R13 2
- 0x001C0E0D, // 0067 ADD R7 R7 R13
- 0x002C1701, // 0068 ADD R11 R11 K1
- 0x7001FFF0, // 0069 JMP #005B
- 0x80041400, // 006A RET 1 R10
- 0x5C240A00, // 006B MOVE R9 R5
- 0x5C280000, // 006C MOVE R10 R0
- 0x5C2C0E00, // 006D MOVE R11 R7
- 0x7C240400, // 006E CALL R9 2
- 0x80041200, // 006F RET 1 R9
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: setmember
-********************************************************************/
-be_local_closure(class_ParameterizedObject_setmember, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(setmember),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x8C0C0108, // 0000 GETMET R3 R0 K8
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C0C0400, // 0002 CALL R3 2
- 0x780E0004, // 0003 JMPF R3 #0009
- 0x8C0C0109, // 0004 GETMET R3 R0 K9
- 0x5C140200, // 0005 MOVE R5 R1
- 0x5C180400, // 0006 MOVE R6 R2
- 0x7C0C0600, // 0007 CALL R3 3
- 0x70020007, // 0008 JMP #0011
- 0x600C0018, // 0009 GETGBL R3 G24
- 0x5810000A, // 000A LDCONST R4 K10
- 0x60140005, // 000B GETGBL R5 G5
- 0x5C180000, // 000C MOVE R6 R0
- 0x7C140200, // 000D CALL R5 1
- 0x5C180200, // 000E MOVE R6 R1
- 0x7C0C0600, // 000F CALL R3 3
- 0xB0061603, // 0010 RAISE 1 K11 R3
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _validate_param
-********************************************************************/
-be_local_closure(class_ParameterizedObject__validate_param, /* name */
- be_nested_proto(
- 15, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_validate_param),
- &be_const_str_solidified,
- ( &(const binstruction[186]) { /* code */
- 0x8C0C010C, // 0000 GETMET R3 R0 K12
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C0C0400, // 0002 CALL R3 2
- 0x4C100000, // 0003 LDNIL R4
- 0x1C100604, // 0004 EQ R4 R3 R4
- 0x78120007, // 0005 JMPF R4 #000E
- 0x60100018, // 0006 GETGBL R4 G24
- 0x5814000A, // 0007 LDCONST R5 K10
- 0x60180005, // 0008 GETGBL R6 G5
- 0x5C1C0000, // 0009 MOVE R7 R0
- 0x7C180200, // 000A CALL R6 1
- 0x5C1C0200, // 000B MOVE R7 R1
- 0x7C100600, // 000C CALL R4 3
- 0xB0061604, // 000D RAISE 1 K11 R4
- 0xB8121A00, // 000E GETNGBL R4 K13
- 0x8C10090E, // 000F GETMET R4 R4 K14
- 0x5C180400, // 0010 MOVE R6 R2
- 0x7C100400, // 0011 CALL R4 2
- 0x78120000, // 0012 JMPF R4 #0014
- 0x80040400, // 0013 RET 1 R2
- 0x4C100000, // 0014 LDNIL R4
- 0x1C100404, // 0015 EQ R4 R2 R4
- 0x78120014, // 0016 JMPF R4 #002C
- 0x8C10010F, // 0017 GETMET R4 R0 K15
- 0x5C180600, // 0018 MOVE R6 R3
- 0x581C0010, // 0019 LDCONST R7 K16
- 0x7C100600, // 001A CALL R4 3
- 0x78120000, // 001B JMPF R4 #001D
- 0x80040400, // 001C RET 1 R2
- 0x8C10010F, // 001D GETMET R4 R0 K15
- 0x5C180600, // 001E MOVE R6 R3
- 0x581C0011, // 001F LDCONST R7 K17
- 0x7C100600, // 0020 CALL R4 3
- 0x78120004, // 0021 JMPF R4 #0027
- 0x8C100112, // 0022 GETMET R4 R0 K18
- 0x5C180600, // 0023 MOVE R6 R3
- 0x581C0011, // 0024 LDCONST R7 K17
- 0x7C100600, // 0025 CALL R4 3
- 0x80040800, // 0026 RET 1 R4
- 0x60100018, // 0027 GETGBL R4 G24
- 0x58140013, // 0028 LDCONST R5 K19
- 0x5C180200, // 0029 MOVE R6 R1
- 0x7C100400, // 002A CALL R4 2
- 0xB0062804, // 002B RAISE 1 K20 R4
- 0x8C100112, // 002C GETMET R4 R0 K18
- 0x5C180600, // 002D MOVE R6 R3
- 0x581C0015, // 002E LDCONST R7 K21
- 0x58200016, // 002F LDCONST R8 K22
- 0x7C100800, // 0030 CALL R4 4
- 0x1C140917, // 0031 EQ R5 R4 K23
- 0x74160003, // 0032 JMPT R5 #0037
- 0x1C140918, // 0033 EQ R5 R4 K24
- 0x74160001, // 0034 JMPT R5 #0037
- 0x1C140919, // 0035 EQ R5 R4 K25
- 0x78160001, // 0036 JMPF R5 #0039
- 0x58100016, // 0037 LDCONST R4 K22
- 0x70020002, // 0038 JMP #003C
- 0x1C14091A, // 0039 EQ R5 R4 K26
- 0x78160000, // 003A JMPF R5 #003C
- 0x5810001B, // 003B LDCONST R4 K27
- 0x60140004, // 003C GETGBL R5 G4
- 0x5C180400, // 003D MOVE R6 R2
- 0x7C140200, // 003E CALL R5 1
- 0x2018091C, // 003F NE R6 R4 K28
- 0x781A0031, // 0040 JMPF R6 #0073
- 0x1C180916, // 0041 EQ R6 R4 K22
- 0x781A000A, // 0042 JMPF R6 #004E
- 0x1C180B1D, // 0043 EQ R6 R5 K29
- 0x781A0008, // 0044 JMPF R6 #004E
- 0xA41A3C00, // 0045 IMPORT R6 K30
- 0x601C0009, // 0046 GETGBL R7 G9
- 0x8C200D1F, // 0047 GETMET R8 R6 K31
- 0x5C280400, // 0048 MOVE R10 R2
- 0x7C200400, // 0049 CALL R8 2
- 0x7C1C0200, // 004A CALL R7 1
- 0x5C080E00, // 004B MOVE R2 R7
- 0x58140016, // 004C LDCONST R5 K22
- 0x70020024, // 004D JMP #0073
- 0x1C18091B, // 004E EQ R6 R4 K27
- 0x781A0018, // 004F JMPF R6 #0069
- 0x1C180B20, // 0050 EQ R6 R5 K32
- 0x781A0006, // 0051 JMPF R6 #0059
- 0x6018000F, // 0052 GETGBL R6 G15
- 0x5C1C0400, // 0053 MOVE R7 R2
- 0x60200015, // 0054 GETGBL R8 G21
- 0x7C180400, // 0055 CALL R6 2
- 0x781A0001, // 0056 JMPF R6 #0059
- 0x5814001B, // 0057 LDCONST R5 K27
- 0x7002000E, // 0058 JMP #0068
- 0x20180B20, // 0059 NE R6 R5 K32
- 0x741A0004, // 005A JMPT R6 #0060
- 0x6018000F, // 005B GETGBL R6 G15
- 0x5C1C0400, // 005C MOVE R7 R2
- 0x60200015, // 005D GETGBL R8 G21
- 0x7C180400, // 005E CALL R6 2
- 0x741A0007, // 005F JMPT R6 #0068
- 0x60180018, // 0060 GETGBL R6 G24
- 0x581C0021, // 0061 LDCONST R7 K33
- 0x5C200200, // 0062 MOVE R8 R1
- 0x5C240800, // 0063 MOVE R9 R4
- 0x5C280A00, // 0064 MOVE R10 R5
- 0x5C2C0400, // 0065 MOVE R11 R2
- 0x7C180A00, // 0066 CALL R6 5
- 0xB0062806, // 0067 RAISE 1 K20 R6
- 0x70020009, // 0068 JMP #0073
- 0x20180805, // 0069 NE R6 R4 R5
- 0x781A0007, // 006A JMPF R6 #0073
- 0x60180018, // 006B GETGBL R6 G24
- 0x581C0021, // 006C LDCONST R7 K33
- 0x5C200200, // 006D MOVE R8 R1
- 0x5C240800, // 006E MOVE R9 R4
- 0x5C280A00, // 006F MOVE R10 R5
- 0x5C2C0400, // 0070 MOVE R11 R2
- 0x7C180A00, // 0071 CALL R6 5
- 0xB0062806, // 0072 RAISE 1 K20 R6
- 0x1C180B16, // 0073 EQ R6 R5 K22
- 0x781A0023, // 0074 JMPF R6 #0099
- 0x8C18010F, // 0075 GETMET R6 R0 K15
- 0x5C200600, // 0076 MOVE R8 R3
- 0x58240022, // 0077 LDCONST R9 K34
- 0x7C180600, // 0078 CALL R6 3
- 0x781A000C, // 0079 JMPF R6 #0087
- 0x8C180112, // 007A GETMET R6 R0 K18
- 0x5C200600, // 007B MOVE R8 R3
- 0x58240022, // 007C LDCONST R9 K34
- 0x7C180600, // 007D CALL R6 3
- 0x141C0406, // 007E LT R7 R2 R6
- 0x781E0006, // 007F JMPF R7 #0087
- 0x601C0018, // 0080 GETGBL R7 G24
- 0x58200023, // 0081 LDCONST R8 K35
- 0x5C240200, // 0082 MOVE R9 R1
- 0x5C280400, // 0083 MOVE R10 R2
- 0x5C2C0C00, // 0084 MOVE R11 R6
- 0x7C1C0800, // 0085 CALL R7 4
- 0xB0062807, // 0086 RAISE 1 K20 R7
- 0x8C18010F, // 0087 GETMET R6 R0 K15
- 0x5C200600, // 0088 MOVE R8 R3
- 0x58240024, // 0089 LDCONST R9 K36
- 0x7C180600, // 008A CALL R6 3
- 0x781A000C, // 008B JMPF R6 #0099
- 0x8C180112, // 008C GETMET R6 R0 K18
- 0x5C200600, // 008D MOVE R8 R3
- 0x58240024, // 008E LDCONST R9 K36
- 0x7C180600, // 008F CALL R6 3
- 0x241C0406, // 0090 GT R7 R2 R6
- 0x781E0006, // 0091 JMPF R7 #0099
- 0x601C0018, // 0092 GETGBL R7 G24
- 0x58200025, // 0093 LDCONST R8 K37
- 0x5C240200, // 0094 MOVE R9 R1
- 0x5C280400, // 0095 MOVE R10 R2
- 0x5C2C0C00, // 0096 MOVE R11 R6
- 0x7C1C0800, // 0097 CALL R7 4
- 0xB0062807, // 0098 RAISE 1 K20 R7
- 0x8C18010F, // 0099 GETMET R6 R0 K15
- 0x5C200600, // 009A MOVE R8 R3
- 0x58240026, // 009B LDCONST R9 K38
- 0x7C180600, // 009C CALL R6 3
- 0x781A001A, // 009D JMPF R6 #00B9
- 0x50180000, // 009E LDBOOL R6 0 0
- 0x8C1C0112, // 009F GETMET R7 R0 K18
- 0x5C240600, // 00A0 MOVE R9 R3
- 0x58280026, // 00A1 LDCONST R10 K38
- 0x7C1C0600, // 00A2 CALL R7 3
- 0x6020000C, // 00A3 GETGBL R8 G12
- 0x5C240E00, // 00A4 MOVE R9 R7
- 0x7C200200, // 00A5 CALL R8 1
- 0x58240002, // 00A6 LDCONST R9 K2
- 0x14281208, // 00A7 LT R10 R9 R8
- 0x782A0006, // 00A8 JMPF R10 #00B0
- 0x94280E09, // 00A9 GETIDX R10 R7 R9
- 0x1C2C040A, // 00AA EQ R11 R2 R10
- 0x782E0001, // 00AB JMPF R11 #00AE
- 0x50180200, // 00AC LDBOOL R6 1 0
- 0x70020001, // 00AD JMP #00B0
- 0x00241301, // 00AE ADD R9 R9 K1
- 0x7001FFF6, // 00AF JMP #00A7
- 0x5C280C00, // 00B0 MOVE R10 R6
- 0x742A0006, // 00B1 JMPT R10 #00B9
- 0x60280018, // 00B2 GETGBL R10 G24
- 0x582C0027, // 00B3 LDCONST R11 K39
- 0x5C300200, // 00B4 MOVE R12 R1
- 0x5C340400, // 00B5 MOVE R13 R2
- 0x5C380E00, // 00B6 MOVE R14 R7
- 0x7C280800, // 00B7 CALL R10 4
- 0xB006280A, // 00B8 RAISE 1 K20 R10
- 0x80040400, // 00B9 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: update
-********************************************************************/
-be_local_closure(class_ParameterizedObject_update, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(update),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _resolve_parameter_value
-********************************************************************/
-be_local_closure(class_ParameterizedObject__resolve_parameter_value, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_resolve_parameter_value),
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x880C0128, // 0000 GETMBR R3 R0 K40
- 0x8C0C0729, // 0001 GETMET R3 R3 K41
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C0C0400, // 0003 CALL R3 2
- 0x740E0011, // 0004 JMPT R3 #0017
- 0x8C0C010C, // 0005 GETMET R3 R0 K12
- 0x5C140200, // 0006 MOVE R5 R1
- 0x7C0C0400, // 0007 CALL R3 2
- 0x4C100000, // 0008 LDNIL R4
- 0x20100604, // 0009 NE R4 R3 R4
- 0x78120009, // 000A JMPF R4 #0015
- 0x8C10010F, // 000B GETMET R4 R0 K15
- 0x5C180600, // 000C MOVE R6 R3
- 0x581C0011, // 000D LDCONST R7 K17
- 0x7C100600, // 000E CALL R4 3
- 0x78120004, // 000F JMPF R4 #0015
- 0x8C100112, // 0010 GETMET R4 R0 K18
- 0x5C180600, // 0011 MOVE R6 R3
- 0x581C0011, // 0012 LDCONST R7 K17
- 0x7C100600, // 0013 CALL R4 3
- 0x80040800, // 0014 RET 1 R4
- 0x4C100000, // 0015 LDNIL R4
- 0x80040800, // 0016 RET 1 R4
- 0x880C0128, // 0017 GETMBR R3 R0 K40
- 0x940C0601, // 0018 GETIDX R3 R3 R1
- 0x8C10012A, // 0019 GETMET R4 R0 K42
- 0x5C180600, // 001A MOVE R6 R3
- 0x5C1C0200, // 001B MOVE R7 R1
- 0x5C200400, // 001C MOVE R8 R2
- 0x7C100800, // 001D CALL R4 4
- 0x80040800, // 001E RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: constraint_mask
-********************************************************************/
-be_local_closure(class_ParameterizedObject_constraint_mask, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(constraint_mask),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x200C0003, // 0002 NE R3 R0 R3
- 0x780E000F, // 0003 JMPF R3 #0014
- 0x600C000C, // 0004 GETGBL R3 G12
- 0x5C100000, // 0005 MOVE R4 R0
- 0x7C0C0200, // 0006 CALL R3 1
- 0x240C0702, // 0007 GT R3 R3 K2
- 0x780E000A, // 0008 JMPF R3 #0014
- 0x880C0503, // 0009 GETMBR R3 R2 K3
- 0x8C0C0704, // 000A GETMET R3 R3 K4
- 0x5C140200, // 000B MOVE R5 R1
- 0x7C0C0400, // 000C CALL R3 2
- 0x4C100000, // 000D LDNIL R4
- 0x20100604, // 000E NE R4 R3 R4
- 0x78120003, // 000F JMPF R4 #0014
- 0x94100102, // 0010 GETIDX R4 R0 K2
- 0x38160203, // 0011 SHL R5 K1 R3
- 0x2C100805, // 0012 AND R4 R4 R5
- 0x80040800, // 0013 RET 1 R4
- 0x80060400, // 0014 RET 1 K2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: member
-********************************************************************/
-be_local_closure(class_ParameterizedObject_member, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(member),
- &be_const_str_solidified,
- ( &(const binstruction[58]) { /* code */
- 0x88080128, // 0000 GETMBR R2 R0 K40
- 0x8C080504, // 0001 GETMET R2 R2 K4
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x4C0C0000, // 0004 LDNIL R3
- 0x200C0403, // 0005 NE R3 R2 R3
- 0x780E000D, // 0006 JMPF R3 #0015
- 0x600C0004, // 0007 GETGBL R3 G4
- 0x5C100400, // 0008 MOVE R4 R2
- 0x7C0C0200, // 0009 CALL R3 1
- 0x200C0720, // 000A NE R3 R3 K32
- 0x780E0000, // 000B JMPF R3 #000D
- 0x80040400, // 000C RET 1 R2
- 0x8C0C012A, // 000D GETMET R3 R0 K42
- 0x5C140400, // 000E MOVE R5 R2
- 0x5C180200, // 000F MOVE R6 R1
- 0x881C012B, // 0010 GETMBR R7 R0 K43
- 0x881C0F2C, // 0011 GETMBR R7 R7 K44
- 0x7C0C0800, // 0012 CALL R3 4
- 0x80040600, // 0013 RET 1 R3
- 0x70020023, // 0014 JMP #0039
- 0x880C0128, // 0015 GETMBR R3 R0 K40
- 0x8C0C0729, // 0016 GETMET R3 R3 K41
- 0x5C140200, // 0017 MOVE R5 R1
- 0x7C0C0400, // 0018 CALL R3 2
- 0x780E0002, // 0019 JMPF R3 #001D
- 0x4C0C0000, // 001A LDNIL R3
- 0x80040600, // 001B RET 1 R3
- 0x7002001B, // 001C JMP #0039
- 0x8C0C010C, // 001D GETMET R3 R0 K12
- 0x5C140200, // 001E MOVE R5 R1
- 0x7C0C0400, // 001F CALL R3 2
- 0x4C100000, // 0020 LDNIL R4
- 0x20100604, // 0021 NE R4 R3 R4
- 0x7812000D, // 0022 JMPF R4 #0031
- 0x8C10010F, // 0023 GETMET R4 R0 K15
- 0x5C180600, // 0024 MOVE R6 R3
- 0x581C0011, // 0025 LDCONST R7 K17
- 0x7C100600, // 0026 CALL R4 3
- 0x78120005, // 0027 JMPF R4 #002E
- 0x8C100112, // 0028 GETMET R4 R0 K18
- 0x5C180600, // 0029 MOVE R6 R3
- 0x581C0011, // 002A LDCONST R7 K17
- 0x7C100600, // 002B CALL R4 3
- 0x80040800, // 002C RET 1 R4
- 0x70020001, // 002D JMP #0030
- 0x4C100000, // 002E LDNIL R4
- 0x80040800, // 002F RET 1 R4
- 0x70020007, // 0030 JMP #0039
- 0x60100018, // 0031 GETGBL R4 G24
- 0x5814000A, // 0032 LDCONST R5 K10
- 0x60180005, // 0033 GETGBL R6 G5
- 0x5C1C0000, // 0034 MOVE R7 R0
- 0x7C180200, // 0035 CALL R6 1
- 0x5C1C0200, // 0036 MOVE R7 R1
- 0x7C100600, // 0037 CALL R4 3
- 0xB0061604, // 0038 RAISE 1 K11 R4
- 0x80000000, // 0039 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start
-********************************************************************/
-be_local_closure(class_ParameterizedObject_start, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(start),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x8808012B, // 0003 GETMBR R2 R0 K43
- 0x8804052C, // 0004 GETMBR R1 R2 K44
- 0x50080200, // 0005 LDBOOL R2 1 0
- 0x90025A02, // 0006 SETMBR R0 K45 R2
- 0x8808012E, // 0007 GETMBR R2 R0 K46
- 0x4C0C0000, // 0008 LDNIL R3
- 0x20080403, // 0009 NE R2 R2 R3
- 0x780A0000, // 000A JMPF R2 #000C
- 0x90025C01, // 000B SETMBR R0 K46 R1
- 0x80040000, // 000C RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: stop
-********************************************************************/
-be_local_closure(class_ParameterizedObject_stop, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(stop),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x50040000, // 0000 LDBOOL R1 0 0
- 0x90025A01, // 0001 SETMBR R0 K45 R1
- 0x80040000, // 0002 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _init_parameter_values
-********************************************************************/
-be_local_closure(class_ParameterizedObject__init_parameter_values, /* name */
- be_nested_proto(
- 12, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_init_parameter_values),
- &be_const_str_solidified,
- ( &(const binstruction[47]) { /* code */
- 0xA4065E00, // 0000 IMPORT R1 K47
- 0x60080006, // 0001 GETGBL R2 G6
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C080200, // 0003 CALL R2 1
- 0x4C0C0000, // 0004 LDNIL R3
- 0x200C0403, // 0005 NE R3 R2 R3
- 0x780E0026, // 0006 JMPF R3 #002E
- 0x8C0C0329, // 0007 GETMET R3 R1 K41
- 0x5C140400, // 0008 MOVE R5 R2
- 0x58180030, // 0009 LDCONST R6 K48
- 0x7C0C0600, // 000A CALL R3 3
- 0x780E001C, // 000B JMPF R3 #0029
- 0x880C0530, // 000C GETMBR R3 R2 K48
- 0x60100010, // 000D GETGBL R4 G16
- 0x8C140731, // 000E GETMET R5 R3 K49
- 0x7C140200, // 000F CALL R5 1
- 0x7C100200, // 0010 CALL R4 1
- 0xA8020013, // 0011 EXBLK 0 #0026
- 0x5C140800, // 0012 MOVE R5 R4
- 0x7C140000, // 0013 CALL R5 0
- 0x88180128, // 0014 GETMBR R6 R0 K40
- 0x8C180D29, // 0015 GETMET R6 R6 K41
- 0x5C200A00, // 0016 MOVE R8 R5
- 0x7C180400, // 0017 CALL R6 2
- 0x741A000B, // 0018 JMPT R6 #0025
- 0x94180605, // 0019 GETIDX R6 R3 R5
- 0x8C1C010F, // 001A GETMET R7 R0 K15
- 0x5C240C00, // 001B MOVE R9 R6
- 0x58280011, // 001C LDCONST R10 K17
- 0x7C1C0600, // 001D CALL R7 3
- 0x781E0005, // 001E JMPF R7 #0025
- 0x881C0128, // 001F GETMBR R7 R0 K40
- 0x8C200112, // 0020 GETMET R8 R0 K18
- 0x5C280C00, // 0021 MOVE R10 R6
- 0x582C0011, // 0022 LDCONST R11 K17
- 0x7C200600, // 0023 CALL R8 3
- 0x981C0A08, // 0024 SETIDX R7 R5 R8
- 0x7001FFEB, // 0025 JMP #0012
- 0x58100032, // 0026 LDCONST R4 K50
- 0xAC100200, // 0027 CATCH R4 1 0
- 0xB0080000, // 0028 RAISE 2 R0 R0
- 0x600C0003, // 0029 GETGBL R3 G3
- 0x5C100400, // 002A MOVE R4 R2
- 0x7C0C0200, // 002B CALL R3 1
- 0x5C080600, // 002C MOVE R2 R3
- 0x7001FFD5, // 002D JMP #0004
- 0x80000000, // 002E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_ParameterizedObject_init, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x740A0004, // 0002 JMPT R2 #0008
- 0x60080004, // 0003 GETGBL R2 G4
- 0x5C0C0200, // 0004 MOVE R3 R1
- 0x7C080200, // 0005 CALL R2 1
- 0x20080520, // 0006 NE R2 R2 K32
- 0x780A0000, // 0007 JMPF R2 #0009
- 0xB0062933, // 0008 RAISE 1 K20 K51
- 0x90025601, // 0009 SETMBR R0 K43 R1
- 0x60080013, // 000A GETGBL R2 G19
- 0x7C080000, // 000B CALL R2 0
- 0x90025002, // 000C SETMBR R0 K40 R2
- 0x50080000, // 000D LDBOOL R2 0 0
- 0x90025A02, // 000E SETMBR R0 K45 R2
- 0x8C080134, // 000F GETMET R2 R0 K52
- 0x7C080200, // 0010 CALL R2 1
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _fix_time_ms
-********************************************************************/
-be_local_closure(class_ParameterizedObject__fix_time_ms, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_fix_time_ms),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x8808012B, // 0003 GETMBR R2 R0 K43
- 0x8804052C, // 0004 GETMBR R1 R2 K44
- 0x8808012E, // 0005 GETMBR R2 R0 K46
- 0x4C0C0000, // 0006 LDNIL R3
- 0x1C080403, // 0007 EQ R2 R2 R3
- 0x780A0000, // 0008 JMPF R2 #000A
- 0x90025C01, // 0009 SETMBR R0 K46 R1
- 0x80040200, // 000A RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: has_param
-********************************************************************/
-be_local_closure(class_ParameterizedObject_has_param, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(has_param),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x8C08010C, // 0000 GETMET R2 R0 K12
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x4C0C0000, // 0003 LDNIL R3
- 0x20080403, // 0004 NE R2 R2 R3
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: ==
-********************************************************************/
-be_local_closure(class_ParameterizedObject__X3D_X3D, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_X3D_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0xA40A5E00, // 0000 IMPORT R2 K47
- 0x8C0C0535, // 0001 GETMET R3 R2 K53
- 0x5C140000, // 0002 MOVE R5 R0
- 0x7C0C0400, // 0003 CALL R3 2
- 0x8C100535, // 0004 GETMET R4 R2 K53
- 0x5C180200, // 0005 MOVE R6 R1
- 0x7C100400, // 0006 CALL R4 2
- 0x1C0C0604, // 0007 EQ R3 R3 R4
- 0x80040600, // 0008 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_param
-********************************************************************/
-be_local_closure(class_ParameterizedObject_set_param, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(set_param),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x8C0C0108, // 0000 GETMET R3 R0 K8
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C0C0400, // 0002 CALL R3 2
- 0x740E0001, // 0003 JMPT R3 #0006
- 0x500C0000, // 0004 LDBOOL R3 0 0
- 0x80040600, // 0005 RET 1 R3
- 0xA8020008, // 0006 EXBLK 0 #0010
- 0x8C0C0109, // 0007 GETMET R3 R0 K9
- 0x5C140200, // 0008 MOVE R5 R1
- 0x5C180400, // 0009 MOVE R6 R2
- 0x7C0C0600, // 000A CALL R3 3
- 0x500C0200, // 000B LDBOOL R3 1 0
- 0xA8040001, // 000C EXBLK 1 1
- 0x80040600, // 000D RET 1 R3
- 0xA8040001, // 000E EXBLK 1 1
- 0x70020006, // 000F JMP #0017
- 0x580C0014, // 0010 LDCONST R3 K20
- 0xAC0C0201, // 0011 CATCH R3 1 1
- 0x70020002, // 0012 JMP #0016
- 0x50100000, // 0013 LDBOOL R4 0 0
- 0x80040800, // 0014 RET 1 R4
- 0x70020000, // 0015 JMP #0017
- 0xB0080000, // 0016 RAISE 2 R0 R0
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: on_param_changed
-********************************************************************/
-be_local_closure(class_ParameterizedObject_on_param_changed, /* name */
- be_nested_proto(
- 3, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(on_param_changed),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: !=
-********************************************************************/
-be_local_closure(class_ParameterizedObject__X21_X3D, /* name */
- be_nested_proto(
- 3, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_X21_X3D),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x1C080001, // 0000 EQ R2 R0 R1
- 0x780A0000, // 0001 JMPF R2 #0003
- 0x50080001, // 0002 LDBOOL R2 0 1
- 0x50080200, // 0003 LDBOOL R2 1 0
- 0x80040400, // 0004 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _set_parameter_value
-********************************************************************/
-be_local_closure(class_ParameterizedObject__set_parameter_value, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_set_parameter_value),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xB80E1A00, // 0000 GETNGBL R3 K13
- 0x8C0C070E, // 0001 GETMET R3 R3 K14
- 0x5C140400, // 0002 MOVE R5 R2
- 0x7C0C0400, // 0003 CALL R3 2
- 0x740E0004, // 0004 JMPT R3 #000A
- 0x8C0C0136, // 0005 GETMET R3 R0 K54
- 0x5C140200, // 0006 MOVE R5 R1
- 0x5C180400, // 0007 MOVE R6 R2
- 0x7C0C0600, // 0008 CALL R3 3
- 0x5C080600, // 0009 MOVE R2 R3
- 0x880C0128, // 000A GETMBR R3 R0 K40
- 0x980C0202, // 000B SETIDX R3 R1 R2
- 0x8C0C0137, // 000C GETMET R3 R0 K55
- 0x5C140200, // 000D MOVE R5 R1
- 0x5C180400, // 000E MOVE R6 R2
- 0x7C0C0600, // 000F CALL R3 3
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tobool
-********************************************************************/
-be_local_closure(class_ParameterizedObject_tobool, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(tobool),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x50040200, // 0000 LDBOOL R1 1 0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_ParameterizedObject_tostring, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x60040018, // 0000 GETGBL R1 G24
- 0x58080038, // 0001 LDCONST R2 K56
- 0x600C0005, // 0002 GETGBL R3 G5
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x8810012D, // 0005 GETMBR R4 R0 K45
- 0x7C040600, // 0006 CALL R1 3
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: resolve_value
-********************************************************************/
-be_local_closure(class_ParameterizedObject_resolve_value, /* name */
- be_nested_proto(
- 10, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(resolve_value),
- &be_const_str_solidified,
- ( &(const binstruction[34]) { /* code */
- 0xB8121A00, // 0000 GETNGBL R4 K13
- 0x8C10090E, // 0001 GETMET R4 R4 K14
- 0x5C180200, // 0002 MOVE R6 R1
- 0x7C100400, // 0003 CALL R4 2
- 0x7812001A, // 0004 JMPF R4 #0020
- 0x8C100339, // 0005 GETMET R4 R1 K57
- 0x5C180400, // 0006 MOVE R6 R2
- 0x5C1C0600, // 0007 MOVE R7 R3
- 0x7C100600, // 0008 CALL R4 3
- 0x4C140000, // 0009 LDNIL R5
- 0x1C140805, // 000A EQ R5 R4 R5
- 0x78160011, // 000B JMPF R5 #001E
- 0x8C14010C, // 000C GETMET R5 R0 K12
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x8C18010F, // 000F GETMET R6 R0 K15
- 0x5C200A00, // 0010 MOVE R8 R5
- 0x58240010, // 0011 LDCONST R9 K16
- 0x7C180600, // 0012 CALL R6 3
- 0x741A0009, // 0013 JMPT R6 #001E
- 0x8C18010F, // 0014 GETMET R6 R0 K15
- 0x5C200A00, // 0015 MOVE R8 R5
- 0x58240011, // 0016 LDCONST R9 K17
- 0x7C180600, // 0017 CALL R6 3
- 0x781A0004, // 0018 JMPF R6 #001E
- 0x8C180112, // 0019 GETMET R6 R0 K18
- 0x5C200A00, // 001A MOVE R8 R5
- 0x58240011, // 001B LDCONST R9 K17
- 0x7C180600, // 001C CALL R6 3
- 0x5C100C00, // 001D MOVE R4 R6
- 0x80040800, // 001E RET 1 R4
- 0x70020000, // 001F JMP #0021
- 0x80040200, // 0020 RET 1 R1
- 0x80000000, // 0021 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_param_value
-********************************************************************/
-be_local_closure(class_ParameterizedObject_get_param_value, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(get_param_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x8C08013A, // 0000 GETMET R2 R0 K58
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x80040400, // 0003 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _get_param_def
-********************************************************************/
-be_local_closure(class_ParameterizedObject__get_param_def, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(_get_param_def),
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0xA40A5E00, // 0000 IMPORT R2 K47
- 0x600C0006, // 0001 GETGBL R3 G6
- 0x5C100000, // 0002 MOVE R4 R0
- 0x7C0C0200, // 0003 CALL R3 1
- 0x4C100000, // 0004 LDNIL R4
- 0x20100604, // 0005 NE R4 R3 R4
- 0x78120010, // 0006 JMPF R4 #0018
- 0x8C100529, // 0007 GETMET R4 R2 K41
- 0x5C180600, // 0008 MOVE R6 R3
- 0x581C0030, // 0009 LDCONST R7 K48
- 0x7C100600, // 000A CALL R4 3
- 0x78120006, // 000B JMPF R4 #0013
- 0x88100730, // 000C GETMBR R4 R3 K48
- 0x8C140929, // 000D GETMET R5 R4 K41
- 0x5C1C0200, // 000E MOVE R7 R1
- 0x7C140400, // 000F CALL R5 2
- 0x78160001, // 0010 JMPF R5 #0013
- 0x94140801, // 0011 GETIDX R5 R4 R1
- 0x80040A00, // 0012 RET 1 R5
- 0x60100003, // 0013 GETGBL R4 G3
- 0x5C140600, // 0014 MOVE R5 R3
- 0x7C100200, // 0015 CALL R4 1
- 0x5C0C0800, // 0016 MOVE R3 R4
- 0x7001FFEB, // 0017 JMP #0004
- 0x4C100000, // 0018 LDNIL R4
- 0x80040800, // 0019 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_param
-********************************************************************/
-be_local_closure(class_ParameterizedObject_get_param, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ParameterizedObject, /* shared constants */
- be_str_weak(get_param),
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0x880C0128, // 0000 GETMBR R3 R0 K40
- 0x8C0C0729, // 0001 GETMET R3 R3 K41
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C0C0400, // 0003 CALL R3 2
- 0x780E0002, // 0004 JMPF R3 #0008
- 0x880C0128, // 0005 GETMBR R3 R0 K40
- 0x940C0601, // 0006 GETIDX R3 R3 R1
- 0x80040600, // 0007 RET 1 R3
- 0x8C0C010C, // 0008 GETMET R3 R0 K12
- 0x5C140200, // 0009 MOVE R5 R1
- 0x7C0C0400, // 000A CALL R3 2
- 0x4C100000, // 000B LDNIL R4
- 0x20100604, // 000C NE R4 R3 R4
- 0x7812000A, // 000D JMPF R4 #0019
- 0x8C10010F, // 000E GETMET R4 R0 K15
- 0x5C180600, // 000F MOVE R6 R3
- 0x581C0011, // 0010 LDCONST R7 K17
- 0x7C100600, // 0011 CALL R4 3
- 0x78120005, // 0012 JMPF R4 #0019
- 0x8C100112, // 0013 GETMET R4 R0 K18
- 0x5C180600, // 0014 MOVE R6 R3
- 0x581C0011, // 0015 LDCONST R7 K17
- 0x5C200400, // 0016 MOVE R8 R2
- 0x7C100800, // 0017 CALL R4 4
- 0x80040800, // 0018 RET 1 R4
- 0x80040400, // 0019 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: ParameterizedObject
-********************************************************************/
-be_local_class(ParameterizedObject,
- 4,
- NULL,
- be_nested_map(30,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(constraint_find, 10), be_const_static_closure(class_ParameterizedObject_constraint_find_closure) },
- { be_const_key_weak(setmember, 20), be_const_closure(class_ParameterizedObject_setmember_closure) },
- { be_const_key_weak(get_param, -1), be_const_closure(class_ParameterizedObject_get_param_closure) },
- { be_const_key_weak(values, -1), be_const_var(0) },
- { be_const_key_weak(update, -1), be_const_closure(class_ParameterizedObject_update_closure) },
- { be_const_key_weak(_TYPES, 18), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(7,
- ( (struct bvalue*) &(const bvalue[]) {
- be_nested_str_weak(int),
- be_nested_str_weak(string),
- be_nested_str_weak(bytes),
- be_nested_str_weak(bool),
- be_nested_str_weak(any),
- be_nested_str_weak(instance),
- be_nested_str_weak(function),
- })) ) } )) },
- { be_const_key_weak(_resolve_parameter_value, -1), be_const_closure(class_ParameterizedObject__resolve_parameter_value_closure) },
- { be_const_key_weak(constraint_mask, 21), be_const_static_closure(class_ParameterizedObject_constraint_mask_closure) },
- { be_const_key_weak(_get_param_def, -1), be_const_closure(class_ParameterizedObject__get_param_def_closure) },
- { be_const_key_weak(get_param_value, -1), be_const_closure(class_ParameterizedObject_get_param_value_closure) },
- { be_const_key_weak(_MASK, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(6,
- ( (struct bvalue*) &(const bvalue[]) {
- be_nested_str_weak(min),
- be_nested_str_weak(max),
- be_nested_str_weak(default),
- be_nested_str_weak(type),
- be_nested_str_weak(enum),
- be_nested_str_weak(nillable),
- })) ) } )) },
- { be_const_key_weak(start, -1), be_const_closure(class_ParameterizedObject_start_closure) },
- { be_const_key_weak(is_running, -1), be_const_var(3) },
- { be_const_key_weak(_init_parameter_values, -1), be_const_closure(class_ParameterizedObject__init_parameter_values_closure) },
- { be_const_key_weak(has_param, 13), be_const_closure(class_ParameterizedObject_has_param_closure) },
- { be_const_key_weak(init, -1), be_const_closure(class_ParameterizedObject_init_closure) },
- { be_const_key_weak(_fix_time_ms, -1), be_const_closure(class_ParameterizedObject__fix_time_ms_closure) },
- { be_const_key_weak(stop, 14), be_const_closure(class_ParameterizedObject_stop_closure) },
- { be_const_key_weak(_X3D_X3D, -1), be_const_closure(class_ParameterizedObject__X3D_X3D_closure) },
- { be_const_key_weak(set_param, -1), be_const_closure(class_ParameterizedObject_set_param_closure) },
- { be_const_key_weak(_X21_X3D, 26), be_const_closure(class_ParameterizedObject__X21_X3D_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_ParameterizedObject_on_param_changed_closure) },
- { be_const_key_weak(_set_parameter_value, -1), be_const_closure(class_ParameterizedObject__set_parameter_value_closure) },
- { be_const_key_weak(engine, -1), be_const_var(1) },
- { be_const_key_weak(tobool, -1), be_const_closure(class_ParameterizedObject_tobool_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_ParameterizedObject_tostring_closure) },
- { be_const_key_weak(member, 12), be_const_closure(class_ParameterizedObject_member_closure) },
- { be_const_key_weak(start_time, 9), be_const_var(2) },
- { be_const_key_weak(_validate_param, 8), be_const_closure(class_ParameterizedObject__validate_param_closure) },
- { be_const_key_weak(resolve_value, 2), be_const_closure(class_ParameterizedObject_resolve_value_closure) },
- })),
- be_str_weak(ParameterizedObject)
-);
-// compact class 'IterationNumberProvider' ktab size: 4, total: 6 (saved 16 bytes)
-static const bvalue be_ktab_class_IterationNumberProvider[4] = {
- /* K0 */ be_nested_str_weak(engine),
- /* K1 */ be_nested_str_weak(get_current_iteration_number),
- /* K2 */ be_nested_str_weak(IterationNumberProvider_X28current_X3A_X20_X25s_X29),
- /* K3 */ be_nested_str_weak(IterationNumberProvider_X28not_in_sequence_X29),
-};
-
-
-extern const bclass be_class_IterationNumberProvider;
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_IterationNumberProvider_produce_value, /* name */
- be_nested_proto(
- 5, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_IterationNumberProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x80040600, // 0003 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(class_IterationNumberProvider_tostring, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_IterationNumberProvider, /* shared constants */
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x4C080000, // 0003 LDNIL R2
- 0x20080202, // 0004 NE R2 R1 R2
- 0x780A0005, // 0005 JMPF R2 #000C
- 0x60080018, // 0006 GETGBL R2 G24
- 0x580C0002, // 0007 LDCONST R3 K2
- 0x5C100200, // 0008 MOVE R4 R1
- 0x7C080400, // 0009 CALL R2 2
- 0x80040400, // 000A RET 1 R2
- 0x70020000, // 000B JMP #000D
- 0x80060600, // 000C RET 1 K3
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: IterationNumberProvider
-********************************************************************/
-extern const bclass be_class_ValueProvider;
-be_local_class(IterationNumberProvider,
- 0,
- &be_class_ValueProvider,
- be_nested_map(2,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(class_IterationNumberProvider_tostring_closure) },
- { be_const_key_weak(produce_value, 0), be_const_closure(class_IterationNumberProvider_produce_value_closure) },
- })),
- be_str_weak(IterationNumberProvider)
-);
/********************************************************************
-** Solidified function: twinkle_classic
+** Solidified function: twinkle_rainbow
********************************************************************/
-be_local_closure(twinkle_classic, /* name */
+be_local_closure(twinkle_rainbow, /* name */
be_nested_proto(
4, /* nstack */
1, /* argc */
@@ -17697,7 +15676,7 @@ be_local_closure(twinkle_classic, /* name */
/* K6 */ be_nested_str_weak(min_brightness),
/* K7 */ be_nested_str_weak(max_brightness),
}),
- be_str_weak(twinkle_classic),
+ be_str_weak(twinkle_rainbow),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xB8060000, // 0000 GETNGBL R1 K0
@@ -17706,7 +15685,7 @@ be_local_closure(twinkle_classic, /* name */
0x7C040400, // 0003 CALL R1 2
0x5409FFFE, // 0004 LDINT R2 -1
0x90060402, // 0005 SETMBR R1 K2 R2
- 0x540A0095, // 0006 LDINT R2 150
+ 0x540A0077, // 0006 LDINT R2 120
0x90060602, // 0007 SETMBR R1 K3 R2
0x540A0005, // 0008 LDINT R2 6
0x90060802, // 0009 SETMBR R1 K4 R2
@@ -17722,105 +15701,37 @@ be_local_closure(twinkle_classic, /* name */
);
/*******************************************************************/
-// compact class 'GradientAnimation' ktab size: 44, total: 80 (saved 288 bytes)
-static const bvalue be_ktab_class_GradientAnimation[44] = {
- /* K0 */ be_nested_str_weak(update),
- /* K1 */ be_nested_str_weak(movement_speed),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(start_time),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(scale_uint),
- /* K6 */ be_nested_str_weak(phase_offset),
- /* K7 */ be_nested_str_weak(_calculate_gradient),
- /* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(direction),
- /* K10 */ be_nested_str_weak(spread),
- /* K11 */ be_nested_str_weak(gradient_type),
- /* K12 */ be_nested_str_weak(color),
- /* K13 */ be_nested_str_weak(priority),
- /* K14 */ be_nested_str_weak(linear),
- /* K15 */ be_nested_str_weak(radial),
- /* K16 */ be_nested_str_weak(animation),
- /* K17 */ be_nested_str_weak(is_value_provider),
- /* K18 */ be_nested_str_weak(rainbow),
- /* K19 */ be_nested_str_weak(0x_X2508x),
- /* K20 */ be_nested_str_weak(GradientAnimation_X28_X25s_X2C_X20color_X3D_X25s_X2C_X20movement_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
- /* K21 */ be_nested_str_weak(is_running),
- /* K22 */ be_nested_str_weak(width),
- /* K23 */ be_nested_str_weak(current_colors),
- /* K24 */ be_nested_str_weak(set_pixel_color),
- /* K25 */ be_nested_str_weak(on_param_changed),
- /* K26 */ be_nested_str_weak(engine),
- /* K27 */ be_nested_str_weak(strip_length),
- /* K28 */ be_nested_str_weak(resize),
- /* K29 */ be_const_int(-16777216),
- /* K30 */ be_nested_str_weak(_calculate_linear_position),
- /* K31 */ be_nested_str_weak(_calculate_radial_position),
- /* K32 */ be_nested_str_weak(light_state),
- /* K33 */ be_const_int(3),
- /* K34 */ be_nested_str_weak(HsToRgb),
- /* K35 */ be_nested_str_weak(r),
- /* K36 */ be_nested_str_weak(g),
- /* K37 */ be_nested_str_weak(b),
- /* K38 */ be_nested_str_weak(is_color_provider),
- /* K39 */ be_nested_str_weak(get_color_for_value),
- /* K40 */ be_nested_str_weak(resolve_value),
- /* K41 */ be_nested_str_weak(int),
- /* K42 */ be_nested_str_weak(init),
- /* K43 */ be_nested_str_weak(center_pos),
-};
-
-
-extern const bclass be_class_GradientAnimation;
/********************************************************************
-** Solidified function: update
+** Solidified function: smooth
********************************************************************/
-be_local_closure(class_GradientAnimation_update, /* name */
+be_local_closure(smooth, /* name */
be_nested_proto(
- 11, /* nstack */
- 2, /* argc */
- 10, /* varg */
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
- be_str_weak(update),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(COSINE),
+ }),
+ be_str_weak(smooth),
&be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080101, // 0006 GETMBR R2 R0 K1
- 0x240C0502, // 0007 GT R3 R2 K2
- 0x780E0011, // 0008 JMPF R3 #001B
- 0x880C0103, // 0009 GETMBR R3 R0 K3
- 0x040C0203, // 000A SUB R3 R1 R3
- 0xB8120800, // 000B GETNGBL R4 K4
- 0x8C100905, // 000C GETMET R4 R4 K5
- 0x5C180400, // 000D MOVE R6 R2
- 0x581C0002, // 000E LDCONST R7 K2
- 0x542200FE, // 000F LDINT R8 255
- 0x58240002, // 0010 LDCONST R9 K2
- 0x542A0009, // 0011 LDINT R10 10
- 0x7C100C00, // 0012 CALL R4 6
- 0x24140902, // 0013 GT R5 R4 K2
- 0x78160005, // 0014 JMPF R5 #001B
- 0x08140604, // 0015 MUL R5 R3 R4
- 0x541A03E7, // 0016 LDINT R6 1000
- 0x0C140A06, // 0017 DIV R5 R5 R6
- 0x541A00FF, // 0018 LDINT R6 256
- 0x10140A06, // 0019 MOD R5 R5 R6
- 0x90020C05, // 001A SETMBR R0 K6 R5
- 0x8C0C0107, // 001B GETMET R3 R0 K7
- 0x5C140200, // 001C MOVE R5 R1
- 0x7C0C0400, // 001D CALL R3 2
- 0x80000000, // 001E RET 0
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
})
)
);
@@ -17828,11 +15739,210 @@ be_local_closure(class_GradientAnimation_update, /* name */
/********************************************************************
-** Solidified function: _calculate_linear_position
+** Solidified function: is_value_provider
********************************************************************/
-be_local_closure(class_GradientAnimation__calculate_linear_position, /* name */
+be_local_closure(is_value_provider, /* name */
be_nested_proto(
- 13, /* nstack */
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(value_provider),
+ }),
+ be_str_weak(is_value_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x6004000F, // 0000 GETGBL R1 G15
+ 0x5C080000, // 0001 MOVE R2 R0
+ 0xB80E0000, // 0002 GETNGBL R3 K0
+ 0x880C0701, // 0003 GETMBR R3 R3 K1
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'FrameBuffer' ktab size: 21, total: 43 (saved 176 bytes)
+static const bvalue be_ktab_class_FrameBuffer[21] = {
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(value_error),
+ /* K2 */ be_nested_str_weak(width_X20must_X20be_X20positive),
+ /* K3 */ be_nested_str_weak(width),
+ /* K4 */ be_nested_str_weak(pixels),
+ /* K5 */ be_nested_str_weak(resize),
+ /* K6 */ be_nested_str_weak(clear),
+ /* K7 */ be_nested_str_weak(int),
+ /* K8 */ be_nested_str_weak(instance),
+ /* K9 */ be_nested_str_weak(copy),
+ /* K10 */ be_nested_str_weak(argument_X20must_X20be_X20either_X20int_X20or_X20instance),
+ /* K11 */ be_nested_str_weak(index_error),
+ /* K12 */ be_nested_str_weak(pixel_X20index_X20out_X20of_X20range),
+ /* K13 */ be_nested_str_weak(set),
+ /* K14 */ be_nested_str_weak(tohex),
+ /* K15 */ be_nested_str_weak(FrameBuffer_X28width_X3D_X25s_X2C_X20pixels_X3D_X25s_X29),
+ /* K16 */ be_nested_str_weak(set_pixel_color),
+ /* K17 */ be_nested_str_weak(animation),
+ /* K18 */ be_nested_str_weak(frame_buffer),
+ /* K19 */ be_nested_str_weak(get),
+ /* K20 */ be_nested_str_weak(get_pixel_color),
+};
+
+
+extern const bclass be_class_FrameBuffer;
+
+/********************************************************************
+** Solidified function: resize
+********************************************************************/
+be_local_closure(class_FrameBuffer_resize, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(resize),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x18080300, // 0000 LE R2 R1 K0
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0xB0060302, // 0002 RAISE 1 K1 K2
+ 0x88080103, // 0003 GETMBR R2 R0 K3
+ 0x1C080202, // 0004 EQ R2 R1 R2
+ 0x780A0000, // 0005 JMPF R2 #0007
+ 0x80000400, // 0006 RET 0
+ 0x90020601, // 0007 SETMBR R0 K3 R1
+ 0x88080104, // 0008 GETMBR R2 R0 K4
+ 0x8C080505, // 0009 GETMET R2 R2 K5
+ 0x88100103, // 000A GETMBR R4 R0 K3
+ 0x54160003, // 000B LDINT R5 4
+ 0x08100805, // 000C MUL R4 R4 R5
+ 0x7C080400, // 000D CALL R2 2
+ 0x8C080106, // 000E GETMET R2 R0 K6
+ 0x7C080200, // 000F CALL R2 1
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: clear
+********************************************************************/
+be_local_closure(class_FrameBuffer_clear, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(clear),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x88040104, // 0000 GETMBR R1 R0 K4
+ 0x8C040306, // 0001 GETMET R1 R1 K6
+ 0x7C040200, // 0002 CALL R1 1
+ 0x6004000C, // 0003 GETGBL R1 G12
+ 0x88080104, // 0004 GETMBR R2 R0 K4
+ 0x7C040200, // 0005 CALL R1 1
+ 0x88080103, // 0006 GETMBR R2 R0 K3
+ 0x540E0003, // 0007 LDINT R3 4
+ 0x08080403, // 0008 MUL R2 R2 R3
+ 0x20040202, // 0009 NE R1 R1 R2
+ 0x78060005, // 000A JMPF R1 #0011
+ 0x88040104, // 000B GETMBR R1 R0 K4
+ 0x8C040305, // 000C GETMET R1 R1 K5
+ 0x880C0103, // 000D GETMBR R3 R0 K3
+ 0x54120003, // 000E LDINT R4 4
+ 0x080C0604, // 000F MUL R3 R3 R4
+ 0x7C040400, // 0010 CALL R1 2
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_FrameBuffer_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080507, // 0003 EQ R2 R2 K7
+ 0x780A0010, // 0004 JMPF R2 #0016
+ 0x5C080200, // 0005 MOVE R2 R1
+ 0x180C0500, // 0006 LE R3 R2 K0
+ 0x780E0000, // 0007 JMPF R3 #0009
+ 0xB0060302, // 0008 RAISE 1 K1 K2
+ 0x90020602, // 0009 SETMBR R0 K3 R2
+ 0x600C0015, // 000A GETGBL R3 G21
+ 0x54120003, // 000B LDINT R4 4
+ 0x08100404, // 000C MUL R4 R2 R4
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x8C100705, // 000E GETMET R4 R3 K5
+ 0x541A0003, // 000F LDINT R6 4
+ 0x08180406, // 0010 MUL R6 R2 R6
+ 0x7C100400, // 0011 CALL R4 2
+ 0x90020803, // 0012 SETMBR R0 K4 R3
+ 0x8C100106, // 0013 GETMET R4 R0 K6
+ 0x7C100200, // 0014 CALL R4 1
+ 0x7002000C, // 0015 JMP #0023
+ 0x60080004, // 0016 GETGBL R2 G4
+ 0x5C0C0200, // 0017 MOVE R3 R1
+ 0x7C080200, // 0018 CALL R2 1
+ 0x1C080508, // 0019 EQ R2 R2 K8
+ 0x780A0006, // 001A JMPF R2 #0022
+ 0x88080303, // 001B GETMBR R2 R1 K3
+ 0x90020602, // 001C SETMBR R0 K3 R2
+ 0x88080304, // 001D GETMBR R2 R1 K4
+ 0x8C080509, // 001E GETMET R2 R2 K9
+ 0x7C080200, // 001F CALL R2 1
+ 0x90020802, // 0020 SETMBR R0 K4 R2
+ 0x70020000, // 0021 JMP #0023
+ 0xB006030A, // 0022 RAISE 1 K1 K10
+ 0x80000000, // 0023 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_pixel_color
+********************************************************************/
+be_local_closure(class_FrameBuffer_set_pixel_color, /* name */
+ be_nested_proto(
+ 8, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -17840,60 +15950,51 @@ be_local_closure(class_GradientAnimation__calculate_linear_position, /* name *
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
- be_str_weak(_calculate_linear_position),
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(set_pixel_color),
&be_const_str_solidified,
- ( &(const binstruction[50]) { /* code */
- 0xB80E0800, // 0000 GETNGBL R3 K4
- 0x8C0C0705, // 0001 GETMET R3 R3 K5
- 0x5C140200, // 0002 MOVE R5 R1
- 0x58180002, // 0003 LDCONST R6 K2
- 0x041C0508, // 0004 SUB R7 R2 K8
- 0x58200002, // 0005 LDCONST R8 K2
- 0x542600FE, // 0006 LDINT R9 255
- 0x7C0C0C00, // 0007 CALL R3 6
- 0x88100109, // 0008 GETMBR R4 R0 K9
- 0x8814010A, // 0009 GETMBR R5 R0 K10
- 0x541A007F, // 000A LDINT R6 128
- 0x18180806, // 000B LE R6 R4 R6
- 0x781A000C, // 000C JMPF R6 #001A
- 0xB81A0800, // 000D GETNGBL R6 K4
- 0x8C180D05, // 000E GETMET R6 R6 K5
- 0x5C200800, // 000F MOVE R8 R4
- 0x58240002, // 0010 LDCONST R9 K2
- 0x542A007F, // 0011 LDINT R10 128
- 0x582C0002, // 0012 LDCONST R11 K2
- 0x5432007F, // 0013 LDINT R12 128
- 0x7C180C00, // 0014 CALL R6 6
- 0x001C0606, // 0015 ADD R7 R3 R6
- 0x542200FF, // 0016 LDINT R8 256
- 0x101C0E08, // 0017 MOD R7 R7 R8
- 0x5C0C0E00, // 0018 MOVE R3 R7
- 0x7002000D, // 0019 JMP #0028
- 0xB81A0800, // 001A GETNGBL R6 K4
- 0x8C180D05, // 001B GETMET R6 R6 K5
- 0x5C200800, // 001C MOVE R8 R4
- 0x5426007F, // 001D LDINT R9 128
- 0x542A00FE, // 001E LDINT R10 255
- 0x582C0002, // 001F LDCONST R11 K2
- 0x543200FE, // 0020 LDINT R12 255
- 0x7C180C00, // 0021 CALL R6 6
- 0x541E00FE, // 0022 LDINT R7 255
- 0x00200606, // 0023 ADD R8 R3 R6
- 0x542600FF, // 0024 LDINT R9 256
- 0x10201009, // 0025 MOD R8 R8 R9
- 0x041C0E08, // 0026 SUB R7 R7 R8
- 0x5C0C0E00, // 0027 MOVE R3 R7
- 0xB81A0800, // 0028 GETNGBL R6 K4
- 0x8C180D05, // 0029 GETMET R6 R6 K5
- 0x5C200600, // 002A MOVE R8 R3
- 0x58240002, // 002B LDCONST R9 K2
- 0x542A00FE, // 002C LDINT R10 255
- 0x582C0002, // 002D LDCONST R11 K2
- 0x5C300A00, // 002E MOVE R12 R5
- 0x7C180C00, // 002F CALL R6 6
- 0x5C0C0C00, // 0030 MOVE R3 R6
- 0x80040600, // 0031 RET 1 R3
+ ( &(const binstruction[14]) { /* code */
+ 0x140C0300, // 0000 LT R3 R1 K0
+ 0x740E0002, // 0001 JMPT R3 #0005
+ 0x880C0103, // 0002 GETMBR R3 R0 K3
+ 0x280C0203, // 0003 GE R3 R1 R3
+ 0x780E0000, // 0004 JMPF R3 #0006
+ 0xB006170C, // 0005 RAISE 1 K11 K12
+ 0x880C0104, // 0006 GETMBR R3 R0 K4
+ 0x8C0C070D, // 0007 GETMET R3 R3 K13
+ 0x54160003, // 0008 LDINT R5 4
+ 0x08140205, // 0009 MUL R5 R1 R5
+ 0x5C180400, // 000A MOVE R6 R2
+ 0x541E0003, // 000B LDINT R7 4
+ 0x7C0C0800, // 000C CALL R3 4
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tohex
+********************************************************************/
+be_local_closure(class_FrameBuffer_tohex, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(tohex),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040104, // 0000 GETMBR R1 R0 K4
+ 0x8C04030E, // 0001 GETMET R1 R1 K14
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80040200, // 0003 RET 1 R1
})
)
);
@@ -17903,9 +16004,9 @@ be_local_closure(class_GradientAnimation__calculate_linear_position, /* name *
/********************************************************************
** Solidified function: tostring
********************************************************************/
-be_local_closure(class_GradientAnimation_tostring, /* name */
+be_local_closure(class_FrameBuffer_tostring, /* name */
be_nested_proto(
- 14, /* nstack */
+ 5, /* nstack */
1, /* argc */
10, /* varg */
0, /* has upvals */
@@ -17913,49 +16014,458 @@ be_local_closure(class_GradientAnimation_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
be_str_weak(tostring),
&be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x8804010B, // 0000 GETMBR R1 R0 K11
- 0x8808010C, // 0001 GETMBR R2 R0 K12
- 0x880C0101, // 0002 GETMBR R3 R0 K1
- 0x8810010D, // 0003 GETMBR R4 R0 K13
- 0x1C140302, // 0004 EQ R5 R1 K2
- 0x78160001, // 0005 JMPF R5 #0008
- 0x5814000E, // 0006 LDCONST R5 K14
- 0x70020000, // 0007 JMP #0009
- 0x5814000F, // 0008 LDCONST R5 K15
- 0x4C180000, // 0009 LDNIL R6
- 0xB81E2000, // 000A GETNGBL R7 K16
- 0x8C1C0F11, // 000B GETMET R7 R7 K17
- 0x5C240400, // 000C MOVE R9 R2
- 0x7C1C0400, // 000D CALL R7 2
- 0x781E0004, // 000E JMPF R7 #0014
- 0x601C0008, // 000F GETGBL R7 G8
- 0x5C200400, // 0010 MOVE R8 R2
- 0x7C1C0200, // 0011 CALL R7 1
- 0x5C180E00, // 0012 MOVE R6 R7
- 0x70020009, // 0013 JMP #001E
- 0x4C1C0000, // 0014 LDNIL R7
- 0x1C1C0407, // 0015 EQ R7 R2 R7
- 0x781E0001, // 0016 JMPF R7 #0019
- 0x58180012, // 0017 LDCONST R6 K18
- 0x70020004, // 0018 JMP #001E
- 0x601C0018, // 0019 GETGBL R7 G24
- 0x58200013, // 001A LDCONST R8 K19
- 0x5C240400, // 001B MOVE R9 R2
- 0x7C1C0400, // 001C CALL R7 2
- 0x5C180E00, // 001D MOVE R6 R7
- 0x601C0018, // 001E GETGBL R7 G24
- 0x58200014, // 001F LDCONST R8 K20
- 0x5C240A00, // 0020 MOVE R9 R5
- 0x5C280C00, // 0021 MOVE R10 R6
- 0x5C2C0600, // 0022 MOVE R11 R3
- 0x5C300800, // 0023 MOVE R12 R4
- 0x88340115, // 0024 GETMBR R13 R0 K21
- 0x7C1C0C00, // 0025 CALL R7 6
- 0x80040E00, // 0026 RET 1 R7
+ ( &(const binstruction[ 6]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x5808000F, // 0001 LDCONST R2 K15
+ 0x880C0103, // 0002 GETMBR R3 R0 K3
+ 0x88100104, // 0003 GETMBR R4 R0 K4
+ 0x7C040600, // 0004 CALL R1 3
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: setitem
+********************************************************************/
+be_local_closure(class_FrameBuffer_setitem, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(setitem),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C0C0110, // 0000 GETMET R3 R0 K16
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C0C0600, // 0003 CALL R3 3
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: copy
+********************************************************************/
+be_local_closure(class_FrameBuffer_copy, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(copy),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8062200, // 0000 GETNGBL R1 K17
+ 0x8C040312, // 0001 GETMET R1 R1 K18
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80040200, // 0004 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_pixel_color
+********************************************************************/
+be_local_closure(class_FrameBuffer_get_pixel_color, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(get_pixel_color),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x14080300, // 0000 LT R2 R1 K0
+ 0x740A0002, // 0001 JMPT R2 #0005
+ 0x88080103, // 0002 GETMBR R2 R0 K3
+ 0x28080202, // 0003 GE R2 R1 R2
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0xB006170C, // 0005 RAISE 1 K11 K12
+ 0x88080104, // 0006 GETMBR R2 R0 K4
+ 0x8C080513, // 0007 GETMET R2 R2 K19
+ 0x54120003, // 0008 LDINT R4 4
+ 0x08100204, // 0009 MUL R4 R1 R4
+ 0x54160003, // 000A LDINT R5 4
+ 0x7C080600, // 000B CALL R2 3
+ 0x80040400, // 000C RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: item
+********************************************************************/
+be_local_closure(class_FrameBuffer_item, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_FrameBuffer, /* shared constants */
+ be_str_weak(item),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C080114, // 0000 GETMET R2 R0 K20
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x80040400, // 0003 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: FrameBuffer
+********************************************************************/
+extern const bclass be_class_FrameBufferNtv;
+be_local_class(FrameBuffer,
+ 2,
+ &be_class_FrameBufferNtv,
+ be_nested_map(12,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(pixels, -1), be_const_var(0) },
+ { be_const_key_weak(resize, 6), be_const_closure(class_FrameBuffer_resize_closure) },
+ { be_const_key_weak(clear, -1), be_const_closure(class_FrameBuffer_clear_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_FrameBuffer_init_closure) },
+ { be_const_key_weak(set_pixel_color, -1), be_const_closure(class_FrameBuffer_set_pixel_color_closure) },
+ { be_const_key_weak(tohex, -1), be_const_closure(class_FrameBuffer_tohex_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_FrameBuffer_tostring_closure) },
+ { be_const_key_weak(copy, -1), be_const_closure(class_FrameBuffer_copy_closure) },
+ { be_const_key_weak(setitem, 9), be_const_closure(class_FrameBuffer_setitem_closure) },
+ { be_const_key_weak(get_pixel_color, 7), be_const_closure(class_FrameBuffer_get_pixel_color_closure) },
+ { be_const_key_weak(item, -1), be_const_closure(class_FrameBuffer_item_closure) },
+ { be_const_key_weak(width, -1), be_const_var(1) },
+ })),
+ be_str_weak(FrameBuffer)
+);
+// compact class 'StaticColorProvider' ktab size: 4, total: 8 (saved 32 bytes)
+static const bvalue be_ktab_class_StaticColorProvider[4] = {
+ /* K0 */ be_nested_str_weak(color),
+ /* K1 */ be_nested_str_weak(brightness),
+ /* K2 */ be_nested_str_weak(apply_brightness),
+ /* K3 */ be_nested_str_weak(StaticColorProvider_X28color_X3D0x_X2508X_X29),
+};
+
+
+extern const bclass be_class_StaticColorProvider;
+
+/********************************************************************
+** Solidified function: produce_value
+********************************************************************/
+be_local_closure(class_StaticColorProvider_produce_value, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticColorProvider, /* shared constants */
+ be_str_weak(produce_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x88100101, // 0001 GETMBR R4 R0 K1
+ 0x541600FE, // 0002 LDINT R5 255
+ 0x20140805, // 0003 NE R5 R4 R5
+ 0x78160004, // 0004 JMPF R5 #000A
+ 0x8C140102, // 0005 GETMET R5 R0 K2
+ 0x5C1C0600, // 0006 MOVE R7 R3
+ 0x5C200800, // 0007 MOVE R8 R4
+ 0x7C140600, // 0008 CALL R5 3
+ 0x80040A00, // 0009 RET 1 R5
+ 0x80040600, // 000A RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_StaticColorProvider_tostring, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticColorProvider, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x58080003, // 0001 LDCONST R2 K3
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80040200, // 0004 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_color_for_value
+********************************************************************/
+be_local_closure(class_StaticColorProvider_get_color_for_value, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_StaticColorProvider, /* shared constants */
+ be_str_weak(get_color_for_value),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x88100101, // 0001 GETMBR R4 R0 K1
+ 0x541600FE, // 0002 LDINT R5 255
+ 0x20140805, // 0003 NE R5 R4 R5
+ 0x78160004, // 0004 JMPF R5 #000A
+ 0x8C140102, // 0005 GETMET R5 R0 K2
+ 0x5C1C0600, // 0006 MOVE R7 R3
+ 0x5C200800, // 0007 MOVE R8 R4
+ 0x7C140600, // 0008 CALL R5 3
+ 0x80040A00, // 0009 RET 1 R5
+ 0x80040600, // 000A RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: StaticColorProvider
+********************************************************************/
+extern const bclass be_class_ColorProvider;
+be_local_class(StaticColorProvider,
+ 0,
+ &be_class_ColorProvider,
+ be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, -1), be_const_closure(class_StaticColorProvider_tostring_closure) },
+ { be_const_key_weak(produce_value, 2), be_const_closure(class_StaticColorProvider_produce_value_closure) },
+ { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_StaticColorProvider_get_color_for_value_closure) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(color, -1), be_const_bytes_instance(0400FF) },
+ })) ) } )) },
+ })),
+ be_str_weak(StaticColorProvider)
+);
+// compact class 'PaletteGradientAnimation' ktab size: 35, total: 52 (saved 136 bytes)
+static const bvalue be_ktab_class_PaletteGradientAnimation[35] = {
+ /* K0 */ be_nested_str_weak(on_param_changed),
+ /* K1 */ be_nested_str_weak(color_source),
+ /* K2 */ be_nested_str_weak(_initialize_value_buffer),
+ /* K3 */ be_nested_str_weak(member),
+ /* K4 */ be_nested_str_weak(shift_period),
+ /* K5 */ be_nested_str_weak(spatial_period),
+ /* K6 */ be_nested_str_weak(phase_shift),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(_spatial_period),
+ /* K9 */ be_nested_str_weak(_phase_shift),
+ /* K10 */ be_nested_str_weak(value_buffer),
+ /* K11 */ be_nested_str_weak(tasmota),
+ /* K12 */ be_nested_str_weak(scale_uint),
+ /* K13 */ be_const_int(522241),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_nested_str_weak(_buffer),
+ /* K16 */ be_nested_str_weak(get_param),
+ /* K17 */ be_nested_str_weak(animation),
+ /* K18 */ be_nested_str_weak(color_provider),
+ /* K19 */ be_nested_str_weak(get_lut),
+ /* K20 */ be_nested_str_weak(LUT_FACTOR),
+ /* K21 */ be_nested_str_weak(pixels),
+ /* K22 */ be_const_int(2),
+ /* K23 */ be_const_int(3),
+ /* K24 */ be_nested_str_weak(start_time),
+ /* K25 */ be_nested_str_weak(get_color_for_value),
+ /* K26 */ be_nested_str_weak(set_pixel_color),
+ /* K27 */ be_nested_str_weak(engine),
+ /* K28 */ be_nested_str_weak(strip_length),
+ /* K29 */ be_nested_str_weak(_X25s_X28strip_length_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K30 */ be_nested_str_weak(priority),
+ /* K31 */ be_nested_str_weak(is_running),
+ /* K32 */ be_nested_str_weak(resize),
+ /* K33 */ be_nested_str_weak(init),
+ /* K34 */ be_nested_str_weak(_update_value_buffer),
+};
+
+
+extern const bclass be_class_PaletteGradientAnimation;
+
+/********************************************************************
+** Solidified function: on_param_changed
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation_on_param_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(on_param_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x1C0C0301, // 0007 EQ R3 R1 K1
+ 0x780E0001, // 0008 JMPF R3 #000B
+ 0x8C0C0102, // 0009 GETMET R3 R0 K2
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _update_value_buffer
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation__update_value_buffer, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(_update_value_buffer),
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0x8C0C0103, // 0000 GETMET R3 R0 K3
+ 0x58140004, // 0001 LDCONST R5 K4
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x8C100103, // 0003 GETMET R4 R0 K3
+ 0x58180005, // 0004 LDCONST R6 K5
+ 0x7C100400, // 0005 CALL R4 2
+ 0x8C140103, // 0006 GETMET R5 R0 K3
+ 0x581C0006, // 0007 LDCONST R7 K6
+ 0x7C140400, // 0008 CALL R5 2
+ 0x1C180707, // 0009 EQ R6 R3 K7
+ 0x781A0011, // 000A JMPF R6 #001D
+ 0x88180108, // 000B GETMBR R6 R0 K8
+ 0x4C1C0000, // 000C LDNIL R7
+ 0x20180C07, // 000D NE R6 R6 R7
+ 0x781A000B, // 000E JMPF R6 #001B
+ 0x88180108, // 000F GETMBR R6 R0 K8
+ 0x1C180C04, // 0010 EQ R6 R6 R4
+ 0x781A0008, // 0011 JMPF R6 #001B
+ 0x88180109, // 0012 GETMBR R6 R0 K9
+ 0x1C180C05, // 0013 EQ R6 R6 R5
+ 0x781A0005, // 0014 JMPF R6 #001B
+ 0x6018000C, // 0015 GETGBL R6 G12
+ 0x881C010A, // 0016 GETMBR R7 R0 K10
+ 0x7C180200, // 0017 CALL R6 1
+ 0x1C180C02, // 0018 EQ R6 R6 R2
+ 0x781A0000, // 0019 JMPF R6 #001B
+ 0x80000C00, // 001A RET 0
+ 0x90021004, // 001B SETMBR R0 K8 R4
+ 0x90021205, // 001C SETMBR R0 K9 R5
+ 0x24180907, // 001D GT R6 R4 K7
+ 0x781A0001, // 001E JMPF R6 #0021
+ 0x5C180800, // 001F MOVE R6 R4
+ 0x70020000, // 0020 JMP #0022
+ 0x5C180400, // 0021 MOVE R6 R2
+ 0x581C0007, // 0022 LDCONST R7 K7
+ 0x24200707, // 0023 GT R8 R3 K7
+ 0x78220008, // 0024 JMPF R8 #002E
+ 0xB8221600, // 0025 GETNGBL R8 K11
+ 0x8C20110C, // 0026 GETMET R8 R8 K12
+ 0x10280203, // 0027 MOD R10 R1 R3
+ 0x582C0007, // 0028 LDCONST R11 K7
+ 0x5C300600, // 0029 MOVE R12 R3
+ 0x58340007, // 002A LDCONST R13 K7
+ 0x5C380C00, // 002B MOVE R14 R6
+ 0x7C200C00, // 002C CALL R8 6
+ 0x5C1C1000, // 002D MOVE R7 R8
+ 0xB8221600, // 002E GETNGBL R8 K11
+ 0x8C20110C, // 002F GETMET R8 R8 K12
+ 0x5C280A00, // 0030 MOVE R10 R5
+ 0x582C0007, // 0031 LDCONST R11 K7
+ 0x543200FE, // 0032 LDINT R12 255
+ 0x58340007, // 0033 LDCONST R13 K7
+ 0x5C380C00, // 0034 MOVE R14 R6
+ 0x7C200C00, // 0035 CALL R8 6
+ 0x58240007, // 0036 LDCONST R9 K7
+ 0x00280E08, // 0037 ADD R10 R7 R8
+ 0x10281406, // 0038 MOD R10 R10 R6
+ 0x0C2E1A06, // 0039 DIV R11 K13 R6
+ 0x3C2C170E, // 003A SHR R11 R11 K14
+ 0x0830140B, // 003B MUL R12 R10 R11
+ 0x8834010A, // 003C GETMBR R13 R0 K10
+ 0x8C341B0F, // 003D GETMET R13 R13 K15
+ 0x7C340200, // 003E CALL R13 1
+ 0x14381202, // 003F LT R14 R9 R2
+ 0x783A0005, // 0040 JMPF R14 #0047
+ 0x543A0009, // 0041 LDINT R14 10
+ 0x3C38180E, // 0042 SHR R14 R12 R14
+ 0x9834120E, // 0043 SETIDX R13 R9 R14
+ 0x0030180B, // 0044 ADD R12 R12 R11
+ 0x0024130E, // 0045 ADD R9 R9 K14
+ 0x7001FFF7, // 0046 JMP #003F
+ 0x80000000, // 0047 RET 0
})
)
);
@@ -17965,7 +16475,788 @@ be_local_closure(class_GradientAnimation_tostring, /* name */
/********************************************************************
** Solidified function: render
********************************************************************/
-be_local_closure(class_GradientAnimation_render, /* name */
+be_local_closure(class_PaletteGradientAnimation_render, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[75]) { /* code */
+ 0x8C100110, // 0000 GETMET R4 R0 K16
+ 0x58180001, // 0001 LDCONST R6 K1
+ 0x7C100400, // 0002 CALL R4 2
+ 0x4C140000, // 0003 LDNIL R5
+ 0x1C140805, // 0004 EQ R5 R4 R5
+ 0x78160001, // 0005 JMPF R5 #0008
+ 0x50140000, // 0006 LDBOOL R5 0 0
+ 0x80040A00, // 0007 RET 1 R5
+ 0x4C140000, // 0008 LDNIL R5
+ 0x6018000F, // 0009 GETGBL R6 G15
+ 0x5C1C0800, // 000A MOVE R7 R4
+ 0xB8222200, // 000B GETNGBL R8 K17
+ 0x88201112, // 000C GETMBR R8 R8 K18
+ 0x7C180400, // 000D CALL R6 2
+ 0x781A0028, // 000E JMPF R6 #0038
+ 0x8C180913, // 000F GETMET R6 R4 K19
+ 0x7C180200, // 0010 CALL R6 1
+ 0x5C140C00, // 0011 MOVE R5 R6
+ 0x4C1C0000, // 0012 LDNIL R7
+ 0x20180C07, // 0013 NE R6 R6 R7
+ 0x781A0022, // 0014 JMPF R6 #0038
+ 0x88180914, // 0015 GETMBR R6 R4 K20
+ 0x541E00FF, // 0016 LDINT R7 256
+ 0x3C1C0E06, // 0017 SHR R7 R7 R6
+ 0x58200007, // 0018 LDCONST R8 K7
+ 0x88240315, // 0019 GETMBR R9 R1 K21
+ 0x8C24130F, // 001A GETMET R9 R9 K15
+ 0x7C240200, // 001B CALL R9 1
+ 0x8C280B0F, // 001C GETMET R10 R5 K15
+ 0x7C280200, // 001D CALL R10 1
+ 0x882C010A, // 001E GETMBR R11 R0 K10
+ 0x8C2C170F, // 001F GETMET R11 R11 K15
+ 0x7C2C0200, // 0020 CALL R11 1
+ 0x14301003, // 0021 LT R12 R8 R3
+ 0x78320013, // 0022 JMPF R12 #0037
+ 0x94301608, // 0023 GETIDX R12 R11 R8
+ 0x3C341806, // 0024 SHR R13 R12 R6
+ 0x543A00FE, // 0025 LDINT R14 255
+ 0x1C38180E, // 0026 EQ R14 R12 R14
+ 0x783A0000, // 0027 JMPF R14 #0029
+ 0x5C340E00, // 0028 MOVE R13 R7
+ 0x38381B16, // 0029 SHL R14 R13 K22
+ 0x0038140E, // 002A ADD R14 R10 R14
+ 0x943C1D07, // 002B GETIDX R15 R14 K7
+ 0x98260E0F, // 002C SETIDX R9 K7 R15
+ 0x943C1D0E, // 002D GETIDX R15 R14 K14
+ 0x98261C0F, // 002E SETIDX R9 K14 R15
+ 0x943C1D16, // 002F GETIDX R15 R14 K22
+ 0x98262C0F, // 0030 SETIDX R9 K22 R15
+ 0x943C1D17, // 0031 GETIDX R15 R14 K23
+ 0x98262E0F, // 0032 SETIDX R9 K23 R15
+ 0x0020110E, // 0033 ADD R8 R8 K14
+ 0x543E0003, // 0034 LDINT R15 4
+ 0x0024120F, // 0035 ADD R9 R9 R15
+ 0x7001FFE9, // 0036 JMP #0021
+ 0x70020010, // 0037 JMP #0049
+ 0x88180118, // 0038 GETMBR R6 R0 K24
+ 0x04180406, // 0039 SUB R6 R2 R6
+ 0x581C0007, // 003A LDCONST R7 K7
+ 0x14200E03, // 003B LT R8 R7 R3
+ 0x7822000B, // 003C JMPF R8 #0049
+ 0x8820010A, // 003D GETMBR R8 R0 K10
+ 0x94201007, // 003E GETIDX R8 R8 R7
+ 0x8C240919, // 003F GETMET R9 R4 K25
+ 0x5C2C1000, // 0040 MOVE R11 R8
+ 0x5C300C00, // 0041 MOVE R12 R6
+ 0x7C240600, // 0042 CALL R9 3
+ 0x8C28031A, // 0043 GETMET R10 R1 K26
+ 0x5C300E00, // 0044 MOVE R12 R7
+ 0x5C341200, // 0045 MOVE R13 R9
+ 0x7C280600, // 0046 CALL R10 3
+ 0x001C0F0E, // 0047 ADD R7 R7 K14
+ 0x7001FFF1, // 0048 JMP #003B
+ 0x50180200, // 0049 LDBOOL R6 1 0
+ 0x80040C00, // 004A RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x8804011B, // 0000 GETMBR R1 R0 K27
+ 0x8804031C, // 0001 GETMBR R1 R1 K28
+ 0x60080018, // 0002 GETGBL R2 G24
+ 0x580C001D, // 0003 LDCONST R3 K29
+ 0x60100005, // 0004 GETGBL R4 G5
+ 0x5C140000, // 0005 MOVE R5 R0
+ 0x7C100200, // 0006 CALL R4 1
+ 0x5C140200, // 0007 MOVE R5 R1
+ 0x8818011E, // 0008 GETMBR R6 R0 K30
+ 0x881C011F, // 0009 GETMBR R7 R0 K31
+ 0x7C080A00, // 000A CALL R2 5
+ 0x80040400, // 000B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _initialize_value_buffer
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation__initialize_value_buffer, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(_initialize_value_buffer),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x8804011B, // 0000 GETMBR R1 R0 K27
+ 0x8804031C, // 0001 GETMBR R1 R1 K28
+ 0x8808010A, // 0002 GETMBR R2 R0 K10
+ 0x8C080520, // 0003 GETMET R2 R2 K32
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x58080007, // 0006 LDCONST R2 K7
+ 0x140C0401, // 0007 LT R3 R2 R1
+ 0x780E0003, // 0008 JMPF R3 #000D
+ 0x880C010A, // 0009 GETMBR R3 R0 K10
+ 0x980C0507, // 000A SETIDX R3 R2 K7
+ 0x0008050E, // 000B ADD R2 R2 K14
+ 0x7001FFF9, // 000C JMP #0007
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080521, // 0003 GETMET R2 R2 K33
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x60080015, // 0006 GETGBL R2 G21
+ 0x7C080000, // 0007 CALL R2 0
+ 0x90021402, // 0008 SETMBR R0 K10 R2
+ 0x8C080102, // 0009 GETMET R2 R0 K2
+ 0x7C080200, // 000A CALL R2 1
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_PaletteGradientAnimation_update, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_PaletteGradientAnimation, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x88080118, // 0000 GETMBR R2 R0 K24
+ 0x04080202, // 0001 SUB R2 R1 R2
+ 0x880C011B, // 0002 GETMBR R3 R0 K27
+ 0x880C071C, // 0003 GETMBR R3 R3 K28
+ 0x6010000C, // 0004 GETGBL R4 G12
+ 0x8814010A, // 0005 GETMBR R5 R0 K10
+ 0x7C100200, // 0006 CALL R4 1
+ 0x20100803, // 0007 NE R4 R4 R3
+ 0x78120003, // 0008 JMPF R4 #000D
+ 0x8810010A, // 0009 GETMBR R4 R0 K10
+ 0x8C100920, // 000A GETMET R4 R4 K32
+ 0x5C180600, // 000B MOVE R6 R3
+ 0x7C100400, // 000C CALL R4 2
+ 0x8C100122, // 000D GETMET R4 R0 K34
+ 0x5C180400, // 000E MOVE R6 R2
+ 0x5C1C0600, // 000F MOVE R7 R3
+ 0x7C100600, // 0010 CALL R4 3
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: PaletteGradientAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(PaletteGradientAnimation,
+ 3,
+ &be_class_Animation,
+ be_nested_map(11,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(update, 10), be_const_closure(class_PaletteGradientAnimation_update_closure) },
+ { be_const_key_weak(_update_value_buffer, 6), be_const_closure(class_PaletteGradientAnimation__update_value_buffer_closure) },
+ { be_const_key_weak(value_buffer, -1), be_const_var(0) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_PaletteGradientAnimation_tostring_closure) },
+ { be_const_key_weak(render, 0), be_const_closure(class_PaletteGradientAnimation_render_closure) },
+ { be_const_key_weak(on_param_changed, 7), be_const_closure(class_PaletteGradientAnimation_on_param_changed_closure) },
+ { be_const_key_weak(_initialize_value_buffer, -1), be_const_closure(class_PaletteGradientAnimation__initialize_value_buffer_closure) },
+ { be_const_key_weak(_phase_shift, 2), be_const_var(2) },
+ { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(color_source, -1), be_const_bytes_instance(0C0605) },
+ { be_const_key_weak(shift_period, 2), be_const_bytes_instance(0500000000) },
+ { be_const_key_weak(spatial_period, -1), be_const_bytes_instance(0500000000) },
+ { be_const_key_weak(phase_shift, -1), be_const_bytes_instance(07000001FF000000) },
+ })) ) } )) },
+ { be_const_key_weak(init, -1), be_const_closure(class_PaletteGradientAnimation_init_closure) },
+ { be_const_key_weak(_spatial_period, -1), be_const_var(1) },
+ })),
+ be_str_weak(PaletteGradientAnimation)
+);
+// compact class 'EventHandler' ktab size: 7, total: 11 (saved 32 bytes)
+static const bvalue be_ktab_class_EventHandler[7] = {
+ /* K0 */ be_nested_str_weak(is_active),
+ /* K1 */ be_nested_str_weak(condition),
+ /* K2 */ be_nested_str_weak(callback_func),
+ /* K3 */ be_nested_str_weak(event_name),
+ /* K4 */ be_nested_str_weak(priority),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(metadata),
+};
+
+
+extern const bclass be_class_EventHandler;
+
+/********************************************************************
+** Solidified function: set_active
+********************************************************************/
+be_local_closure(class_EventHandler_set_active, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EventHandler, /* shared constants */
+ be_str_weak(set_active),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: execute
+********************************************************************/
+be_local_closure(class_EventHandler_execute, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EventHandler, /* shared constants */
+ be_str_weak(execute),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x740A0001, // 0001 JMPT R2 #0004
+ 0x50080000, // 0002 LDBOOL R2 0 0
+ 0x80040400, // 0003 RET 1 R2
+ 0x88080101, // 0004 GETMBR R2 R0 K1
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x20080403, // 0006 NE R2 R2 R3
+ 0x780A0005, // 0007 JMPF R2 #000E
+ 0x8C080101, // 0008 GETMET R2 R0 K1
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0x740A0001, // 000B JMPT R2 #000E
+ 0x50080000, // 000C LDBOOL R2 0 0
+ 0x80040400, // 000D RET 1 R2
+ 0x88080102, // 000E GETMBR R2 R0 K2
+ 0x4C0C0000, // 000F LDNIL R3
+ 0x20080403, // 0010 NE R2 R2 R3
+ 0x780A0004, // 0011 JMPF R2 #0017
+ 0x8C080102, // 0012 GETMET R2 R0 K2
+ 0x5C100200, // 0013 MOVE R4 R1
+ 0x7C080400, // 0014 CALL R2 2
+ 0x50080200, // 0015 LDBOOL R2 1 0
+ 0x80040400, // 0016 RET 1 R2
+ 0x50080000, // 0017 LDBOOL R2 0 0
+ 0x80040400, // 0018 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_EventHandler_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 6, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EventHandler, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x90020601, // 0000 SETMBR R0 K3 R1
+ 0x90020402, // 0001 SETMBR R0 K2 R2
+ 0x4C180000, // 0002 LDNIL R6
+ 0x20180606, // 0003 NE R6 R3 R6
+ 0x781A0001, // 0004 JMPF R6 #0007
+ 0x5C180600, // 0005 MOVE R6 R3
+ 0x70020000, // 0006 JMP #0008
+ 0x58180005, // 0007 LDCONST R6 K5
+ 0x90020806, // 0008 SETMBR R0 K4 R6
+ 0x90020204, // 0009 SETMBR R0 K1 R4
+ 0x50180200, // 000A LDBOOL R6 1 0
+ 0x90020006, // 000B SETMBR R0 K0 R6
+ 0x4C180000, // 000C LDNIL R6
+ 0x20180A06, // 000D NE R6 R5 R6
+ 0x781A0001, // 000E JMPF R6 #0011
+ 0x5C180A00, // 000F MOVE R6 R5
+ 0x70020001, // 0010 JMP #0013
+ 0x60180013, // 0011 GETGBL R6 G19
+ 0x7C180000, // 0012 CALL R6 0
+ 0x90020C06, // 0013 SETMBR R0 K6 R6
+ 0x80000000, // 0014 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: EventHandler
+********************************************************************/
+be_local_class(EventHandler,
+ 6,
+ NULL,
+ be_nested_map(9,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(set_active, -1), be_const_closure(class_EventHandler_set_active_closure) },
+ { be_const_key_weak(execute, 2), be_const_closure(class_EventHandler_execute_closure) },
+ { be_const_key_weak(callback_func, -1), be_const_var(1) },
+ { be_const_key_weak(init, -1), be_const_closure(class_EventHandler_init_closure) },
+ { be_const_key_weak(event_name, -1), be_const_var(0) },
+ { be_const_key_weak(condition, -1), be_const_var(2) },
+ { be_const_key_weak(priority, 3), be_const_var(3) },
+ { be_const_key_weak(metadata, -1), be_const_var(5) },
+ { be_const_key_weak(is_active, -1), be_const_var(4) },
+ })),
+ be_str_weak(EventHandler)
+);
+
+/********************************************************************
+** Solidified function: cosine_osc
+********************************************************************/
+be_local_closure(cosine_osc, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(oscillator_value),
+ /* K2 */ be_nested_str_weak(form),
+ /* K3 */ be_nested_str_weak(COSINE),
+ }),
+ be_str_weak(cosine_osc),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0xB80A0000, // 0004 GETNGBL R2 K0
+ 0x88080503, // 0005 GETMBR R2 R2 K3
+ 0x90060402, // 0006 SETMBR R1 K2 R2
+ 0x80040200, // 0007 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: clear_all_event_handlers
+********************************************************************/
+be_local_closure(clear_all_event_handlers, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(event_manager),
+ /* K2 */ be_nested_str_weak(clear_all_handlers),
+ }),
+ be_str_weak(clear_all_event_handlers),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8020000, // 0000 GETNGBL R0 K0
+ 0x88000101, // 0001 GETMBR R0 R0 K1
+ 0x8C000102, // 0002 GETMET R0 R0 K2
+ 0x7C000200, // 0003 CALL R0 1
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: gradient_rainbow_linear
+********************************************************************/
+be_local_closure(gradient_rainbow_linear, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(gradient_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(gradient_type),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(direction),
+ /* K6 */ be_nested_str_weak(movement_speed),
+ }),
+ be_str_weak(gradient_rainbow_linear),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x4C080000, // 0004 LDNIL R2
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x90060704, // 0006 SETMBR R1 K3 K4
+ 0x90060B04, // 0007 SETMBR R1 K5 K4
+ 0x540A0031, // 0008 LDINT R2 50
+ 0x90060C02, // 0009 SETMBR R1 K6 R2
+ 0x80040200, // 000A RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'WaveAnimation' ktab size: 42, total: 67 (saved 200 bytes)
+static const bvalue be_ktab_class_WaveAnimation[42] = {
+ /* K0 */ be_nested_str_weak(wave_table),
+ /* K1 */ be_nested_str_weak(resize),
+ /* K2 */ be_nested_str_weak(wave_type),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(scale_uint),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_const_int(2),
+ /* K8 */ be_nested_str_weak(sine),
+ /* K9 */ be_nested_str_weak(triangle),
+ /* K10 */ be_nested_str_weak(square),
+ /* K11 */ be_nested_str_weak(sawtooth),
+ /* K12 */ be_nested_str_weak(unknown),
+ /* K13 */ be_nested_str_weak(color),
+ /* K14 */ be_nested_str_weak(animation),
+ /* K15 */ be_nested_str_weak(is_value_provider),
+ /* K16 */ be_nested_str_weak(0x_X2508x),
+ /* K17 */ be_nested_str_weak(WaveAnimation_X28_X25s_X2C_X20color_X3D_X25s_X2C_X20freq_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K18 */ be_nested_str_weak(frequency),
+ /* K19 */ be_nested_str_weak(wave_speed),
+ /* K20 */ be_nested_str_weak(priority),
+ /* K21 */ be_nested_str_weak(is_running),
+ /* K22 */ be_nested_str_weak(width),
+ /* K23 */ be_nested_str_weak(current_colors),
+ /* K24 */ be_nested_str_weak(size),
+ /* K25 */ be_nested_str_weak(set_pixel_color),
+ /* K26 */ be_nested_str_weak(on_param_changed),
+ /* K27 */ be_nested_str_weak(_init_wave_table),
+ /* K28 */ be_nested_str_weak(update),
+ /* K29 */ be_nested_str_weak(start_time),
+ /* K30 */ be_nested_str_weak(time_offset),
+ /* K31 */ be_nested_str_weak(_calculate_wave),
+ /* K32 */ be_nested_str_weak(init),
+ /* K33 */ be_nested_str_weak(engine),
+ /* K34 */ be_nested_str_weak(strip_length),
+ /* K35 */ be_nested_str_weak(phase),
+ /* K36 */ be_nested_str_weak(amplitude),
+ /* K37 */ be_nested_str_weak(center_level),
+ /* K38 */ be_nested_str_weak(back_color),
+ /* K39 */ be_nested_str_weak(is_color_provider),
+ /* K40 */ be_nested_str_weak(get_color_for_value),
+ /* K41 */ be_nested_str_weak(resolve_value),
+};
+
+
+extern const bclass be_class_WaveAnimation;
+
+/********************************************************************
+** Solidified function: _init_wave_table
+********************************************************************/
+be_local_closure(class_WaveAnimation__init_wave_table, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
+ be_str_weak(_init_wave_table),
+ &be_const_str_solidified,
+ ( &(const binstruction[108]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x540E00FF, // 0002 LDINT R3 256
+ 0x7C040400, // 0003 CALL R1 2
+ 0x88040102, // 0004 GETMBR R1 R0 K2
+ 0x58080003, // 0005 LDCONST R2 K3
+ 0x540E00FF, // 0006 LDINT R3 256
+ 0x140C0403, // 0007 LT R3 R2 R3
+ 0x780E0061, // 0008 JMPF R3 #006B
+ 0x580C0003, // 0009 LDCONST R3 K3
+ 0x1C100303, // 000A EQ R4 R1 K3
+ 0x78120035, // 000B JMPF R4 #0042
+ 0x5412003F, // 000C LDINT R4 64
+ 0x10100404, // 000D MOD R4 R2 R4
+ 0x5416003F, // 000E LDINT R5 64
+ 0x14140405, // 000F LT R5 R2 R5
+ 0x78160009, // 0010 JMPF R5 #001B
+ 0xB8160800, // 0011 GETNGBL R5 K4
+ 0x8C140B05, // 0012 GETMET R5 R5 K5
+ 0x5C1C0800, // 0013 MOVE R7 R4
+ 0x58200003, // 0014 LDCONST R8 K3
+ 0x5426003F, // 0015 LDINT R9 64
+ 0x542A007F, // 0016 LDINT R10 128
+ 0x542E00FE, // 0017 LDINT R11 255
+ 0x7C140C00, // 0018 CALL R5 6
+ 0x5C0C0A00, // 0019 MOVE R3 R5
+ 0x70020025, // 001A JMP #0041
+ 0x5416007F, // 001B LDINT R5 128
+ 0x14140405, // 001C LT R5 R2 R5
+ 0x7816000A, // 001D JMPF R5 #0029
+ 0xB8160800, // 001E GETNGBL R5 K4
+ 0x8C140B05, // 001F GETMET R5 R5 K5
+ 0x541E007F, // 0020 LDINT R7 128
+ 0x041C0E02, // 0021 SUB R7 R7 R2
+ 0x58200003, // 0022 LDCONST R8 K3
+ 0x5426003F, // 0023 LDINT R9 64
+ 0x542A007F, // 0024 LDINT R10 128
+ 0x542E00FE, // 0025 LDINT R11 255
+ 0x7C140C00, // 0026 CALL R5 6
+ 0x5C0C0A00, // 0027 MOVE R3 R5
+ 0x70020017, // 0028 JMP #0041
+ 0x541600BF, // 0029 LDINT R5 192
+ 0x14140405, // 002A LT R5 R2 R5
+ 0x7816000A, // 002B JMPF R5 #0037
+ 0xB8160800, // 002C GETNGBL R5 K4
+ 0x8C140B05, // 002D GETMET R5 R5 K5
+ 0x541E007F, // 002E LDINT R7 128
+ 0x041C0407, // 002F SUB R7 R2 R7
+ 0x58200003, // 0030 LDCONST R8 K3
+ 0x5426003F, // 0031 LDINT R9 64
+ 0x542A007F, // 0032 LDINT R10 128
+ 0x582C0003, // 0033 LDCONST R11 K3
+ 0x7C140C00, // 0034 CALL R5 6
+ 0x5C0C0A00, // 0035 MOVE R3 R5
+ 0x70020009, // 0036 JMP #0041
+ 0xB8160800, // 0037 GETNGBL R5 K4
+ 0x8C140B05, // 0038 GETMET R5 R5 K5
+ 0x541E00FF, // 0039 LDINT R7 256
+ 0x041C0E02, // 003A SUB R7 R7 R2
+ 0x58200003, // 003B LDCONST R8 K3
+ 0x5426003F, // 003C LDINT R9 64
+ 0x542A007F, // 003D LDINT R10 128
+ 0x582C0003, // 003E LDCONST R11 K3
+ 0x7C140C00, // 003F CALL R5 6
+ 0x5C0C0A00, // 0040 MOVE R3 R5
+ 0x70020024, // 0041 JMP #0067
+ 0x1C100306, // 0042 EQ R4 R1 K6
+ 0x78120017, // 0043 JMPF R4 #005C
+ 0x5412007F, // 0044 LDINT R4 128
+ 0x14100404, // 0045 LT R4 R2 R4
+ 0x78120009, // 0046 JMPF R4 #0051
+ 0xB8120800, // 0047 GETNGBL R4 K4
+ 0x8C100905, // 0048 GETMET R4 R4 K5
+ 0x5C180400, // 0049 MOVE R6 R2
+ 0x581C0003, // 004A LDCONST R7 K3
+ 0x5422007F, // 004B LDINT R8 128
+ 0x58240003, // 004C LDCONST R9 K3
+ 0x542A00FE, // 004D LDINT R10 255
+ 0x7C100C00, // 004E CALL R4 6
+ 0x5C0C0800, // 004F MOVE R3 R4
+ 0x70020009, // 0050 JMP #005B
+ 0xB8120800, // 0051 GETNGBL R4 K4
+ 0x8C100905, // 0052 GETMET R4 R4 K5
+ 0x541A00FF, // 0053 LDINT R6 256
+ 0x04180C02, // 0054 SUB R6 R6 R2
+ 0x581C0003, // 0055 LDCONST R7 K3
+ 0x5422007F, // 0056 LDINT R8 128
+ 0x58240003, // 0057 LDCONST R9 K3
+ 0x542A00FE, // 0058 LDINT R10 255
+ 0x7C100C00, // 0059 CALL R4 6
+ 0x5C0C0800, // 005A MOVE R3 R4
+ 0x7002000A, // 005B JMP #0067
+ 0x1C100307, // 005C EQ R4 R1 K7
+ 0x78120007, // 005D JMPF R4 #0066
+ 0x5412007F, // 005E LDINT R4 128
+ 0x14100404, // 005F LT R4 R2 R4
+ 0x78120001, // 0060 JMPF R4 #0063
+ 0x541200FE, // 0061 LDINT R4 255
+ 0x70020000, // 0062 JMP #0064
+ 0x58100003, // 0063 LDCONST R4 K3
+ 0x5C0C0800, // 0064 MOVE R3 R4
+ 0x70020000, // 0065 JMP #0067
+ 0x5C0C0400, // 0066 MOVE R3 R2
+ 0x88100100, // 0067 GETMBR R4 R0 K0
+ 0x98100403, // 0068 SETIDX R4 R2 R3
+ 0x00080506, // 0069 ADD R2 R2 K6
+ 0x7001FF9A, // 006A JMP #0006
+ 0x80000000, // 006B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_WaveAnimation_tostring, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[41]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x40080308, // 0002 CONNECT R2 R1 K8
+ 0x40080309, // 0003 CONNECT R2 R1 K9
+ 0x4008030A, // 0004 CONNECT R2 R1 K10
+ 0x4008030B, // 0005 CONNECT R2 R1 K11
+ 0x88080102, // 0006 GETMBR R2 R0 K2
+ 0x940C0202, // 0007 GETIDX R3 R1 R2
+ 0x4C100000, // 0008 LDNIL R4
+ 0x200C0604, // 0009 NE R3 R3 R4
+ 0x780E0001, // 000A JMPF R3 #000D
+ 0x940C0202, // 000B GETIDX R3 R1 R2
+ 0x70020000, // 000C JMP #000E
+ 0x580C000C, // 000D LDCONST R3 K12
+ 0x8810010D, // 000E GETMBR R4 R0 K13
+ 0x4C140000, // 000F LDNIL R5
+ 0xB81A1C00, // 0010 GETNGBL R6 K14
+ 0x8C180D0F, // 0011 GETMET R6 R6 K15
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x7C180400, // 0013 CALL R6 2
+ 0x781A0004, // 0014 JMPF R6 #001A
+ 0x60180008, // 0015 GETGBL R6 G8
+ 0x5C1C0800, // 0016 MOVE R7 R4
+ 0x7C180200, // 0017 CALL R6 1
+ 0x5C140C00, // 0018 MOVE R5 R6
+ 0x70020004, // 0019 JMP #001F
+ 0x60180018, // 001A GETGBL R6 G24
+ 0x581C0010, // 001B LDCONST R7 K16
+ 0x5C200800, // 001C MOVE R8 R4
+ 0x7C180400, // 001D CALL R6 2
+ 0x5C140C00, // 001E MOVE R5 R6
+ 0x60180018, // 001F GETGBL R6 G24
+ 0x581C0011, // 0020 LDCONST R7 K17
+ 0x5C200600, // 0021 MOVE R8 R3
+ 0x5C240A00, // 0022 MOVE R9 R5
+ 0x88280112, // 0023 GETMBR R10 R0 K18
+ 0x882C0113, // 0024 GETMBR R11 R0 K19
+ 0x88300114, // 0025 GETMBR R12 R0 K20
+ 0x88340115, // 0026 GETMBR R13 R0 K21
+ 0x7C180E00, // 0027 CALL R6 7
+ 0x80040C00, // 0028 RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_WaveAnimation_render, /* name */
be_nested_proto(
9, /* nstack */
4, /* argc */
@@ -17975,27 +17266,27 @@ be_local_closure(class_GradientAnimation_render, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
be_str_weak(render),
&be_const_str_solidified,
( &(const binstruction[20]) { /* code */
- 0x58100002, // 0000 LDCONST R4 K2
+ 0x58100003, // 0000 LDCONST R4 K3
0x14140803, // 0001 LT R5 R4 R3
0x7816000E, // 0002 JMPF R5 #0012
0x88140316, // 0003 GETMBR R5 R1 K22
0x14140805, // 0004 LT R5 R4 R5
- 0x7816000B, // 0005 JMPF R5 #0012
- 0x6014000C, // 0006 GETGBL R5 G12
- 0x88180117, // 0007 GETMBR R6 R0 K23
+ 0x78160009, // 0005 JMPF R5 #0010
+ 0x88140117, // 0006 GETMBR R5 R0 K23
+ 0x8C140B18, // 0007 GETMET R5 R5 K24
0x7C140200, // 0008 CALL R5 1
0x14140805, // 0009 LT R5 R4 R5
0x78160004, // 000A JMPF R5 #0010
- 0x8C140318, // 000B GETMET R5 R1 K24
+ 0x8C140319, // 000B GETMET R5 R1 K25
0x5C1C0800, // 000C MOVE R7 R4
0x88200117, // 000D GETMBR R8 R0 K23
0x94201004, // 000E GETIDX R8 R8 R4
0x7C140600, // 000F CALL R5 3
- 0x00100908, // 0010 ADD R4 R4 K8
+ 0x00100906, // 0010 ADD R4 R4 K6
0x7001FFEE, // 0011 JMP #0001
0x50140200, // 0012 LDBOOL R5 1 0
0x80040A00, // 0013 RET 1 R5
@@ -18008,7 +17299,7 @@ be_local_closure(class_GradientAnimation_render, /* name */
/********************************************************************
** Solidified function: on_param_changed
********************************************************************/
-be_local_closure(class_GradientAnimation_on_param_changed, /* name */
+be_local_closure(class_WaveAnimation_on_param_changed, /* name */
be_nested_proto(
7, /* nstack */
3, /* argc */
@@ -18018,53 +17309,22 @@ be_local_closure(class_GradientAnimation_on_param_changed, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
be_str_weak(on_param_changed),
&be_const_str_solidified,
- ( &(const binstruction[43]) { /* code */
+ ( &(const binstruction[12]) { /* code */
0x600C0003, // 0000 GETGBL R3 G3
0x5C100000, // 0001 MOVE R4 R0
0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0719, // 0003 GETMET R3 R3 K25
+ 0x8C0C071A, // 0003 GETMET R3 R3 K26
0x5C140200, // 0004 MOVE R5 R1
0x5C180400, // 0005 MOVE R6 R2
0x7C0C0600, // 0006 CALL R3 3
- 0x880C011A, // 0007 GETMBR R3 R0 K26
- 0x880C071B, // 0008 GETMBR R3 R3 K27
- 0x6010000C, // 0009 GETGBL R4 G12
- 0x88140117, // 000A GETMBR R5 R0 K23
- 0x7C100200, // 000B CALL R4 1
- 0x20100803, // 000C NE R4 R4 R3
- 0x7812001B, // 000D JMPF R4 #002A
- 0x88100117, // 000E GETMBR R4 R0 K23
- 0x8C10091C, // 000F GETMET R4 R4 K28
- 0x5C180600, // 0010 MOVE R6 R3
- 0x7C100400, // 0011 CALL R4 2
- 0x6010000C, // 0012 GETGBL R4 G12
- 0x88140117, // 0013 GETMBR R5 R0 K23
- 0x7C100200, // 0014 CALL R4 1
- 0x14140803, // 0015 LT R5 R4 R3
- 0x78160012, // 0016 JMPF R5 #002A
- 0x6014000C, // 0017 GETGBL R5 G12
- 0x88180117, // 0018 GETMBR R6 R0 K23
- 0x7C140200, // 0019 CALL R5 1
- 0x28140805, // 001A GE R5 R4 R5
- 0x74160004, // 001B JMPT R5 #0021
- 0x88140117, // 001C GETMBR R5 R0 K23
- 0x94140A04, // 001D GETIDX R5 R5 R4
- 0x4C180000, // 001E LDNIL R6
- 0x1C140A06, // 001F EQ R5 R5 R6
- 0x78160006, // 0020 JMPF R5 #0028
- 0x6014000C, // 0021 GETGBL R5 G12
- 0x88180117, // 0022 GETMBR R6 R0 K23
- 0x7C140200, // 0023 CALL R5 1
- 0x14140805, // 0024 LT R5 R4 R5
- 0x78160001, // 0025 JMPF R5 #0028
- 0x88140117, // 0026 GETMBR R5 R0 K23
- 0x9814091D, // 0027 SETIDX R5 R4 K29
- 0x00100908, // 0028 ADD R4 R4 K8
- 0x7001FFEA, // 0029 JMP #0015
- 0x80000000, // 002A RET 0
+ 0x1C0C0302, // 0007 EQ R3 R1 K2
+ 0x780E0001, // 0008 JMPF R3 #000B
+ 0x8C0C011B, // 0009 GETMET R3 R0 K27
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x80000000, // 000B RET 0
})
)
);
@@ -18072,11 +17332,11 @@ be_local_closure(class_GradientAnimation_on_param_changed, /* name */
/********************************************************************
-** Solidified function: _calculate_gradient
+** Solidified function: update
********************************************************************/
-be_local_closure(class_GradientAnimation__calculate_gradient, /* name */
+be_local_closure(class_WaveAnimation_update, /* name */
be_nested_proto(
- 18, /* nstack */
+ 11, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -18084,833 +17344,41 @@ be_local_closure(class_GradientAnimation__calculate_gradient, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
- be_str_weak(_calculate_gradient),
+ &be_ktab_class_WaveAnimation, /* shared constants */
+ be_str_weak(update),
&be_const_str_solidified,
- ( &(const binstruction[148]) { /* code */
- 0x8808010B, // 0000 GETMBR R2 R0 K11
- 0x880C010C, // 0001 GETMBR R3 R0 K12
- 0x8810011A, // 0002 GETMBR R4 R0 K26
- 0x8810091B, // 0003 GETMBR R4 R4 K27
- 0x6014000C, // 0004 GETGBL R5 G12
- 0x88180117, // 0005 GETMBR R6 R0 K23
- 0x7C140200, // 0006 CALL R5 1
- 0x20140A04, // 0007 NE R5 R5 R4
- 0x78160003, // 0008 JMPF R5 #000D
- 0x88140117, // 0009 GETMBR R5 R0 K23
- 0x8C140B1C, // 000A GETMET R5 R5 K28
- 0x5C1C0800, // 000B MOVE R7 R4
- 0x7C140400, // 000C CALL R5 2
- 0x58140002, // 000D LDCONST R5 K2
- 0x14180A04, // 000E LT R6 R5 R4
- 0x781A0082, // 000F JMPF R6 #0093
- 0x58180002, // 0010 LDCONST R6 K2
- 0x1C1C0502, // 0011 EQ R7 R2 K2
- 0x781E0005, // 0012 JMPF R7 #0019
- 0x8C1C011E, // 0013 GETMET R7 R0 K30
- 0x5C240A00, // 0014 MOVE R9 R5
- 0x5C280800, // 0015 MOVE R10 R4
- 0x7C1C0600, // 0016 CALL R7 3
- 0x5C180E00, // 0017 MOVE R6 R7
- 0x70020004, // 0018 JMP #001E
- 0x8C1C011F, // 0019 GETMET R7 R0 K31
- 0x5C240A00, // 001A MOVE R9 R5
- 0x5C280800, // 001B MOVE R10 R4
- 0x7C1C0600, // 001C CALL R7 3
- 0x5C180E00, // 001D MOVE R6 R7
- 0x881C0106, // 001E GETMBR R7 R0 K6
- 0x001C0C07, // 001F ADD R7 R6 R7
- 0x542200FF, // 0020 LDINT R8 256
- 0x101C0E08, // 0021 MOD R7 R7 R8
- 0x5C180E00, // 0022 MOVE R6 R7
- 0x581C001D, // 0023 LDCONST R7 K29
- 0x4C200000, // 0024 LDNIL R8
- 0x1C200608, // 0025 EQ R8 R3 R8
- 0x7822001B, // 0026 JMPF R8 #0043
- 0xB8220800, // 0027 GETNGBL R8 K4
- 0x8C201105, // 0028 GETMET R8 R8 K5
- 0x5C280C00, // 0029 MOVE R10 R6
- 0x582C0002, // 002A LDCONST R11 K2
- 0x543200FE, // 002B LDINT R12 255
- 0x58340002, // 002C LDCONST R13 K2
- 0x543A0166, // 002D LDINT R14 359
- 0x7C200C00, // 002E CALL R8 6
- 0xA4264000, // 002F IMPORT R9 K32
- 0x5C281200, // 0030 MOVE R10 R9
- 0x582C0021, // 0031 LDCONST R11 K33
- 0x7C280200, // 0032 CALL R10 1
- 0x8C2C1522, // 0033 GETMET R11 R10 K34
- 0x5C341000, // 0034 MOVE R13 R8
- 0x543A00FE, // 0035 LDINT R14 255
- 0x7C2C0600, // 0036 CALL R11 3
- 0x882C1523, // 0037 GETMBR R11 R10 K35
- 0x5432000F, // 0038 LDINT R12 16
- 0x382C160C, // 0039 SHL R11 R11 R12
- 0x302E3A0B, // 003A OR R11 K29 R11
- 0x88301524, // 003B GETMBR R12 R10 K36
- 0x54360007, // 003C LDINT R13 8
- 0x3830180D, // 003D SHL R12 R12 R13
- 0x302C160C, // 003E OR R11 R11 R12
- 0x88301525, // 003F GETMBR R12 R10 K37
- 0x302C160C, // 0040 OR R11 R11 R12
- 0x5C1C1600, // 0041 MOVE R7 R11
- 0x7002004B, // 0042 JMP #008F
- 0xB8222000, // 0043 GETNGBL R8 K16
- 0x8C201126, // 0044 GETMET R8 R8 K38
- 0x5C280600, // 0045 MOVE R10 R3
- 0x7C200400, // 0046 CALL R8 2
- 0x78220009, // 0047 JMPF R8 #0052
- 0x88200727, // 0048 GETMBR R8 R3 K39
- 0x4C240000, // 0049 LDNIL R9
- 0x20201009, // 004A NE R8 R8 R9
- 0x78220005, // 004B JMPF R8 #0052
- 0x8C200727, // 004C GETMET R8 R3 K39
- 0x5C280C00, // 004D MOVE R10 R6
- 0x582C0002, // 004E LDCONST R11 K2
- 0x7C200600, // 004F CALL R8 3
- 0x5C1C1000, // 0050 MOVE R7 R8
- 0x7002003C, // 0051 JMP #008F
- 0xB8222000, // 0052 GETNGBL R8 K16
- 0x8C201111, // 0053 GETMET R8 R8 K17
- 0x5C280600, // 0054 MOVE R10 R3
- 0x7C200400, // 0055 CALL R8 2
- 0x78220008, // 0056 JMPF R8 #0060
- 0x8C200128, // 0057 GETMET R8 R0 K40
- 0x5C280600, // 0058 MOVE R10 R3
- 0x582C000C, // 0059 LDCONST R11 K12
- 0x54320009, // 005A LDINT R12 10
- 0x08300C0C, // 005B MUL R12 R6 R12
- 0x0030020C, // 005C ADD R12 R1 R12
- 0x7C200800, // 005D CALL R8 4
- 0x5C1C1000, // 005E MOVE R7 R8
- 0x7002002E, // 005F JMP #008F
- 0x60200004, // 0060 GETGBL R8 G4
- 0x5C240600, // 0061 MOVE R9 R3
- 0x7C200200, // 0062 CALL R8 1
- 0x1C201129, // 0063 EQ R8 R8 K41
- 0x78220028, // 0064 JMPF R8 #008E
- 0x5C200C00, // 0065 MOVE R8 R6
- 0xB8260800, // 0066 GETNGBL R9 K4
- 0x8C241305, // 0067 GETMET R9 R9 K5
- 0x5C2C1000, // 0068 MOVE R11 R8
- 0x58300002, // 0069 LDCONST R12 K2
- 0x543600FE, // 006A LDINT R13 255
- 0x58380002, // 006B LDCONST R14 K2
- 0x543E000F, // 006C LDINT R15 16
- 0x3C3C060F, // 006D SHR R15 R3 R15
- 0x544200FE, // 006E LDINT R16 255
- 0x2C3C1E10, // 006F AND R15 R15 R16
- 0x7C240C00, // 0070 CALL R9 6
- 0xB82A0800, // 0071 GETNGBL R10 K4
- 0x8C281505, // 0072 GETMET R10 R10 K5
- 0x5C301000, // 0073 MOVE R12 R8
- 0x58340002, // 0074 LDCONST R13 K2
- 0x543A00FE, // 0075 LDINT R14 255
- 0x583C0002, // 0076 LDCONST R15 K2
- 0x54420007, // 0077 LDINT R16 8
- 0x3C400610, // 0078 SHR R16 R3 R16
- 0x544600FE, // 0079 LDINT R17 255
- 0x2C402011, // 007A AND R16 R16 R17
- 0x7C280C00, // 007B CALL R10 6
- 0xB82E0800, // 007C GETNGBL R11 K4
- 0x8C2C1705, // 007D GETMET R11 R11 K5
- 0x5C341000, // 007E MOVE R13 R8
- 0x58380002, // 007F LDCONST R14 K2
- 0x543E00FE, // 0080 LDINT R15 255
- 0x58400002, // 0081 LDCONST R16 K2
- 0x544600FE, // 0082 LDINT R17 255
- 0x2C440611, // 0083 AND R17 R3 R17
- 0x7C2C0C00, // 0084 CALL R11 6
- 0x5432000F, // 0085 LDINT R12 16
- 0x3830120C, // 0086 SHL R12 R9 R12
- 0x30323A0C, // 0087 OR R12 K29 R12
- 0x54360007, // 0088 LDINT R13 8
- 0x3834140D, // 0089 SHL R13 R10 R13
- 0x3030180D, // 008A OR R12 R12 R13
- 0x3030180B, // 008B OR R12 R12 R11
- 0x5C1C1800, // 008C MOVE R7 R12
- 0x70020000, // 008D JMP #008F
- 0x5C1C0600, // 008E MOVE R7 R3
- 0x88200117, // 008F GETMBR R8 R0 K23
- 0x98200A07, // 0090 SETIDX R8 R5 R7
- 0x00140B08, // 0091 ADD R5 R5 K8
- 0x7001FF7A, // 0092 JMP #000E
- 0x80000000, // 0093 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(class_GradientAnimation_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
+ ( &(const binstruction[31]) { /* code */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C08052A, // 0003 GETMET R2 R2 K42
+ 0x8C08051C, // 0003 GETMET R2 R2 K28
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
- 0x60080012, // 0006 GETGBL R2 G18
- 0x7C080000, // 0007 CALL R2 0
- 0x90022E02, // 0008 SETMBR R0 K23 R2
- 0x90020D02, // 0009 SETMBR R0 K6 K2
- 0x8808011A, // 000A GETMBR R2 R0 K26
- 0x8808051B, // 000B GETMBR R2 R2 K27
- 0x880C0117, // 000C GETMBR R3 R0 K23
- 0x8C0C071C, // 000D GETMET R3 R3 K28
- 0x5C140400, // 000E MOVE R5 R2
- 0x7C0C0400, // 000F CALL R3 2
- 0x580C0002, // 0010 LDCONST R3 K2
- 0x14100602, // 0011 LT R4 R3 R2
- 0x78120003, // 0012 JMPF R4 #0017
- 0x88100117, // 0013 GETMBR R4 R0 K23
- 0x9810071D, // 0014 SETIDX R4 R3 K29
- 0x000C0708, // 0015 ADD R3 R3 K8
- 0x7001FFF9, // 0016 JMP #0011
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _calculate_radial_position
-********************************************************************/
-be_local_closure(class_GradientAnimation__calculate_radial_position, /* name */
- be_nested_proto(
- 14, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_GradientAnimation, /* shared constants */
- be_str_weak(_calculate_radial_position),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xB80E0800, // 0000 GETNGBL R3 K4
- 0x8C0C0705, // 0001 GETMET R3 R3 K5
- 0x5C140200, // 0002 MOVE R5 R1
- 0x58180002, // 0003 LDCONST R6 K2
- 0x041C0508, // 0004 SUB R7 R2 K8
- 0x58200002, // 0005 LDCONST R8 K2
- 0x542600FE, // 0006 LDINT R9 255
- 0x7C0C0C00, // 0007 CALL R3 6
- 0x8810012B, // 0008 GETMBR R4 R0 K43
- 0x8814010A, // 0009 GETMBR R5 R0 K10
- 0x58180002, // 000A LDCONST R6 K2
- 0x281C0604, // 000B GE R7 R3 R4
- 0x781E0002, // 000C JMPF R7 #0010
- 0x041C0604, // 000D SUB R7 R3 R4
- 0x5C180E00, // 000E MOVE R6 R7
- 0x70020001, // 000F JMP #0012
- 0x041C0803, // 0010 SUB R7 R4 R3
- 0x5C180E00, // 0011 MOVE R6 R7
- 0xB81E0800, // 0012 GETNGBL R7 K4
- 0x8C1C0F05, // 0013 GETMET R7 R7 K5
- 0x5C240C00, // 0014 MOVE R9 R6
- 0x58280002, // 0015 LDCONST R10 K2
- 0x542E007F, // 0016 LDINT R11 128
- 0x58300002, // 0017 LDCONST R12 K2
- 0x5C340A00, // 0018 MOVE R13 R5
- 0x7C1C0C00, // 0019 CALL R7 6
- 0x5C180E00, // 001A MOVE R6 R7
- 0x541E00FE, // 001B LDINT R7 255
- 0x241C0C07, // 001C GT R7 R6 R7
- 0x781E0000, // 001D JMPF R7 #001F
- 0x541A00FE, // 001E LDINT R6 255
- 0x80040C00, // 001F RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: GradientAnimation
-********************************************************************/
-extern const bclass be_class_Animation;
-be_local_class(GradientAnimation,
- 2,
- &be_class_Animation,
- be_nested_map(11,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(current_colors, -1), be_const_var(0) },
- { be_const_key_weak(render, -1), be_const_closure(class_GradientAnimation_render_closure) },
- { be_const_key_weak(_calculate_linear_position, -1), be_const_closure(class_GradientAnimation__calculate_linear_position_closure) },
- { be_const_key_weak(tostring, -1), be_const_closure(class_GradientAnimation_tostring_closure) },
- { be_const_key_weak(update, 1), be_const_closure(class_GradientAnimation_update_closure) },
- { be_const_key_weak(on_param_changed, -1), be_const_closure(class_GradientAnimation_on_param_changed_closure) },
- { be_const_key_weak(phase_offset, -1), be_const_var(1) },
- { be_const_key_weak(_calculate_gradient, -1), be_const_closure(class_GradientAnimation__calculate_gradient_closure) },
- { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(spread, -1), be_const_bytes_instance(07000101FF0001FF00) },
- { be_const_key_weak(center_pos, -1), be_const_bytes_instance(07000001FF00018000) },
- { be_const_key_weak(gradient_type, 0), be_const_bytes_instance(07000000010000) },
- { be_const_key_weak(movement_speed, 5), be_const_bytes_instance(07000001FF000000) },
- { be_const_key_weak(direction, 3), be_const_bytes_instance(07000001FF000000) },
- { be_const_key_weak(color, -1), be_const_bytes_instance(2406) },
- })) ) } )) },
- { be_const_key_weak(init, -1), be_const_closure(class_GradientAnimation_init_closure) },
- { be_const_key_weak(_calculate_radial_position, -1), be_const_closure(class_GradientAnimation__calculate_radial_position_closure) },
- })),
- be_str_weak(GradientAnimation)
-);
-extern const bclass be_class_AnimationMath;
-// compact class 'AnimationMath' ktab size: 13, total: 31 (saved 144 bytes)
-static const bvalue be_ktab_class_AnimationMath[13] = {
- /* K0 */ be_const_class(be_class_AnimationMath),
- /* K1 */ be_nested_str_weak(math),
- /* K2 */ be_nested_str_weak(int),
- /* K3 */ be_const_int(0),
- /* K4 */ be_const_real_hex(0x437F0000),
- /* K5 */ be_nested_str_weak(sqrt),
- /* K6 */ be_nested_str_weak(max),
- /* K7 */ be_nested_str_weak(round),
- /* K8 */ be_nested_str_weak(abs),
- /* K9 */ be_nested_str_weak(tasmota),
- /* K10 */ be_nested_str_weak(scale_int),
- /* K11 */ be_nested_str_weak(sine_int),
- /* K12 */ be_nested_str_weak(min),
-};
-
-
-extern const bclass be_class_AnimationMath;
-
-/********************************************************************
-** Solidified function: sqrt
-********************************************************************/
-be_local_closure(class_AnimationMath_sqrt, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(sqrt),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x600C0004, // 0002 GETGBL R3 G4
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x1C0C0702, // 0005 EQ R3 R3 K2
- 0x780E000E, // 0006 JMPF R3 #0016
- 0x280C0103, // 0007 GE R3 R0 K3
- 0x780E000C, // 0008 JMPF R3 #0016
- 0x540E00FE, // 0009 LDINT R3 255
- 0x180C0003, // 000A LE R3 R0 R3
- 0x780E0009, // 000B JMPF R3 #0016
- 0x0C0C0104, // 000C DIV R3 R0 K4
- 0x60100009, // 000D GETGBL R4 G9
- 0x8C140505, // 000E GETMET R5 R2 K5
- 0x5C1C0600, // 000F MOVE R7 R3
- 0x7C140400, // 0010 CALL R5 2
- 0x541A00FE, // 0011 LDINT R6 255
- 0x08140A06, // 0012 MUL R5 R5 R6
- 0x7C100200, // 0013 CALL R4 1
- 0x80040800, // 0014 RET 1 R4
- 0x70020003, // 0015 JMP #001A
- 0x8C0C0505, // 0016 GETMET R3 R2 K5
- 0x5C140000, // 0017 MOVE R5 R0
- 0x7C0C0400, // 0018 CALL R3 2
- 0x80040600, // 0019 RET 1 R3
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: max
-********************************************************************/
-be_local_closure(class_AnimationMath_max, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 13, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(max),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x600C0016, // 0002 GETGBL R3 G22
- 0x88100506, // 0003 GETMBR R4 R2 K6
- 0x5C140000, // 0004 MOVE R5 R0
- 0x7C0C0400, // 0005 CALL R3 2
- 0x80040600, // 0006 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: round
-********************************************************************/
-be_local_closure(class_AnimationMath_round, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(round),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x600C0009, // 0002 GETGBL R3 G9
- 0x8C100507, // 0003 GETMET R4 R2 K7
- 0x5C180000, // 0004 MOVE R6 R0
- 0x7C100400, // 0005 CALL R4 2
- 0x7C0C0200, // 0006 CALL R3 1
- 0x80040600, // 0007 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: abs
-********************************************************************/
-be_local_closure(class_AnimationMath_abs, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(abs),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x8C0C0508, // 0002 GETMET R3 R2 K8
- 0x5C140000, // 0003 MOVE R5 R0
- 0x7C0C0400, // 0004 CALL R3 2
- 0x80040600, // 0005 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: cos
-********************************************************************/
-be_local_closure(class_AnimationMath_cos, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(cos),
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xB80A1200, // 0001 GETNGBL R2 K9
- 0x8C08050A, // 0002 GETMET R2 R2 K10
- 0x5C100000, // 0003 MOVE R4 R0
- 0x58140003, // 0004 LDCONST R5 K3
- 0x541A00FE, // 0005 LDINT R6 255
- 0x581C0003, // 0006 LDCONST R7 K3
- 0x54227FFE, // 0007 LDINT R8 32767
- 0x7C080C00, // 0008 CALL R2 6
- 0xB80E1200, // 0009 GETNGBL R3 K9
- 0x8C0C070B, // 000A GETMET R3 R3 K11
- 0x54161FFF, // 000B LDINT R5 8192
- 0x04140405, // 000C SUB R5 R2 R5
- 0x7C0C0400, // 000D CALL R3 2
- 0xB8121200, // 000E GETNGBL R4 K9
- 0x8C10090A, // 000F GETMET R4 R4 K10
- 0x5C180600, // 0010 MOVE R6 R3
- 0x541DEFFF, // 0011 LDINT R7 -4096
- 0x54220FFF, // 0012 LDINT R8 4096
- 0x5425FF00, // 0013 LDINT R9 -255
- 0x542A00FE, // 0014 LDINT R10 255
- 0x7C100C00, // 0015 CALL R4 6
- 0x80040800, // 0016 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sin
-********************************************************************/
-be_local_closure(class_AnimationMath_sin, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(sin),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xB80A1200, // 0001 GETNGBL R2 K9
- 0x8C08050A, // 0002 GETMET R2 R2 K10
- 0x5C100000, // 0003 MOVE R4 R0
- 0x58140003, // 0004 LDCONST R5 K3
- 0x541A00FE, // 0005 LDINT R6 255
- 0x581C0003, // 0006 LDCONST R7 K3
- 0x54227FFE, // 0007 LDINT R8 32767
- 0x7C080C00, // 0008 CALL R2 6
- 0xB80E1200, // 0009 GETNGBL R3 K9
- 0x8C0C070B, // 000A GETMET R3 R3 K11
- 0x5C140400, // 000B MOVE R5 R2
- 0x7C0C0400, // 000C CALL R3 2
- 0xB8121200, // 000D GETNGBL R4 K9
- 0x8C10090A, // 000E GETMET R4 R4 K10
- 0x5C180600, // 000F MOVE R6 R3
- 0x541DEFFF, // 0010 LDINT R7 -4096
- 0x54220FFF, // 0011 LDINT R8 4096
- 0x5425FF00, // 0012 LDINT R9 -255
- 0x542A00FE, // 0013 LDINT R10 255
- 0x7C100C00, // 0014 CALL R4 6
- 0x80040800, // 0015 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: scale
-********************************************************************/
-be_local_closure(class_AnimationMath_scale, /* name */
- be_nested_proto(
- 13, /* nstack */
- 5, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(scale),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x58140000, // 0000 LDCONST R5 K0
- 0xB81A1200, // 0001 GETNGBL R6 K9
- 0x8C180D0A, // 0002 GETMET R6 R6 K10
- 0x5C200000, // 0003 MOVE R8 R0
- 0x5C240200, // 0004 MOVE R9 R1
- 0x5C280400, // 0005 MOVE R10 R2
- 0x5C2C0600, // 0006 MOVE R11 R3
- 0x5C300800, // 0007 MOVE R12 R4
- 0x7C180C00, // 0008 CALL R6 6
- 0x80040C00, // 0009 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: min
-********************************************************************/
-be_local_closure(class_AnimationMath_min, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 13, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_AnimationMath, /* shared constants */
- be_str_weak(min),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x600C0016, // 0002 GETGBL R3 G22
- 0x8810050C, // 0003 GETMBR R4 R2 K12
- 0x5C140000, // 0004 MOVE R5 R0
- 0x7C0C0400, // 0005 CALL R3 2
- 0x80040600, // 0006 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: AnimationMath
-********************************************************************/
-be_local_class(AnimationMath,
- 0,
- NULL,
- be_nested_map(8,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(min, -1), be_const_static_closure(class_AnimationMath_min_closure) },
- { be_const_key_weak(max, 2), be_const_static_closure(class_AnimationMath_max_closure) },
- { be_const_key_weak(scale, -1), be_const_static_closure(class_AnimationMath_scale_closure) },
- { be_const_key_weak(round, 6), be_const_static_closure(class_AnimationMath_round_closure) },
- { be_const_key_weak(cos, -1), be_const_static_closure(class_AnimationMath_cos_closure) },
- { be_const_key_weak(sin, -1), be_const_static_closure(class_AnimationMath_sin_closure) },
- { be_const_key_weak(abs, -1), be_const_static_closure(class_AnimationMath_abs_closure) },
- { be_const_key_weak(sqrt, 0), be_const_static_closure(class_AnimationMath_sqrt_closure) },
- })),
- be_str_weak(AnimationMath)
-);
-
-/********************************************************************
-** Solidified function: pulsating_color_provider
-********************************************************************/
-be_local_closure(pulsating_color_provider, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(animation),
- /* K1 */ be_nested_str_weak(breathe_color),
- /* K2 */ be_nested_str_weak(curve_factor),
- /* K3 */ be_const_int(1),
- /* K4 */ be_nested_str_weak(duration),
- }),
- be_str_weak(pulsating_color_provider),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x90060503, // 0004 SETMBR R1 K2 K3
- 0x540A03E7, // 0005 LDINT R2 1000
- 0x90060802, // 0006 SETMBR R1 K4 R2
- 0x80040200, // 0007 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-extern const bclass be_class_ColorProvider;
-// compact class 'ColorProvider' ktab size: 10, total: 11 (saved 8 bytes)
-static const bvalue be_ktab_class_ColorProvider[10] = {
- /* K0 */ be_nested_str_weak(produce_value),
- /* K1 */ be_nested_str_weak(color),
- /* K2 */ be_nested_str_weak(_color_lut),
- /* K3 */ be_const_class(be_class_ColorProvider),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(scale_uint),
- /* K6 */ be_const_int(0),
- /* K7 */ be_const_int(-16777216),
- /* K8 */ be_nested_str_weak(init),
- /* K9 */ be_nested_str_weak(_lut_dirty),
-};
-
-
-extern const bclass be_class_ColorProvider;
-
-/********************************************************************
-** Solidified function: get_color_for_value
-********************************************************************/
-be_local_closure(class_ColorProvider_get_color_for_value, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorProvider, /* shared constants */
- be_str_weak(get_color_for_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C0C0100, // 0000 GETMET R3 R0 K0
- 0x58140001, // 0001 LDCONST R5 K1
- 0x5C180400, // 0002 MOVE R6 R2
- 0x7C0C0600, // 0003 CALL R3 3
- 0x80040600, // 0004 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_lut
-********************************************************************/
-be_local_closure(class_ColorProvider_get_lut, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorProvider, /* shared constants */
- be_str_weak(get_lut),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040102, // 0000 GETMBR R1 R0 K2
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: apply_brightness
-********************************************************************/
-be_local_closure(class_ColorProvider_apply_brightness, /* name */
- be_nested_proto(
- 13, /* nstack */
- 2, /* argc */
- 12, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorProvider, /* shared constants */
- be_str_weak(apply_brightness),
- &be_const_str_solidified,
- ( &(const binstruction[51]) { /* code */
- 0x58080003, // 0000 LDCONST R2 K3
- 0x540E00FE, // 0001 LDINT R3 255
- 0x1C0C0203, // 0002 EQ R3 R1 R3
- 0x780E0000, // 0003 JMPF R3 #0005
- 0x80040000, // 0004 RET 1 R0
- 0x540E000F, // 0005 LDINT R3 16
- 0x3C0C0003, // 0006 SHR R3 R0 R3
- 0x541200FE, // 0007 LDINT R4 255
- 0x2C0C0604, // 0008 AND R3 R3 R4
- 0x54120007, // 0009 LDINT R4 8
- 0x3C100004, // 000A SHR R4 R0 R4
- 0x541600FE, // 000B LDINT R5 255
- 0x2C100805, // 000C AND R4 R4 R5
- 0x541600FE, // 000D LDINT R5 255
- 0x2C140005, // 000E AND R5 R0 R5
- 0xB81A0800, // 000F GETNGBL R6 K4
- 0x8C180D05, // 0010 GETMET R6 R6 K5
- 0x5C200600, // 0011 MOVE R8 R3
- 0x58240006, // 0012 LDCONST R9 K6
- 0x542A00FE, // 0013 LDINT R10 255
- 0x582C0006, // 0014 LDCONST R11 K6
- 0x5C300200, // 0015 MOVE R12 R1
- 0x7C180C00, // 0016 CALL R6 6
- 0x5C0C0C00, // 0017 MOVE R3 R6
- 0xB81A0800, // 0018 GETNGBL R6 K4
- 0x8C180D05, // 0019 GETMET R6 R6 K5
- 0x5C200800, // 001A MOVE R8 R4
- 0x58240006, // 001B LDCONST R9 K6
- 0x542A00FE, // 001C LDINT R10 255
- 0x582C0006, // 001D LDCONST R11 K6
- 0x5C300200, // 001E MOVE R12 R1
- 0x7C180C00, // 001F CALL R6 6
- 0x5C100C00, // 0020 MOVE R4 R6
- 0xB81A0800, // 0021 GETNGBL R6 K4
- 0x8C180D05, // 0022 GETMET R6 R6 K5
- 0x5C200A00, // 0023 MOVE R8 R5
- 0x58240006, // 0024 LDCONST R9 K6
- 0x542A00FE, // 0025 LDINT R10 255
- 0x582C0006, // 0026 LDCONST R11 K6
- 0x5C300200, // 0027 MOVE R12 R1
- 0x7C180C00, // 0028 CALL R6 6
- 0x5C140C00, // 0029 MOVE R5 R6
- 0x2C180107, // 002A AND R6 R0 K7
- 0x541E000F, // 002B LDINT R7 16
- 0x381C0607, // 002C SHL R7 R3 R7
- 0x30180C07, // 002D OR R6 R6 R7
- 0x541E0007, // 002E LDINT R7 8
- 0x381C0807, // 002F SHL R7 R4 R7
- 0x30180C07, // 0030 OR R6 R6 R7
- 0x30180C05, // 0031 OR R6 R6 R5
- 0x80040C00, // 0032 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: produce_value
-********************************************************************/
-be_local_closure(class_ColorProvider_produce_value, /* name */
- be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_ColorProvider, /* shared constants */
- be_str_weak(produce_value),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x540DFFFE, // 0000 LDINT R3 -1
- 0x80040600, // 0001 RET 1 R3
+ 0x88080113, // 0006 GETMBR R2 R0 K19
+ 0x240C0503, // 0007 GT R3 R2 K3
+ 0x780E0011, // 0008 JMPF R3 #001B
+ 0x880C011D, // 0009 GETMBR R3 R0 K29
+ 0x040C0203, // 000A SUB R3 R1 R3
+ 0xB8120800, // 000B GETNGBL R4 K4
+ 0x8C100905, // 000C GETMET R4 R4 K5
+ 0x5C180400, // 000D MOVE R6 R2
+ 0x581C0003, // 000E LDCONST R7 K3
+ 0x542200FE, // 000F LDINT R8 255
+ 0x58240003, // 0010 LDCONST R9 K3
+ 0x542A0009, // 0011 LDINT R10 10
+ 0x7C100C00, // 0012 CALL R4 6
+ 0x24140903, // 0013 GT R5 R4 K3
+ 0x78160005, // 0014 JMPF R5 #001B
+ 0x08140604, // 0015 MUL R5 R3 R4
+ 0x541A03E7, // 0016 LDINT R6 1000
+ 0x0C140A06, // 0017 DIV R5 R5 R6
+ 0x541A00FF, // 0018 LDINT R6 256
+ 0x10140A06, // 0019 MOD R5 R5 R6
+ 0x90023C05, // 001A SETMBR R0 K30 R5
+ 0x8C0C011F, // 001B GETMET R3 R0 K31
+ 0x5C140200, // 001C MOVE R5 R1
+ 0x7C0C0400, // 001D CALL R3 2
+ 0x80000000, // 001E RET 0
})
)
);
@@ -18920,7 +17388,7 @@ be_local_closure(class_ColorProvider_produce_value, /* name */
/********************************************************************
** Solidified function: init
********************************************************************/
-be_local_closure(class_ColorProvider_init, /* name */
+be_local_closure(class_WaveAnimation_init, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -18930,21 +17398,26 @@ be_local_closure(class_ColorProvider_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- &be_ktab_class_ColorProvider, /* shared constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
+ ( &(const binstruction[16]) { /* code */
0x60080003, // 0000 GETGBL R2 G3
0x5C0C0000, // 0001 MOVE R3 R0
0x7C080200, // 0002 CALL R2 1
- 0x8C080508, // 0003 GETMET R2 R2 K8
+ 0x8C080520, // 0003 GETMET R2 R2 K32
0x5C100200, // 0004 MOVE R4 R1
0x7C080400, // 0005 CALL R2 2
- 0x4C080000, // 0006 LDNIL R2
- 0x90020402, // 0007 SETMBR R0 K2 R2
- 0x50080200, // 0008 LDBOOL R2 1 0
- 0x90021202, // 0009 SETMBR R0 K9 R2
- 0x80000000, // 000A RET 0
+ 0x60080012, // 0006 GETGBL R2 G18
+ 0x7C080000, // 0007 CALL R2 0
+ 0x90022E02, // 0008 SETMBR R0 K23 R2
+ 0x90023D03, // 0009 SETMBR R0 K30 K3
+ 0x60080012, // 000A GETGBL R2 G18
+ 0x7C080000, // 000B CALL R2 0
+ 0x90020002, // 000C SETMBR R0 K0 R2
+ 0x8C08011B, // 000D GETMET R2 R0 K27
+ 0x7C080200, // 000E CALL R2 1
+ 0x80000000, // 000F RET 0
})
)
);
@@ -18952,29 +17425,1537 @@ be_local_closure(class_ColorProvider_init, /* name */
/********************************************************************
-** Solidified class: ColorProvider
+** Solidified function: _calculate_wave
********************************************************************/
-extern const bclass be_class_ValueProvider;
-be_local_class(ColorProvider,
- 2,
- &be_class_ValueProvider,
- be_nested_map(9,
+be_local_closure(class_WaveAnimation__calculate_wave, /* name */
+ be_nested_proto(
+ 27, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_WaveAnimation, /* shared constants */
+ be_str_weak(_calculate_wave),
+ &be_const_str_solidified,
+ ( &(const binstruction[168]) { /* code */
+ 0x88080121, // 0000 GETMBR R2 R0 K33
+ 0x88080522, // 0001 GETMBR R2 R2 K34
+ 0x880C0112, // 0002 GETMBR R3 R0 K18
+ 0x88100123, // 0003 GETMBR R4 R0 K35
+ 0x88140124, // 0004 GETMBR R5 R0 K36
+ 0x88180125, // 0005 GETMBR R6 R0 K37
+ 0x881C0126, // 0006 GETMBR R7 R0 K38
+ 0x8820010D, // 0007 GETMBR R8 R0 K13
+ 0x88240117, // 0008 GETMBR R9 R0 K23
+ 0x8C241318, // 0009 GETMET R9 R9 K24
+ 0x7C240200, // 000A CALL R9 1
+ 0x20241202, // 000B NE R9 R9 R2
+ 0x78260003, // 000C JMPF R9 #0011
+ 0x88240117, // 000D GETMBR R9 R0 K23
+ 0x8C241301, // 000E GETMET R9 R9 K1
+ 0x5C2C0400, // 000F MOVE R11 R2
+ 0x7C240400, // 0010 CALL R9 2
+ 0x58240003, // 0011 LDCONST R9 K3
+ 0x14281202, // 0012 LT R10 R9 R2
+ 0x782A0092, // 0013 JMPF R10 #00A7
+ 0xB82A0800, // 0014 GETNGBL R10 K4
+ 0x8C281505, // 0015 GETMET R10 R10 K5
+ 0x5C301200, // 0016 MOVE R12 R9
+ 0x58340003, // 0017 LDCONST R13 K3
+ 0x04380506, // 0018 SUB R14 R2 K6
+ 0x583C0003, // 0019 LDCONST R15 K3
+ 0x544200FE, // 001A LDINT R16 255
+ 0x7C280C00, // 001B CALL R10 6
+ 0x082C1403, // 001C MUL R11 R10 R3
+ 0x5432001F, // 001D LDINT R12 32
+ 0x0C2C160C, // 001E DIV R11 R11 R12
+ 0x002C1604, // 001F ADD R11 R11 R4
+ 0x8830011E, // 0020 GETMBR R12 R0 K30
+ 0x002C160C, // 0021 ADD R11 R11 R12
+ 0x543200FE, // 0022 LDINT R12 255
+ 0x2C2C160C, // 0023 AND R11 R11 R12
+ 0x88300100, // 0024 GETMBR R12 R0 K0
+ 0x9430180B, // 0025 GETIDX R12 R12 R11
+ 0xB8360800, // 0026 GETNGBL R13 K4
+ 0x8C341B05, // 0027 GETMET R13 R13 K5
+ 0x5C3C0A00, // 0028 MOVE R15 R5
+ 0x58400003, // 0029 LDCONST R16 K3
+ 0x544600FE, // 002A LDINT R17 255
+ 0x58480003, // 002B LDCONST R18 K3
+ 0x544E007F, // 002C LDINT R19 128
+ 0x7C340C00, // 002D CALL R13 6
+ 0x58380003, // 002E LDCONST R14 K3
+ 0x543E007F, // 002F LDINT R15 128
+ 0x283C180F, // 0030 GE R15 R12 R15
+ 0x783E000D, // 0031 JMPF R15 #0040
+ 0x543E007F, // 0032 LDINT R15 128
+ 0x043C180F, // 0033 SUB R15 R12 R15
+ 0xB8420800, // 0034 GETNGBL R16 K4
+ 0x8C402105, // 0035 GETMET R16 R16 K5
+ 0x5C481E00, // 0036 MOVE R18 R15
+ 0x584C0003, // 0037 LDCONST R19 K3
+ 0x5452007E, // 0038 LDINT R20 127
+ 0x58540003, // 0039 LDCONST R21 K3
+ 0x5C581A00, // 003A MOVE R22 R13
+ 0x7C400C00, // 003B CALL R16 6
+ 0x5C3C2000, // 003C MOVE R15 R16
+ 0x00400C0F, // 003D ADD R16 R6 R15
+ 0x5C382000, // 003E MOVE R14 R16
+ 0x7002000C, // 003F JMP #004D
+ 0x543E007F, // 0040 LDINT R15 128
+ 0x043C1E0C, // 0041 SUB R15 R15 R12
+ 0xB8420800, // 0042 GETNGBL R16 K4
+ 0x8C402105, // 0043 GETMET R16 R16 K5
+ 0x5C481E00, // 0044 MOVE R18 R15
+ 0x584C0003, // 0045 LDCONST R19 K3
+ 0x5452007F, // 0046 LDINT R20 128
+ 0x58540003, // 0047 LDCONST R21 K3
+ 0x5C581A00, // 0048 MOVE R22 R13
+ 0x7C400C00, // 0049 CALL R16 6
+ 0x5C3C2000, // 004A MOVE R15 R16
+ 0x04400C0F, // 004B SUB R16 R6 R15
+ 0x5C382000, // 004C MOVE R14 R16
+ 0x543E00FE, // 004D LDINT R15 255
+ 0x243C1C0F, // 004E GT R15 R14 R15
+ 0x783E0001, // 004F JMPF R15 #0052
+ 0x543A00FE, // 0050 LDINT R14 255
+ 0x70020002, // 0051 JMP #0055
+ 0x143C1D03, // 0052 LT R15 R14 K3
+ 0x783E0000, // 0053 JMPF R15 #0055
+ 0x58380003, // 0054 LDCONST R14 K3
+ 0x5C3C0E00, // 0055 MOVE R15 R7
+ 0x54420009, // 0056 LDINT R16 10
+ 0x24401C10, // 0057 GT R16 R14 R16
+ 0x78420049, // 0058 JMPF R16 #00A3
+ 0xB8421C00, // 0059 GETNGBL R16 K14
+ 0x8C402127, // 005A GETMET R16 R16 K39
+ 0x5C481000, // 005B MOVE R18 R8
+ 0x7C400400, // 005C CALL R16 2
+ 0x78420009, // 005D JMPF R16 #0068
+ 0x88401128, // 005E GETMBR R16 R8 K40
+ 0x4C440000, // 005F LDNIL R17
+ 0x20402011, // 0060 NE R16 R16 R17
+ 0x78420005, // 0061 JMPF R16 #0068
+ 0x8C401128, // 0062 GETMET R16 R8 K40
+ 0x5C481C00, // 0063 MOVE R18 R14
+ 0x584C0003, // 0064 LDCONST R19 K3
+ 0x7C400600, // 0065 CALL R16 3
+ 0x5C3C2000, // 0066 MOVE R15 R16
+ 0x7002003A, // 0067 JMP #00A3
+ 0x8C400129, // 0068 GETMET R16 R0 K41
+ 0x5C481000, // 0069 MOVE R18 R8
+ 0x584C000D, // 006A LDCONST R19 K13
+ 0x54520009, // 006B LDINT R20 10
+ 0x08501C14, // 006C MUL R20 R14 R20
+ 0x00500214, // 006D ADD R20 R1 R20
+ 0x7C400800, // 006E CALL R16 4
+ 0x5C3C2000, // 006F MOVE R15 R16
+ 0x54420017, // 0070 LDINT R16 24
+ 0x3C401E10, // 0071 SHR R16 R15 R16
+ 0x544600FE, // 0072 LDINT R17 255
+ 0x2C402011, // 0073 AND R16 R16 R17
+ 0x5446000F, // 0074 LDINT R17 16
+ 0x3C441E11, // 0075 SHR R17 R15 R17
+ 0x544A00FE, // 0076 LDINT R18 255
+ 0x2C442212, // 0077 AND R17 R17 R18
+ 0x544A0007, // 0078 LDINT R18 8
+ 0x3C481E12, // 0079 SHR R18 R15 R18
+ 0x544E00FE, // 007A LDINT R19 255
+ 0x2C482413, // 007B AND R18 R18 R19
+ 0x544E00FE, // 007C LDINT R19 255
+ 0x2C4C1E13, // 007D AND R19 R15 R19
+ 0xB8520800, // 007E GETNGBL R20 K4
+ 0x8C502905, // 007F GETMET R20 R20 K5
+ 0x5C581C00, // 0080 MOVE R22 R14
+ 0x585C0003, // 0081 LDCONST R23 K3
+ 0x546200FE, // 0082 LDINT R24 255
+ 0x58640003, // 0083 LDCONST R25 K3
+ 0x5C682200, // 0084 MOVE R26 R17
+ 0x7C500C00, // 0085 CALL R20 6
+ 0x5C442800, // 0086 MOVE R17 R20
+ 0xB8520800, // 0087 GETNGBL R20 K4
+ 0x8C502905, // 0088 GETMET R20 R20 K5
+ 0x5C581C00, // 0089 MOVE R22 R14
+ 0x585C0003, // 008A LDCONST R23 K3
+ 0x546200FE, // 008B LDINT R24 255
+ 0x58640003, // 008C LDCONST R25 K3
+ 0x5C682400, // 008D MOVE R26 R18
+ 0x7C500C00, // 008E CALL R20 6
+ 0x5C482800, // 008F MOVE R18 R20
+ 0xB8520800, // 0090 GETNGBL R20 K4
+ 0x8C502905, // 0091 GETMET R20 R20 K5
+ 0x5C581C00, // 0092 MOVE R22 R14
+ 0x585C0003, // 0093 LDCONST R23 K3
+ 0x546200FE, // 0094 LDINT R24 255
+ 0x58640003, // 0095 LDCONST R25 K3
+ 0x5C682600, // 0096 MOVE R26 R19
+ 0x7C500C00, // 0097 CALL R20 6
+ 0x5C4C2800, // 0098 MOVE R19 R20
+ 0x54520017, // 0099 LDINT R20 24
+ 0x38502014, // 009A SHL R20 R16 R20
+ 0x5456000F, // 009B LDINT R21 16
+ 0x38542215, // 009C SHL R21 R17 R21
+ 0x30502815, // 009D OR R20 R20 R21
+ 0x54560007, // 009E LDINT R21 8
+ 0x38542415, // 009F SHL R21 R18 R21
+ 0x30502815, // 00A0 OR R20 R20 R21
+ 0x30502813, // 00A1 OR R20 R20 R19
+ 0x5C3C2800, // 00A2 MOVE R15 R20
+ 0x88400117, // 00A3 GETMBR R16 R0 K23
+ 0x9840120F, // 00A4 SETIDX R16 R9 R15
+ 0x00241306, // 00A5 ADD R9 R9 K6
+ 0x7001FF6A, // 00A6 JMP #0012
+ 0x80000000, // 00A7 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: WaveAnimation
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(WaveAnimation,
+ 3,
+ &be_class_Animation,
+ be_nested_map(11,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(LUT_FACTOR, 8), be_const_int(1) },
- { be_const_key_weak(get_lut, 7), be_const_closure(class_ColorProvider_get_lut_closure) },
- { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_ColorProvider_get_color_for_value_closure) },
- { be_const_key_weak(produce_value, -1), be_const_closure(class_ColorProvider_produce_value_closure) },
- { be_const_key_weak(_lut_dirty, -1), be_const_var(1) },
+ { be_const_key_weak(current_colors, -1), be_const_var(0) },
+ { be_const_key_weak(update, -1), be_const_closure(class_WaveAnimation_update_closure) },
+ { be_const_key_weak(wave_table, -1), be_const_var(2) },
+ { be_const_key_weak(tostring, -1), be_const_closure(class_WaveAnimation_tostring_closure) },
+ { be_const_key_weak(render, 7), be_const_closure(class_WaveAnimation_render_closure) },
+ { be_const_key_weak(on_param_changed, -1), be_const_closure(class_WaveAnimation_on_param_changed_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(class_WaveAnimation_init_closure) },
+ { be_const_key_weak(time_offset, 1), be_const_var(1) },
{ be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(1,
+ be_const_map( * be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) },
+ { be_const_key_weak(phase, 7), be_const_bytes_instance(07000001FF000000) },
+ { be_const_key_weak(center_level, 3), be_const_bytes_instance(07000001FF00018000) },
+ { be_const_key_weak(amplitude, -1), be_const_bytes_instance(07000001FF00018000) },
+ { be_const_key_weak(frequency, 5), be_const_bytes_instance(07000001FF000020) },
+ { be_const_key_weak(wave_speed, -1), be_const_bytes_instance(07000001FF000032) },
+ { be_const_key_weak(wave_type, -1), be_const_bytes_instance(07000000030000) },
+ { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) },
+ { be_const_key_weak(color, -1), be_const_bytes_instance(04020000FFFF) },
})) ) } )) },
- { be_const_key_weak(init, 5), be_const_closure(class_ColorProvider_init_closure) },
- { be_const_key_weak(_color_lut, -1), be_const_var(0) },
- { be_const_key_weak(apply_brightness, -1), be_const_static_closure(class_ColorProvider_apply_brightness_closure) },
+ { be_const_key_weak(_init_wave_table, 6), be_const_closure(class_WaveAnimation__init_wave_table_closure) },
+ { be_const_key_weak(_calculate_wave, -1), be_const_closure(class_WaveAnimation__calculate_wave_closure) },
})),
- be_str_weak(ColorProvider)
+ be_str_weak(WaveAnimation)
+);
+
+/********************************************************************
+** Solidified function: twinkle_intense
+********************************************************************/
+be_local_closure(twinkle_intense, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(twinkle_animation),
+ /* K2 */ be_nested_str_weak(color),
+ /* K3 */ be_nested_str_weak(density),
+ /* K4 */ be_nested_str_weak(twinkle_speed),
+ /* K5 */ be_nested_str_weak(fade_speed),
+ /* K6 */ be_nested_str_weak(min_brightness),
+ /* K7 */ be_nested_str_weak(max_brightness),
+ }),
+ be_str_weak(twinkle_intense),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x5408FFFF, // 0004 LDINT R2 -65536
+ 0x90060402, // 0005 SETMBR R1 K2 R2
+ 0x540A00C7, // 0006 LDINT R2 200
+ 0x90060602, // 0007 SETMBR R1 K3 R2
+ 0x540A000B, // 0008 LDINT R2 12
+ 0x90060802, // 0009 SETMBR R1 K4 R2
+ 0x540A00DB, // 000A LDINT R2 220
+ 0x90060A02, // 000B SETMBR R1 K5 R2
+ 0x540A003F, // 000C LDINT R2 64
+ 0x90060C02, // 000D SETMBR R1 K6 R2
+ 0x540A00FE, // 000E LDINT R2 255
+ 0x90060E02, // 000F SETMBR R1 K7 R2
+ 0x80040200, // 0010 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_user_function
+********************************************************************/
+be_local_closure(get_user_function, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(_user_functions),
+ /* K2 */ be_nested_str_weak(find),
+ }),
+ be_str_weak(get_user_function),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x8C040302, // 0002 GETMET R1 R1 K2
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+// compact class 'EngineProxy' ktab size: 41, total: 114 (saved 584 bytes)
+static const bvalue be_ktab_class_EngineProxy[41] = {
+ /* K0 */ be_nested_str_weak(animations),
+ /* K1 */ be_nested_str_weak(animation),
+ /* K2 */ be_nested_str_weak(push),
+ /* K3 */ be_nested_str_weak(stop_iteration),
+ /* K4 */ be_nested_str_weak(time_ms),
+ /* K5 */ be_nested_str_weak(strip_length),
+ /* K6 */ be_nested_str_weak(engine),
+ /* K7 */ be_nested_str_weak(update),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(value_providers),
+ /* K10 */ be_nested_str_weak(is_running),
+ /* K11 */ be_nested_str_weak(start_time),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(sequences),
+ /* K14 */ be_nested_str_weak(_X25s_X28animations_X3D_X25s_X2C_X20sequences_X3D_X25s_X2C_X20value_providers_X3D_X25s_X2C_X20running_X3D_X25s_X29),
+ /* K15 */ be_nested_str_weak(find),
+ /* K16 */ be_nested_str_weak(remove),
+ /* K17 */ be_nested_str_weak(iteration_stack),
+ /* K18 */ be_nested_str_weak(priority),
+ /* K19 */ be_nested_str_weak(temp_buffer),
+ /* K20 */ be_nested_str_weak(clear),
+ /* K21 */ be_nested_str_weak(render),
+ /* K22 */ be_nested_str_weak(post_render),
+ /* K23 */ be_nested_str_weak(blend_pixels),
+ /* K24 */ be_nested_str_weak(pixels),
+ /* K25 */ be_nested_str_weak(sequence_manager),
+ /* K26 */ be_nested_str_weak(_add_sequence_manager),
+ /* K27 */ be_nested_str_weak(value_provider),
+ /* K28 */ be_nested_str_weak(_add_value_provider),
+ /* K29 */ be_nested_str_weak(_add_animation),
+ /* K30 */ be_nested_str_weak(type_error),
+ /* K31 */ be_nested_str_weak(only_X20Animation_X2C_X20SequenceManager_X2C_X20or_X20ValueProvider),
+ /* K32 */ be_nested_str_weak(stop),
+ /* K33 */ be_nested_str_weak(init),
+ /* K34 */ be_nested_str_weak(setup_template),
+ /* K35 */ be_nested_str_weak(_sort_animations_by_priority),
+ /* K36 */ be_nested_str_weak(start),
+ /* K37 */ be_nested_str_weak(pop),
+ /* K38 */ be_nested_str_weak(_remove_sequence_manager),
+ /* K39 */ be_nested_str_weak(_remove_value_provider),
+ /* K40 */ be_nested_str_weak(_remove_animation),
+};
+
+
+extern const bclass be_class_EngineProxy;
+
+/********************************************************************
+** Solidified function: get_animations
+********************************************************************/
+be_local_closure(class_EngineProxy_get_animations, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(get_animations),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x60080010, // 0002 GETGBL R2 G16
+ 0x880C0100, // 0003 GETMBR R3 R0 K0
+ 0x7C080200, // 0004 CALL R2 1
+ 0xA802000B, // 0005 EXBLK 0 #0012
+ 0x5C0C0400, // 0006 MOVE R3 R2
+ 0x7C0C0000, // 0007 CALL R3 0
+ 0x6010000F, // 0008 GETGBL R4 G15
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0xB81A0200, // 000A GETNGBL R6 K1
+ 0x88180D01, // 000B GETMBR R6 R6 K1
+ 0x7C100400, // 000C CALL R4 2
+ 0x78120002, // 000D JMPF R4 #0011
+ 0x8C100302, // 000E GETMET R4 R1 K2
+ 0x5C180600, // 000F MOVE R6 R3
+ 0x7C100400, // 0010 CALL R4 2
+ 0x7001FFF3, // 0011 JMP #0006
+ 0x58080003, // 0012 LDCONST R2 K3
+ 0xAC080200, // 0013 CATCH R2 1 0
+ 0xB0080000, // 0014 RAISE 2 R0 R0
+ 0x80040200, // 0015 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(class_EngineProxy_update, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[73]) { /* code */
+ 0x90020801, // 0000 SETMBR R0 K4 R1
+ 0x88080106, // 0001 GETMBR R2 R0 K6
+ 0x88080505, // 0002 GETMBR R2 R2 K5
+ 0x90020A02, // 0003 SETMBR R0 K5 R2
+ 0x60080003, // 0004 GETGBL R2 G3
+ 0x5C0C0000, // 0005 MOVE R3 R0
+ 0x7C080200, // 0006 CALL R2 1
+ 0x8C080507, // 0007 GETMET R2 R2 K7
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x58080008, // 000A LDCONST R2 K8
+ 0x600C000C, // 000B GETGBL R3 G12
+ 0x88100109, // 000C GETMBR R4 R0 K9
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x14100403, // 000E LT R4 R2 R3
+ 0x7812000D, // 000F JMPF R4 #001E
+ 0x88100109, // 0010 GETMBR R4 R0 K9
+ 0x94100802, // 0011 GETIDX R4 R4 R2
+ 0x8814090A, // 0012 GETMBR R5 R4 K10
+ 0x78160007, // 0013 JMPF R5 #001C
+ 0x8814090B, // 0014 GETMBR R5 R4 K11
+ 0x4C180000, // 0015 LDNIL R6
+ 0x1C140A06, // 0016 EQ R5 R5 R6
+ 0x78160000, // 0017 JMPF R5 #0019
+ 0x90121601, // 0018 SETMBR R4 K11 R1
+ 0x8C140907, // 0019 GETMET R5 R4 K7
+ 0x5C1C0200, // 001A MOVE R7 R1
+ 0x7C140400, // 001B CALL R5 2
+ 0x0008050C, // 001C ADD R2 R2 K12
+ 0x7001FFEF, // 001D JMP #000E
+ 0x58080008, // 001E LDCONST R2 K8
+ 0x6010000C, // 001F GETGBL R4 G12
+ 0x8814010D, // 0020 GETMBR R5 R0 K13
+ 0x7C100200, // 0021 CALL R4 1
+ 0x5C0C0800, // 0022 MOVE R3 R4
+ 0x14100403, // 0023 LT R4 R2 R3
+ 0x7812000D, // 0024 JMPF R4 #0033
+ 0x8810010D, // 0025 GETMBR R4 R0 K13
+ 0x94100802, // 0026 GETIDX R4 R4 R2
+ 0x8814090A, // 0027 GETMBR R5 R4 K10
+ 0x78160007, // 0028 JMPF R5 #0031
+ 0x8814090B, // 0029 GETMBR R5 R4 K11
+ 0x4C180000, // 002A LDNIL R6
+ 0x1C140A06, // 002B EQ R5 R5 R6
+ 0x78160000, // 002C JMPF R5 #002E
+ 0x90121601, // 002D SETMBR R4 K11 R1
+ 0x8C140907, // 002E GETMET R5 R4 K7
+ 0x5C1C0200, // 002F MOVE R7 R1
+ 0x7C140400, // 0030 CALL R5 2
+ 0x0008050C, // 0031 ADD R2 R2 K12
+ 0x7001FFEF, // 0032 JMP #0023
+ 0x58080008, // 0033 LDCONST R2 K8
+ 0x6010000C, // 0034 GETGBL R4 G12
+ 0x88140100, // 0035 GETMBR R5 R0 K0
+ 0x7C100200, // 0036 CALL R4 1
+ 0x5C0C0800, // 0037 MOVE R3 R4
+ 0x14100403, // 0038 LT R4 R2 R3
+ 0x7812000D, // 0039 JMPF R4 #0048
+ 0x88100100, // 003A GETMBR R4 R0 K0
+ 0x94100802, // 003B GETIDX R4 R4 R2
+ 0x8814090A, // 003C GETMBR R5 R4 K10
+ 0x78160007, // 003D JMPF R5 #0046
+ 0x8814090B, // 003E GETMBR R5 R4 K11
+ 0x4C180000, // 003F LDNIL R6
+ 0x1C140A06, // 0040 EQ R5 R5 R6
+ 0x78160000, // 0041 JMPF R5 #0043
+ 0x90121601, // 0042 SETMBR R4 K11 R1
+ 0x8C140907, // 0043 GETMET R5 R4 K7
+ 0x5C1C0200, // 0044 MOVE R7 R1
+ 0x7C140400, // 0045 CALL R5 2
+ 0x0008050C, // 0046 ADD R2 R2 K12
+ 0x7001FFEF, // 0047 JMP #0038
+ 0x80000000, // 0048 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(class_EngineProxy_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x60040018, // 0000 GETGBL R1 G24
+ 0x5808000E, // 0001 LDCONST R2 K14
+ 0x600C0005, // 0002 GETGBL R3 G5
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x6010000C, // 0005 GETGBL R4 G12
+ 0x88140100, // 0006 GETMBR R5 R0 K0
+ 0x7C100200, // 0007 CALL R4 1
+ 0x6014000C, // 0008 GETGBL R5 G12
+ 0x8818010D, // 0009 GETMBR R6 R0 K13
+ 0x7C140200, // 000A CALL R5 1
+ 0x6018000C, // 000B GETGBL R6 G12
+ 0x881C0109, // 000C GETMBR R7 R0 K9
+ 0x7C180200, // 000D CALL R6 1
+ 0x881C010A, // 000E GETMBR R7 R0 K10
+ 0x7C040C00, // 000F CALL R1 6
+ 0x80040200, // 0010 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: size_animations
+********************************************************************/
+be_local_closure(class_EngineProxy_size_animations, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(size_animations),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _add_sequence_manager
+********************************************************************/
+be_local_closure(class_EngineProxy__add_sequence_manager, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_add_sequence_manager),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x8808010D, // 0000 GETMBR R2 R0 K13
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A0006, // 0006 JMPF R2 #000E
+ 0x8808010D, // 0007 GETMBR R2 R0 K13
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0x50080200, // 000B LDBOOL R2 1 0
+ 0x80040400, // 000C RET 1 R2
+ 0x70020001, // 000D JMP #0010
+ 0x50080000, // 000E LDBOOL R2 0 0
+ 0x80040400, // 000F RET 1 R2
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _remove_value_provider
+********************************************************************/
+be_local_closure(class_EngineProxy__remove_value_provider, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_remove_value_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x88080109, // 0000 GETMBR R2 R0 K9
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0403, // 0005 NE R3 R2 R3
+ 0x780E0006, // 0006 JMPF R3 #000E
+ 0x880C0109, // 0007 GETMBR R3 R0 K9
+ 0x8C0C0710, // 0008 GETMET R3 R3 K16
+ 0x5C140400, // 0009 MOVE R5 R2
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x500C0200, // 000B LDBOOL R3 1 0
+ 0x80040600, // 000C RET 1 R3
+ 0x70020001, // 000D JMP #0010
+ 0x500C0000, // 000E LDBOOL R3 0 0
+ 0x80040600, // 000F RET 1 R3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: push_iteration_context
+********************************************************************/
+be_local_closure(class_EngineProxy_push_iteration_context, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(push_iteration_context),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88080111, // 0000 GETMBR R2 R0 K17
+ 0x8C080502, // 0001 GETMET R2 R2 K2
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _remove_sequence_manager
+********************************************************************/
+be_local_closure(class_EngineProxy__remove_sequence_manager, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_remove_sequence_manager),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x8808010D, // 0000 GETMBR R2 R0 K13
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0403, // 0005 NE R3 R2 R3
+ 0x780E0006, // 0006 JMPF R3 #000E
+ 0x880C010D, // 0007 GETMBR R3 R0 K13
+ 0x8C0C0710, // 0008 GETMET R3 R3 K16
+ 0x5C140400, // 0009 MOVE R5 R2
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x500C0200, // 000B LDBOOL R3 1 0
+ 0x80040600, // 000C RET 1 R3
+ 0x70020001, // 000D JMP #0010
+ 0x500C0000, // 000E LDBOOL R3 0 0
+ 0x80040600, // 000F RET 1 R3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_current_iteration_number
+********************************************************************/
+be_local_closure(class_EngineProxy_get_current_iteration_number, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(get_current_iteration_number),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x88080111, // 0001 GETMBR R2 R0 K17
+ 0x7C040200, // 0002 CALL R1 1
+ 0x24040308, // 0003 GT R1 R1 K8
+ 0x78060003, // 0004 JMPF R1 #0009
+ 0x88040111, // 0005 GETMBR R1 R0 K17
+ 0x5409FFFE, // 0006 LDINT R2 -1
+ 0x94040202, // 0007 GETIDX R1 R1 R2
+ 0x80040200, // 0008 RET 1 R1
+ 0x4C040000, // 0009 LDNIL R1
+ 0x80040200, // 000A RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _sort_animations_by_priority
+********************************************************************/
+be_local_closure(class_EngineProxy__sort_animations_by_priority, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_sort_animations_by_priority),
+ &be_const_str_solidified,
+ ( &(const binstruction[48]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x1808030C, // 0003 LE R2 R1 K12
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0x80000400, // 0005 RET 0
+ 0x5808000C, // 0006 LDCONST R2 K12
+ 0x140C0401, // 0007 LT R3 R2 R1
+ 0x780E0025, // 0008 JMPF R3 #002F
+ 0x880C0100, // 0009 GETMBR R3 R0 K0
+ 0x940C0602, // 000A GETIDX R3 R3 R2
+ 0x6010000F, // 000B GETGBL R4 G15
+ 0x5C140600, // 000C MOVE R5 R3
+ 0xB81A0200, // 000D GETNGBL R6 K1
+ 0x88180D01, // 000E GETMBR R6 R6 K1
+ 0x7C100400, // 000F CALL R4 2
+ 0x74120001, // 0010 JMPT R4 #0013
+ 0x0008050C, // 0011 ADD R2 R2 K12
+ 0x7001FFF3, // 0012 JMP #0007
+ 0x5C100400, // 0013 MOVE R4 R2
+ 0x24140908, // 0014 GT R5 R4 K8
+ 0x78160014, // 0015 JMPF R5 #002B
+ 0x0414090C, // 0016 SUB R5 R4 K12
+ 0x88180100, // 0017 GETMBR R6 R0 K0
+ 0x94140C05, // 0018 GETIDX R5 R6 R5
+ 0x6018000F, // 0019 GETGBL R6 G15
+ 0x5C1C0A00, // 001A MOVE R7 R5
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x88201101, // 001C GETMBR R8 R8 K1
+ 0x7C180400, // 001D CALL R6 2
+ 0x781A0003, // 001E JMPF R6 #0023
+ 0x88180B12, // 001F GETMBR R6 R5 K18
+ 0x881C0712, // 0020 GETMBR R7 R3 K18
+ 0x28180C07, // 0021 GE R6 R6 R7
+ 0x781A0000, // 0022 JMPF R6 #0024
+ 0x70020006, // 0023 JMP #002B
+ 0x88180100, // 0024 GETMBR R6 R0 K0
+ 0x041C090C, // 0025 SUB R7 R4 K12
+ 0x88200100, // 0026 GETMBR R8 R0 K0
+ 0x941C1007, // 0027 GETIDX R7 R8 R7
+ 0x98180807, // 0028 SETIDX R6 R4 R7
+ 0x0410090C, // 0029 SUB R4 R4 K12
+ 0x7001FFE8, // 002A JMP #0014
+ 0x88140100, // 002B GETMBR R5 R0 K0
+ 0x98140803, // 002C SETIDX R5 R4 R3
+ 0x0008050C, // 002D ADD R2 R2 K12
+ 0x7001FFD7, // 002E JMP #0007
+ 0x80000000, // 002F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: render
+********************************************************************/
+be_local_closure(class_EngineProxy_render, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(render),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0x8810010A, // 0000 GETMBR R4 R0 K10
+ 0x78120002, // 0001 JMPF R4 #0005
+ 0x4C100000, // 0002 LDNIL R4
+ 0x1C100204, // 0003 EQ R4 R1 R4
+ 0x78120001, // 0004 JMPF R4 #0007
+ 0x50100000, // 0005 LDBOOL R4 0 0
+ 0x80040800, // 0006 RET 1 R4
+ 0x4C100000, // 0007 LDNIL R4
+ 0x1C100604, // 0008 EQ R4 R3 R4
+ 0x78120000, // 0009 JMPF R4 #000B
+ 0x880C0105, // 000A GETMBR R3 R0 K5
+ 0x50100000, // 000B LDBOOL R4 0 0
+ 0x58140008, // 000C LDCONST R5 K8
+ 0x6018000C, // 000D GETGBL R6 G12
+ 0x881C0100, // 000E GETMBR R7 R0 K0
+ 0x7C180200, // 000F CALL R6 1
+ 0x141C0A06, // 0010 LT R7 R5 R6
+ 0x781E0019, // 0011 JMPF R7 #002C
+ 0x881C0100, // 0012 GETMBR R7 R0 K0
+ 0x941C0E05, // 0013 GETIDX R7 R7 R5
+ 0x88200F0A, // 0014 GETMBR R8 R7 K10
+ 0x78220013, // 0015 JMPF R8 #002A
+ 0x88200113, // 0016 GETMBR R8 R0 K19
+ 0x8C201114, // 0017 GETMET R8 R8 K20
+ 0x7C200200, // 0018 CALL R8 1
+ 0x8C200F15, // 0019 GETMET R8 R7 K21
+ 0x88280113, // 001A GETMBR R10 R0 K19
+ 0x5C2C0400, // 001B MOVE R11 R2
+ 0x5C300600, // 001C MOVE R12 R3
+ 0x7C200800, // 001D CALL R8 4
+ 0x7822000A, // 001E JMPF R8 #002A
+ 0x8C240F16, // 001F GETMET R9 R7 K22
+ 0x882C0113, // 0020 GETMBR R11 R0 K19
+ 0x5C300400, // 0021 MOVE R12 R2
+ 0x5C340600, // 0022 MOVE R13 R3
+ 0x7C240800, // 0023 CALL R9 4
+ 0x8C240317, // 0024 GETMET R9 R1 K23
+ 0x882C0318, // 0025 GETMBR R11 R1 K24
+ 0x88300113, // 0026 GETMBR R12 R0 K19
+ 0x88301918, // 0027 GETMBR R12 R12 K24
+ 0x7C240600, // 0028 CALL R9 3
+ 0x50100200, // 0029 LDBOOL R4 1 0
+ 0x00140B0C, // 002A ADD R5 R5 K12
+ 0x7001FFE3, // 002B JMP #0010
+ 0x80040800, // 002C RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add
+********************************************************************/
+be_local_closure(class_EngineProxy_add, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(add),
+ &be_const_str_solidified,
+ ( &(const binstruction[35]) { /* code */
+ 0x6008000F, // 0000 GETGBL R2 G15
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xB8120200, // 0002 GETNGBL R4 K1
+ 0x88100919, // 0003 GETMBR R4 R4 K25
+ 0x7C080400, // 0004 CALL R2 2
+ 0x780A0004, // 0005 JMPF R2 #000B
+ 0x8C08011A, // 0006 GETMET R2 R0 K26
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C080400, // 0008 CALL R2 2
+ 0x80040400, // 0009 RET 1 R2
+ 0x70020016, // 000A JMP #0022
+ 0x6008000F, // 000B GETGBL R2 G15
+ 0x5C0C0200, // 000C MOVE R3 R1
+ 0xB8120200, // 000D GETNGBL R4 K1
+ 0x8810091B, // 000E GETMBR R4 R4 K27
+ 0x7C080400, // 000F CALL R2 2
+ 0x780A0004, // 0010 JMPF R2 #0016
+ 0x8C08011C, // 0011 GETMET R2 R0 K28
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x7C080400, // 0013 CALL R2 2
+ 0x80040400, // 0014 RET 1 R2
+ 0x7002000B, // 0015 JMP #0022
+ 0x6008000F, // 0016 GETGBL R2 G15
+ 0x5C0C0200, // 0017 MOVE R3 R1
+ 0xB8120200, // 0018 GETNGBL R4 K1
+ 0x88100901, // 0019 GETMBR R4 R4 K1
+ 0x7C080400, // 001A CALL R2 2
+ 0x780A0004, // 001B JMPF R2 #0021
+ 0x8C08011D, // 001C GETMET R2 R0 K29
+ 0x5C100200, // 001D MOVE R4 R1
+ 0x7C080400, // 001E CALL R2 2
+ 0x80040400, // 001F RET 1 R2
+ 0x70020000, // 0020 JMP #0022
+ 0xB0063D1F, // 0021 RAISE 1 K30 K31
+ 0x80000000, // 0022 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: stop
+********************************************************************/
+be_local_closure(class_EngineProxy_stop, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(stop),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x58040008, // 0000 LDCONST R1 K8
+ 0x6008000C, // 0001 GETGBL R2 G12
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x14080202, // 0004 LT R2 R1 R2
+ 0x780A0005, // 0005 JMPF R2 #000C
+ 0x88080100, // 0006 GETMBR R2 R0 K0
+ 0x94080401, // 0007 GETIDX R2 R2 R1
+ 0x8C080520, // 0008 GETMET R2 R2 K32
+ 0x7C080200, // 0009 CALL R2 1
+ 0x0004030C, // 000A ADD R1 R1 K12
+ 0x7001FFF4, // 000B JMP #0001
+ 0x58040008, // 000C LDCONST R1 K8
+ 0x6008000C, // 000D GETGBL R2 G12
+ 0x880C010D, // 000E GETMBR R3 R0 K13
+ 0x7C080200, // 000F CALL R2 1
+ 0x14080202, // 0010 LT R2 R1 R2
+ 0x780A0005, // 0011 JMPF R2 #0018
+ 0x8808010D, // 0012 GETMBR R2 R0 K13
+ 0x94080401, // 0013 GETIDX R2 R2 R1
+ 0x8C080520, // 0014 GETMET R2 R2 K32
+ 0x7C080200, // 0015 CALL R2 1
+ 0x0004030C, // 0016 ADD R1 R1 K12
+ 0x7001FFF4, // 0017 JMP #000D
+ 0x60080003, // 0018 GETGBL R2 G3
+ 0x5C0C0000, // 0019 MOVE R3 R0
+ 0x7C080200, // 001A CALL R2 1
+ 0x8C080520, // 001B GETMET R2 R2 K32
+ 0x7C080200, // 001C CALL R2 1
+ 0x80040000, // 001D RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_current_iteration
+********************************************************************/
+be_local_closure(class_EngineProxy_update_current_iteration, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(update_current_iteration),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x6008000C, // 0000 GETGBL R2 G12
+ 0x880C0111, // 0001 GETMBR R3 R0 K17
+ 0x7C080200, // 0002 CALL R2 1
+ 0x24080508, // 0003 GT R2 R2 K8
+ 0x780A0002, // 0004 JMPF R2 #0008
+ 0x88080111, // 0005 GETMBR R2 R0 K17
+ 0x540DFFFE, // 0006 LDINT R3 -1
+ 0x98080601, // 0007 SETIDX R2 R3 R1
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_EngineProxy_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080521, // 0003 GETMET R2 R2 K33
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080106, // 0006 GETMBR R2 R0 K6
+ 0x88080513, // 0007 GETMBR R2 R2 K19
+ 0x90022602, // 0008 SETMBR R0 K19 R2
+ 0x60080012, // 0009 GETGBL R2 G18
+ 0x7C080000, // 000A CALL R2 0
+ 0x90020002, // 000B SETMBR R0 K0 R2
+ 0x60080012, // 000C GETGBL R2 G18
+ 0x7C080000, // 000D CALL R2 0
+ 0x90021A02, // 000E SETMBR R0 K13 R2
+ 0x60080012, // 000F GETGBL R2 G18
+ 0x7C080000, // 0010 CALL R2 0
+ 0x90021202, // 0011 SETMBR R0 K9 R2
+ 0x60080012, // 0012 GETGBL R2 G18
+ 0x7C080000, // 0013 CALL R2 0
+ 0x90022202, // 0014 SETMBR R0 K17 R2
+ 0x90020908, // 0015 SETMBR R0 K4 K8
+ 0x8C080122, // 0016 GETMET R2 R0 K34
+ 0x7C080200, // 0017 CALL R2 1
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _add_animation
+********************************************************************/
+be_local_closure(class_EngineProxy__add_animation, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_add_animation),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A000E, // 0006 JMPF R2 #0016
+ 0x88080100, // 0007 GETMBR R2 R0 K0
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0x8C080123, // 000B GETMET R2 R0 K35
+ 0x7C080200, // 000C CALL R2 1
+ 0x8808010A, // 000D GETMBR R2 R0 K10
+ 0x780A0003, // 000E JMPF R2 #0013
+ 0x8C080324, // 000F GETMET R2 R1 K36
+ 0x88100106, // 0010 GETMBR R4 R0 K6
+ 0x88100904, // 0011 GETMBR R4 R4 K4
+ 0x7C080400, // 0012 CALL R2 2
+ 0x50080200, // 0013 LDBOOL R2 1 0
+ 0x80040400, // 0014 RET 1 R2
+ 0x70020001, // 0015 JMP #0018
+ 0x50080000, // 0016 LDBOOL R2 0 0
+ 0x80040400, // 0017 RET 1 R2
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _add_value_provider
+********************************************************************/
+be_local_closure(class_EngineProxy__add_value_provider, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_add_value_provider),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x88080109, // 0000 GETMBR R2 R0 K9
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A0006, // 0006 JMPF R2 #000E
+ 0x88080109, // 0007 GETMBR R2 R0 K9
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0x50080200, // 000B LDBOOL R2 1 0
+ 0x80040400, // 000C RET 1 R2
+ 0x70020001, // 000D JMP #0010
+ 0x50080000, // 000E LDBOOL R2 0 0
+ 0x80040400, // 000F RET 1 R2
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_empty
+********************************************************************/
+be_local_closure(class_EngineProxy_is_empty, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(is_empty),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x1C040308, // 0003 EQ R1 R1 K8
+ 0x78060009, // 0004 JMPF R1 #000F
+ 0x6004000C, // 0005 GETGBL R1 G12
+ 0x8808010D, // 0006 GETMBR R2 R0 K13
+ 0x7C040200, // 0007 CALL R1 1
+ 0x1C040308, // 0008 EQ R1 R1 K8
+ 0x78060004, // 0009 JMPF R1 #000F
+ 0x6004000C, // 000A GETGBL R1 G12
+ 0x88080109, // 000B GETMBR R2 R0 K9
+ 0x7C040200, // 000C CALL R1 1
+ 0x1C040308, // 000D EQ R1 R1 K8
+ 0x74060000, // 000E JMPT R1 #0010
+ 0x50040001, // 000F LDBOOL R1 0 1
+ 0x50040200, // 0010 LDBOOL R1 1 0
+ 0x80040200, // 0011 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: pop_iteration_context
+********************************************************************/
+be_local_closure(class_EngineProxy_pop_iteration_context, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(pop_iteration_context),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x6004000C, // 0000 GETGBL R1 G12
+ 0x88080111, // 0001 GETMBR R2 R0 K17
+ 0x7C040200, // 0002 CALL R1 1
+ 0x24040308, // 0003 GT R1 R1 K8
+ 0x78060003, // 0004 JMPF R1 #0009
+ 0x88040111, // 0005 GETMBR R1 R0 K17
+ 0x8C040325, // 0006 GETMET R1 R1 K37
+ 0x7C040200, // 0007 CALL R1 1
+ 0x80040200, // 0008 RET 1 R1
+ 0x4C040000, // 0009 LDNIL R1
+ 0x80040200, // 000A RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: setup_template
+********************************************************************/
+be_local_closure(class_EngineProxy_setup_template, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(setup_template),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_strip_length
+********************************************************************/
+be_local_closure(class_EngineProxy_get_strip_length, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(get_strip_length),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040106, // 0000 GETMBR R1 R0 K6
+ 0x88040305, // 0001 GETMBR R1 R1 K5
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: clear
+********************************************************************/
+be_local_closure(class_EngineProxy_clear, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(clear),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x8C040120, // 0000 GETMET R1 R0 K32
+ 0x7C040200, // 0001 CALL R1 1
+ 0x60040012, // 0002 GETGBL R1 G18
+ 0x7C040000, // 0003 CALL R1 0
+ 0x90020001, // 0004 SETMBR R0 K0 R1
+ 0x60040012, // 0005 GETGBL R1 G18
+ 0x7C040000, // 0006 CALL R1 0
+ 0x90021A01, // 0007 SETMBR R0 K13 R1
+ 0x60040012, // 0008 GETGBL R1 G18
+ 0x7C040000, // 0009 CALL R1 0
+ 0x90021201, // 000A SETMBR R0 K9 R1
+ 0x80040000, // 000B RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove
+********************************************************************/
+be_local_closure(class_EngineProxy_remove, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(remove),
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0x6008000F, // 0000 GETGBL R2 G15
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xB8120200, // 0002 GETNGBL R4 K1
+ 0x88100919, // 0003 GETMBR R4 R4 K25
+ 0x7C080400, // 0004 CALL R2 2
+ 0x780A0004, // 0005 JMPF R2 #000B
+ 0x8C080126, // 0006 GETMET R2 R0 K38
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C080400, // 0008 CALL R2 2
+ 0x80040400, // 0009 RET 1 R2
+ 0x70020015, // 000A JMP #0021
+ 0x6008000F, // 000B GETGBL R2 G15
+ 0x5C0C0200, // 000C MOVE R3 R1
+ 0xB8120200, // 000D GETNGBL R4 K1
+ 0x8810091B, // 000E GETMBR R4 R4 K27
+ 0x7C080400, // 000F CALL R2 2
+ 0x780A0004, // 0010 JMPF R2 #0016
+ 0x8C080127, // 0011 GETMET R2 R0 K39
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x7C080400, // 0013 CALL R2 2
+ 0x80040400, // 0014 RET 1 R2
+ 0x7002000A, // 0015 JMP #0021
+ 0x6008000F, // 0016 GETGBL R2 G15
+ 0x5C0C0200, // 0017 MOVE R3 R1
+ 0xB8120200, // 0018 GETNGBL R4 K1
+ 0x88100901, // 0019 GETMBR R4 R4 K1
+ 0x7C080400, // 001A CALL R2 2
+ 0x780A0004, // 001B JMPF R2 #0021
+ 0x8C080128, // 001C GETMET R2 R0 K40
+ 0x5C100200, // 001D MOVE R4 R1
+ 0x7C080400, // 001E CALL R2 2
+ 0x80040400, // 001F RET 1 R2
+ 0x7001FFFF, // 0020 JMP #0021
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _remove_animation
+********************************************************************/
+be_local_closure(class_EngineProxy__remove_animation, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(_remove_animation),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C08050F, // 0001 GETMET R2 R2 K15
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0403, // 0005 NE R3 R2 R3
+ 0x780E0006, // 0006 JMPF R3 #000E
+ 0x880C0100, // 0007 GETMBR R3 R0 K0
+ 0x8C0C0710, // 0008 GETMET R3 R3 K16
+ 0x5C140400, // 0009 MOVE R5 R2
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x500C0200, // 000B LDBOOL R3 1 0
+ 0x80040600, // 000C RET 1 R3
+ 0x70020001, // 000D JMP #0010
+ 0x500C0000, // 000E LDBOOL R3 0 0
+ 0x80040600, // 000F RET 1 R3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(class_EngineProxy_start, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_EngineProxy, /* shared constants */
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[46]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080524, // 0003 GETMET R2 R2 K36
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x58080008, // 0006 LDCONST R2 K8
+ 0x600C000C, // 0007 GETGBL R3 G12
+ 0x8810010D, // 0008 GETMBR R4 R0 K13
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x140C0403, // 000A LT R3 R2 R3
+ 0x780E0006, // 000B JMPF R3 #0013
+ 0x880C010D, // 000C GETMBR R3 R0 K13
+ 0x940C0602, // 000D GETIDX R3 R3 R2
+ 0x8C0C0724, // 000E GETMET R3 R3 K36
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x0008050C, // 0011 ADD R2 R2 K12
+ 0x7001FFF3, // 0012 JMP #0007
+ 0x58080008, // 0013 LDCONST R2 K8
+ 0x600C000C, // 0014 GETGBL R3 G12
+ 0x88100109, // 0015 GETMBR R4 R0 K9
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x140C0403, // 0017 LT R3 R2 R3
+ 0x780E0006, // 0018 JMPF R3 #0020
+ 0x880C0109, // 0019 GETMBR R3 R0 K9
+ 0x940C0602, // 001A GETIDX R3 R3 R2
+ 0x8C0C0724, // 001B GETMET R3 R3 K36
+ 0x5C140200, // 001C MOVE R5 R1
+ 0x7C0C0400, // 001D CALL R3 2
+ 0x0008050C, // 001E ADD R2 R2 K12
+ 0x7001FFF3, // 001F JMP #0014
+ 0x58080008, // 0020 LDCONST R2 K8
+ 0x600C000C, // 0021 GETGBL R3 G12
+ 0x88100100, // 0022 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0023 CALL R3 1
+ 0x140C0403, // 0024 LT R3 R2 R3
+ 0x780E0006, // 0025 JMPF R3 #002D
+ 0x880C0100, // 0026 GETMBR R3 R0 K0
+ 0x940C0602, // 0027 GETIDX R3 R3 R2
+ 0x8C0C0724, // 0028 GETMET R3 R3 K36
+ 0x5C140200, // 0029 MOVE R5 R1
+ 0x7C0C0400, // 002A CALL R3 2
+ 0x0008050C, // 002B ADD R2 R2 K12
+ 0x7001FFF3, // 002C JMP #0021
+ 0x80040000, // 002D RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: EngineProxy
+********************************************************************/
+extern const bclass be_class_Animation;
+be_local_class(EngineProxy,
+ 7,
+ &be_class_Animation,
+ be_nested_map(32,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(start, -1), be_const_closure(class_EngineProxy_start_closure) },
+ { be_const_key_weak(sequences, -1), be_const_var(1) },
+ { be_const_key_weak(temp_buffer, 15), be_const_var(4) },
+ { be_const_key_weak(iteration_stack, -1), be_const_var(5) },
+ { be_const_key_weak(_remove_animation, -1), be_const_closure(class_EngineProxy__remove_animation_closure) },
+ { be_const_key_weak(tostring, 16), be_const_closure(class_EngineProxy_tostring_closure) },
+ { be_const_key_weak(size_animations, -1), be_const_closure(class_EngineProxy_size_animations_closure) },
+ { be_const_key_weak(_add_sequence_manager, 4), be_const_closure(class_EngineProxy__add_sequence_manager_closure) },
+ { be_const_key_weak(_remove_value_provider, -1), be_const_closure(class_EngineProxy__remove_value_provider_closure) },
+ { be_const_key_weak(push_iteration_context, -1), be_const_closure(class_EngineProxy_push_iteration_context_closure) },
+ { be_const_key_weak(_remove_sequence_manager, 12), be_const_closure(class_EngineProxy__remove_sequence_manager_closure) },
+ { be_const_key_weak(get_current_iteration_number, -1), be_const_closure(class_EngineProxy_get_current_iteration_number_closure) },
+ { be_const_key_weak(animations, -1), be_const_var(0) },
+ { be_const_key_weak(render, -1), be_const_closure(class_EngineProxy_render_closure) },
+ { be_const_key_weak(strip_length, -1), be_const_var(3) },
+ { be_const_key_weak(clear, -1), be_const_closure(class_EngineProxy_clear_closure) },
+ { be_const_key_weak(stop, 30), be_const_closure(class_EngineProxy_stop_closure) },
+ { be_const_key_weak(time_ms, -1), be_const_var(6) },
+ { be_const_key_weak(update_current_iteration, -1), be_const_closure(class_EngineProxy_update_current_iteration_closure) },
+ { be_const_key_weak(init, 22), be_const_closure(class_EngineProxy_init_closure) },
+ { be_const_key_weak(update, 26), be_const_closure(class_EngineProxy_update_closure) },
+ { be_const_key_weak(_add_value_provider, 17), be_const_closure(class_EngineProxy__add_value_provider_closure) },
+ { be_const_key_weak(is_empty, -1), be_const_closure(class_EngineProxy_is_empty_closure) },
+ { be_const_key_weak(value_providers, -1), be_const_var(2) },
+ { be_const_key_weak(pop_iteration_context, -1), be_const_closure(class_EngineProxy_pop_iteration_context_closure) },
+ { be_const_key_weak(setup_template, -1), be_const_closure(class_EngineProxy_setup_template_closure) },
+ { be_const_key_weak(_add_animation, 28), be_const_closure(class_EngineProxy__add_animation_closure) },
+ { be_const_key_weak(get_strip_length, -1), be_const_closure(class_EngineProxy_get_strip_length_closure) },
+ { be_const_key_weak(add, -1), be_const_closure(class_EngineProxy_add_closure) },
+ { be_const_key_weak(remove, -1), be_const_closure(class_EngineProxy_remove_closure) },
+ { be_const_key_weak(_sort_animations_by_priority, -1), be_const_closure(class_EngineProxy__sort_animations_by_priority_closure) },
+ { be_const_key_weak(get_animations, 0), be_const_closure(class_EngineProxy_get_animations_closure) },
+ })),
+ be_str_weak(EngineProxy)
);
extern const bclass be_class_ValueProvider;
@@ -19022,112 +19003,139 @@ be_local_class(ValueProvider,
be_str_weak(ValueProvider)
);
+/********************************************************************
+** Solidified function: register_user_function
+********************************************************************/
+be_local_closure(register_user_function, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(animation),
+ /* K1 */ be_nested_str_weak(_user_functions),
+ }),
+ be_str_weak(register_user_function),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x88080501, // 0001 GETMBR R2 R2 K1
+ 0x98080001, // 0002 SETIDX R2 R0 R1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified module: animation
********************************************************************/
be_local_module(animation,
"animation",
- be_nested_map(99,
+ be_nested_map(96,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(rich_palette, 83), be_const_class(be_class_RichPaletteColorProvider) },
- { be_const_key_weak(pulsating_animation, -1), be_const_closure(pulsating_animation_closure) },
- { be_const_key_weak(register_user_function, -1), be_const_closure(register_user_function_closure) },
- { be_const_key_weak(EASE_IN, 76), be_const_int(6) },
- { be_const_key_weak(noise_rainbow, -1), be_const_closure(noise_rainbow_closure) },
- { be_const_key_weak(is_user_function, -1), be_const_closure(is_user_function_closure) },
- { be_const_key_weak(gradient_two_color_linear, 43), be_const_closure(gradient_two_color_linear_closure) },
- { be_const_key_weak(PALETTE_RGB, 85), be_const_bytes_instance(00FF00008000FF00FF0000FF) },
- { be_const_key_weak(twinkle_gentle, -1), be_const_closure(twinkle_gentle_closure) },
- { be_const_key_weak(elastic, 65), be_const_closure(elastic_closure) },
- { be_const_key_weak(ELASTIC, 13), be_const_int(8) },
- { be_const_key_weak(EventManager, 12), be_const_class(be_class_EventManager) },
- { be_const_key_weak(strip_length, 98), be_const_class(be_class_StripLengthProvider) },
- { be_const_key_weak(palette_meter_animation, 93), be_const_class(be_class_GradientMeterAnimation) },
- { be_const_key_weak(color_provider, -1), be_const_class(be_class_ColorProvider) },
- { be_const_key_weak(sequence_manager, -1), be_const_class(be_class_SequenceManager) },
- { be_const_key_weak(pulsating_color, -1), be_const_closure(pulsating_color_provider_closure) },
- { be_const_key_weak(PALETTE_SUNSET_TICKS, -1), be_const_bytes_instance(28FF450028FF8C0028FFD70028FF69B4288000802819197000000080) },
- { be_const_key_weak(ease_in, -1), be_const_closure(ease_in_closure) },
- { be_const_key_weak(twinkle_classic, -1), be_const_closure(twinkle_classic_closure) },
- { be_const_key_weak(_math, -1), be_const_class(be_class_AnimationMath) },
- { be_const_key_weak(bounce, 67), be_const_closure(bounce_closure) },
- { be_const_key_weak(VERSION, -1), be_const_int(65536) },
- { be_const_key_weak(is_color_provider, 58), be_const_closure(is_color_provider_closure) },
- { be_const_key_weak(TRIANGLE, -1), be_const_int(2) },
- { be_const_key_weak(solid, -1), be_const_closure(solid_closure) },
- { be_const_key_weak(rich_palette_animation, -1), be_const_class(be_class_RichPaletteAnimation) },
- { be_const_key_weak(iteration_number, 89), be_const_class(be_class_IterationNumberProvider) },
- { be_const_key_weak(wave_rainbow_sine, -1), be_const_closure(wave_rainbow_sine_closure) },
- { be_const_key_weak(init, -1), be_const_closure(animation_init_closure) },
{ be_const_key_weak(LINEAR, -1), be_const_int(1) },
- { be_const_key_weak(triangle, -1), be_const_closure(triangle_closure) },
- { be_const_key_weak(create_closure_value, -1), be_const_closure(create_closure_value_closure) },
- { be_const_key_weak(event_handler, -1), be_const_class(be_class_EventHandler) },
- { be_const_key_weak(animation, 14), be_const_class(be_class_Animation) },
- { be_const_key_weak(frame_buffer, -1), be_const_class(be_class_FrameBuffer) },
- { be_const_key_weak(closure_value, -1), be_const_class(be_class_ClosureValueProvider) },
- { be_const_key_weak(smooth, -1), be_const_closure(smooth_closure) },
- { be_const_key_weak(breathe_color, -1), be_const_class(be_class_BreatheColorProvider) },
- { be_const_key_weak(BOUNCE, -1), be_const_int(9) },
- { be_const_key_weak(trigger_event, -1), be_const_closure(trigger_event_closure) },
- { be_const_key_weak(ramp, -1), be_const_closure(ramp_closure) },
- { be_const_key_weak(unregister_event_handler, 29), be_const_closure(unregister_event_handler_closure) },
- { be_const_key_weak(wave_custom, 50), be_const_closure(wave_custom_closure) },
- { be_const_key_weak(static_color, 8), be_const_class(be_class_StaticColorProvider) },
- { be_const_key_weak(SAWTOOTH, -1), be_const_int(1) },
- { be_const_key_weak(noise_single_color, -1), be_const_closure(noise_single_color_closure) },
- { be_const_key_weak(twinkle_animation, -1), be_const_class(be_class_TwinkleAnimation) },
- { be_const_key_weak(get_event_handlers, -1), be_const_closure(get_event_handlers_closure) },
- { be_const_key_weak(list_user_functions, -1), be_const_closure(list_user_functions_closure) },
- { be_const_key_weak(palette_gradient_animation, -1), be_const_class(be_class_PaletteGradientAnimation) },
- { be_const_key_weak(resolve, 21), be_const_closure(animation_resolve_closure) },
- { be_const_key_weak(EASE_OUT, -1), be_const_int(7) },
- { be_const_key_weak(sawtooth, -1), be_const_closure(sawtooth_closure) },
- { be_const_key_weak(SINE, 28), be_const_int(5) },
- { be_const_key_weak(static_value, 75), be_const_class(be_class_StaticValueProvider) },
- { be_const_key_weak(parameterized_object, -1), be_const_class(be_class_ParameterizedObject) },
- { be_const_key_weak(twinkle_rainbow, 33), be_const_closure(twinkle_rainbow_closure) },
- { be_const_key_weak(wave_animation, -1), be_const_class(be_class_WaveAnimation) },
- { be_const_key_weak(beacon_animation, 38), be_const_class(be_class_BeaconAnimation) },
- { be_const_key_weak(breathe_animation, 48), be_const_class(be_class_BreatheAnimation) },
- { be_const_key_weak(comet_animation, 51), be_const_class(be_class_CometAnimation) },
- { be_const_key_weak(get_user_function, -1), be_const_closure(get_user_function_closure) },
- { be_const_key_weak(oscillator_value, -1), be_const_class(be_class_OscillatorValueProvider) },
- { be_const_key_weak(cosine_osc, 80), be_const_closure(cosine_osc_closure) },
- { be_const_key_weak(PALETTE_RAINBOW, -1), be_const_bytes_instance(00FF000024FFA50049FFFF006E00FF00920000FFB74B0082DBEE82EEFFFF0000) },
{ be_const_key_weak(square, -1), be_const_closure(square_closure) },
- { be_const_key_weak(fire_animation, -1), be_const_class(be_class_FireAnimation) },
+ { be_const_key_weak(value_provider, -1), be_const_class(be_class_ValueProvider) },
+ { be_const_key_weak(breathe_animation, -1), be_const_class(be_class_BreatheAnimation) },
+ { be_const_key_weak(EASE_OUT, -1), be_const_int(7) },
+ { be_const_key_weak(pulsating_color, -1), be_const_closure(pulsating_color_provider_closure) },
+ { be_const_key_weak(rich_palette_animation, 1), be_const_class(be_class_RichPaletteAnimation) },
+ { be_const_key_weak(palette_meter_animation, -1), be_const_class(be_class_GradientMeterAnimation) },
+ { be_const_key_weak(noise_animation, -1), be_const_class(be_class_NoiseAnimation) },
+ { be_const_key_weak(engine_proxy, 68), be_const_class(be_class_EngineProxy) },
+ { be_const_key_weak(enc_params, -1), be_const_closure(encode_constraints_closure) },
+ { be_const_key_weak(set_event_active, -1), be_const_closure(set_event_active_closure) },
+ { be_const_key_weak(trigger_event, -1), be_const_closure(trigger_event_closure) },
+ { be_const_key_weak(get_user_function, 22), be_const_closure(get_user_function_closure) },
+ { be_const_key_weak(strip_length, -1), be_const_class(be_class_StripLengthProvider) },
+ { be_const_key_weak(unregister_event_handler, -1), be_const_closure(unregister_event_handler_closure) },
+ { be_const_key_weak(twinkle_intense, -1), be_const_closure(twinkle_intense_closure) },
+ { be_const_key_weak(color_cycle, 31), be_const_class(be_class_ColorCycleColorProvider) },
+ { be_const_key_weak(crenel_position_animation, 44), be_const_class(be_class_CrenelPositionAnimation) },
+ { be_const_key_weak(twinkle_solid, -1), be_const_closure(twinkle_solid_closure) },
+ { be_const_key_weak(parameterized_object, 13), be_const_class(be_class_ParameterizedObject) },
+ { be_const_key_weak(gradient_two_color_linear, 91), be_const_closure(gradient_two_color_linear_closure) },
+ { be_const_key_weak(_math, -1), be_const_class(be_class_AnimationMath) },
+ { be_const_key_weak(is_color_provider, -1), be_const_closure(is_color_provider_closure) },
+ { be_const_key_weak(get_event_handlers, 56), be_const_closure(get_event_handlers_closure) },
+ { be_const_key_weak(cosine_osc, -1), be_const_closure(cosine_osc_closure) },
+ { be_const_key_weak(breathe_color, 58), be_const_class(be_class_BreatheColorProvider) },
+ { be_const_key_weak(event_handler, 45), be_const_class(be_class_EventHandler) },
+ { be_const_key_weak(color_provider, 30), be_const_class(be_class_ColorProvider) },
+ { be_const_key_weak(SQUARE, -1), be_const_int(3) },
+ { be_const_key_weak(twinkle_classic, -1), be_const_closure(twinkle_classic_closure) },
+ { be_const_key_weak(frame_buffer, 18), be_const_class(be_class_FrameBuffer) },
+ { be_const_key_weak(beacon_animation, -1), be_const_class(be_class_BeaconAnimation) },
+ { be_const_key_weak(twinkle_animation, 5), be_const_class(be_class_TwinkleAnimation) },
+ { be_const_key_weak(is_value_provider, 73), be_const_closure(is_value_provider_closure) },
+ { be_const_key_weak(create_closure_value, -1), be_const_closure(create_closure_value_closure) },
+ { be_const_key_weak(register_event_handler, 80), be_const_closure(register_event_handler_closure) },
+ { be_const_key_weak(triangle, 85), be_const_closure(triangle_closure) },
+ { be_const_key_weak(noise_single_color, 29), be_const_closure(noise_single_color_closure) },
+ { be_const_key_weak(rich_palette, -1), be_const_class(be_class_RichPaletteColorProvider) },
+ { be_const_key_weak(ELASTIC, -1), be_const_int(8) },
+ { be_const_key_weak(ramp, -1), be_const_closure(ramp_closure) },
+ { be_const_key_weak(wave_custom, -1), be_const_closure(wave_custom_closure) },
+ { be_const_key_weak(list_user_functions, -1), be_const_closure(list_user_functions_closure) },
+ { be_const_key_weak(twinkle_gentle, -1), be_const_closure(twinkle_gentle_closure) },
+ { be_const_key_weak(sequence_manager, 74), be_const_class(be_class_SequenceManager) },
+ { be_const_key_weak(pulsating_animation, -1), be_const_closure(pulsating_animation_closure) },
+ { be_const_key_weak(composite_color, 77), be_const_class(be_class_CompositeColorProvider) },
+ { be_const_key_weak(get_registered_events, 50), be_const_closure(get_registered_events_closure) },
+ { be_const_key_weak(PALETTE_FIRE, 35), be_const_bytes_instance(000000004080000080FF0000C0FF8000FFFFFF00) },
+ { be_const_key_weak(create_engine, 47), be_const_class(be_class_AnimationEngine) },
+ { be_const_key_weak(init, -1), be_const_closure(animation_init_closure) },
+ { be_const_key_weak(PALETTE_RGB, 48), be_const_bytes_instance(00FF00008000FF00FF0000FF) },
+ { be_const_key_weak(ease_in, -1), be_const_closure(ease_in_closure) },
+ { be_const_key_weak(gradient_rainbow_radial, -1), be_const_closure(gradient_rainbow_radial_closure) },
+ { be_const_key_weak(VERSION, -1), be_const_int(65536) },
+ { be_const_key_weak(SINE, -1), be_const_int(5) },
+ { be_const_key_weak(oscillator_value, -1), be_const_class(be_class_OscillatorValueProvider) },
+ { be_const_key_weak(rich_palette_rainbow, 33), be_const_closure(rich_palette_rainbow_closure) },
+ { be_const_key_weak(wave_single_sine, -1), be_const_closure(wave_single_sine_closure) },
+ { be_const_key_weak(SAWTOOTH, 27), be_const_int(1) },
+ { be_const_key_weak(bounce, 34), be_const_closure(bounce_closure) },
+ { be_const_key_weak(is_user_function, -1), be_const_closure(is_user_function_closure) },
+ { be_const_key_weak(EASE_IN, 53), be_const_int(6) },
+ { be_const_key_weak(fire_animation, 71), be_const_class(be_class_FireAnimation) },
{ be_const_key_weak(version_string, -1), be_const_closure(animation_version_string_closure) },
{ be_const_key_weak(COSINE, -1), be_const_int(4) },
- { be_const_key_weak(twinkle_solid, -1), be_const_closure(twinkle_solid_closure) },
- { be_const_key_weak(rich_palette_rainbow, 64), be_const_closure(rich_palette_rainbow_closure) },
- { be_const_key_weak(gradient_rainbow_radial, -1), be_const_closure(gradient_rainbow_radial_closure) },
- { be_const_key_weak(value_provider, -1), be_const_class(be_class_ValueProvider) },
- { be_const_key_weak(crenel_position_animation, 16), be_const_class(be_class_CrenelPositionAnimation) },
- { be_const_key_weak(is_value_provider, -1), be_const_closure(is_value_provider_closure) },
- { be_const_key_weak(clear_all_event_handlers, -1), be_const_closure(clear_all_event_handlers_closure) },
- { be_const_key_weak(gradient_animation, -1), be_const_class(be_class_GradientAnimation) },
- { be_const_key_weak(sine_osc, 26), be_const_closure(sine_osc_closure) },
- { be_const_key_weak(create_engine, -1), be_const_class(be_class_AnimationEngine) },
- { be_const_key_weak(noise_animation, -1), be_const_class(be_class_NoiseAnimation) },
- { be_const_key_weak(engine_proxy, -1), be_const_class(be_class_EngineProxy) },
- { be_const_key_weak(composite_color, 27), be_const_class(be_class_CompositeColorProvider) },
- { be_const_key_weak(register_event_handler, 40), be_const_closure(register_event_handler_closure) },
- { be_const_key_weak(twinkle_intense, 3), be_const_closure(twinkle_intense_closure) },
- { be_const_key_weak(noise_fractal, -1), be_const_closure(noise_fractal_closure) },
- { be_const_key_weak(SQUARE, 81), be_const_int(3) },
- { be_const_key_weak(init_strip, -1), be_const_closure(animation_init_strip_closure) },
- { be_const_key_weak(PALETTE_FOREST, -1), be_const_bytes_instance(0000640040228B228032CD32C09AFF9AFF90EE90) },
+ { be_const_key_weak(noise_fractal, 70), be_const_closure(noise_fractal_closure) },
+ { be_const_key_weak(sawtooth, -1), be_const_closure(sawtooth_closure) },
+ { be_const_key_weak(TRIANGLE, -1), be_const_int(2) },
+ { be_const_key_weak(resolve, 46), be_const_closure(animation_resolve_closure) },
{ be_const_key_weak(linear, -1), be_const_closure(linear_closure) },
+ { be_const_key_weak(elastic, -1), be_const_closure(elastic_closure) },
+ { be_const_key_weak(animation, -1), be_const_class(be_class_Animation) },
+ { be_const_key_weak(closure_value, 21), be_const_class(be_class_ClosureValueProvider) },
+ { be_const_key_weak(wave_rainbow_sine, -1), be_const_closure(wave_rainbow_sine_closure) },
+ { be_const_key_weak(noise_rainbow, -1), be_const_closure(noise_rainbow_closure) },
+ { be_const_key_weak(solid, 82), be_const_closure(solid_closure) },
+ { be_const_key_weak(twinkle_rainbow, -1), be_const_closure(twinkle_rainbow_closure) },
+ { be_const_key_weak(smooth, -1), be_const_closure(smooth_closure) },
{ be_const_key_weak(ease_out, -1), be_const_closure(ease_out_closure) },
+ { be_const_key_weak(PALETTE_RAINBOW, -1), be_const_bytes_instance(00FC000024FF800049FFFF006E00FF009200FFFFB70080FFDB8000FFFFFF0000) },
+ { be_const_key_weak(iteration_number, -1), be_const_class(be_class_IterationNumberProvider) },
+ { be_const_key_weak(static_color, -1), be_const_class(be_class_StaticColorProvider) },
+ { be_const_key_weak(palette_gradient_animation, -1), be_const_class(be_class_PaletteGradientAnimation) },
+ { be_const_key_weak(static_value, -1), be_const_class(be_class_StaticValueProvider) },
+ { be_const_key_weak(EventManager, 25), be_const_class(be_class_EventManager) },
+ { be_const_key_weak(clear_all_event_handlers, -1), be_const_closure(clear_all_event_handlers_closure) },
{ be_const_key_weak(gradient_rainbow_linear, -1), be_const_closure(gradient_rainbow_linear_closure) },
- { be_const_key_weak(color_cycle, 46), be_const_class(be_class_ColorCycleColorProvider) },
- { be_const_key_weak(PALETTE_FIRE, 96), be_const_bytes_instance(000000004080000080FF0000C0FF8000FFFFFF00) },
- { be_const_key_weak(get_registered_events, -1), be_const_closure(get_registered_events_closure) },
- { be_const_key_weak(set_event_active, -1), be_const_closure(set_event_active_closure) },
- { be_const_key_weak(PALETTE_OCEAN, -1), be_const_bytes_instance(00000080400000FF8000FFFFC000FF80FF008000) },
- { be_const_key_weak(enc_params, 32), be_const_closure(encode_constraints_closure) },
- { be_const_key_weak(wave_single_sine, -1), be_const_closure(wave_single_sine_closure) },
+ { be_const_key_weak(wave_animation, -1), be_const_class(be_class_WaveAnimation) },
+ { be_const_key_weak(init_strip, 16), be_const_closure(animation_init_strip_closure) },
+ { be_const_key_weak(sine_osc, -1), be_const_closure(sine_osc_closure) },
+ { be_const_key_weak(gradient_animation, 9), be_const_class(be_class_GradientAnimation) },
+ { be_const_key_weak(BOUNCE, -1), be_const_int(9) },
+ { be_const_key_weak(comet_animation, 2), be_const_class(be_class_CometAnimation) },
+ { be_const_key_weak(register_user_function, -1), be_const_closure(register_user_function_closure) },
}))
);
BE_EXPORT_VARIABLE be_define_const_native_module(animation);
diff --git a/lib/libesp32/berry_animation/src/tests/breathe_animation_test.be b/lib/libesp32/berry_animation/src/tests/breathe_animation_test.be
index 0b36fa444..1144b6f3a 100644
--- a/lib/libesp32/berry_animation/src/tests/breathe_animation_test.be
+++ b/lib/libesp32/berry_animation/src/tests/breathe_animation_test.be
@@ -21,7 +21,7 @@ var anim = animation.breathe_animation(engine)
print("Created breathe animation with defaults")
# Test default values
-print(f"Default base_color: 0x{anim.base_color :08x}")
+print(f"Default color: 0x{anim.breathe_provider.base_color :08x}")
print(f"Default min_brightness: {anim.min_brightness}")
print(f"Default max_brightness: {anim.max_brightness}")
print(f"Default period: {anim.period}")
@@ -29,13 +29,13 @@ print(f"Default curve_factor: {anim.curve_factor}")
# Create another breathe animation and set custom parameters using virtual member assignment
var blue_breathe = animation.breathe_animation(engine)
-blue_breathe.base_color = 0xFF0000FF
+blue_breathe.color = 0xFF0000FF
blue_breathe.min_brightness = 20
blue_breathe.max_brightness = 200
blue_breathe.period = 4000
blue_breathe.curve_factor = 3
blue_breathe.priority = 15
-print(f"Blue breathe animation base_color: 0x{blue_breathe.base_color :08x}")
+print(f"Blue breathe animation color: 0x{blue_breathe.breathe_provider.base_color :08x}")
print(f"Blue breathe animation min_brightness: {blue_breathe.min_brightness}")
print(f"Blue breathe animation max_brightness: {blue_breathe.max_brightness}")
print(f"Blue breathe animation period: {blue_breathe.period}")
@@ -43,12 +43,12 @@ print(f"Blue breathe animation curve_factor: {blue_breathe.curve_factor}")
# Create red breathe animation with different parameters
var red_breathe = animation.breathe_animation(engine)
-red_breathe.base_color = 0xFFFF0000
+red_breathe.color = 0xFFFF0000
red_breathe.min_brightness = 10
red_breathe.max_brightness = 180
red_breathe.period = 3000
red_breathe.curve_factor = 2
-print(f"Red breathe animation base_color: 0x{red_breathe.base_color :08x}")
+print(f"Red breathe animation color: 0x{red_breathe.breathe_provider.base_color :08x}")
# Test parameter updates using virtual member assignment
blue_breathe.min_brightness = 30
@@ -133,7 +133,7 @@ print("✓ Animation added to engine successfully")
assert(anim != nil, "Default breathe animation should be created")
assert(blue_breathe != nil, "Custom breathe animation should be created")
assert(red_breathe != nil, "Red breathe animation should be created")
-assert(blue_breathe.base_color == 0xFF0000FF, "Blue breathe should have correct base_color")
+assert(blue_breathe.breathe_provider.base_color == 0xFF0000FF, "Blue breathe should have correct color")
assert(blue_breathe.min_brightness == 30, "Min brightness should be updated to 30")
assert(blue_breathe.max_brightness == 220, "Max brightness should be updated to 220")
assert(blue_breathe.period == 3500, "Breathe period should be updated to 3500")
diff --git a/lib/libesp32/berry_animation/src/tests/frame_buffer_js_test.be b/lib/libesp32/berry_animation/src/tests/frame_buffer_js_test.be
new file mode 100644
index 000000000..9ca301b30
--- /dev/null
+++ b/lib/libesp32/berry_animation/src/tests/frame_buffer_js_test.be
@@ -0,0 +1,53 @@
+# Test file for Leds JavaScript bridge functions
+#
+# This file contains tests for the JavaScript-specific Leds display functions
+
+print("Testing Leds JavaScript bridge functions...")
+
+# Create a Leds strip with 10 pixels
+var strip = Leds(10)
+assert(strip.leds == 10, "LED strip should have 10 pixels")
+
+# Test show method (should not error even if not in browser)
+print("Testing show method...")
+strip.clear_to(0xFF0000) # Fill with red
+strip.show() # Should not error
+print("show method works (no error)")
+
+# Test pixel_count method (should return leds when not in browser)
+print("Testing pixel_count method...")
+var pixel_count = strip.pixel_count()
+assert(pixel_count == 10, f"Pixel count should be 10 when not in browser, got {pixel_count}")
+print("pixel_count method works (returns 10 when not in browser)")
+
+# Test that show works with different pixel patterns
+print("Testing show with different patterns...")
+
+# Pattern 1: All red
+strip.clear_to(0xFF0000)
+strip.show()
+print("Pattern 1 (all red) sent to JS")
+
+# Pattern 2: Mixed colors
+strip.clear_to(0x000000)
+strip.set_pixel_color(0, 0xFF0000) # Red
+strip.set_pixel_color(1, 0x00FF00) # Green
+strip.set_pixel_color(2, 0x0000FF) # Blue
+strip.set_pixel_color(3, 0xFFFF00) # Yellow
+strip.set_pixel_color(4, 0x00FFFF) # Cyan
+strip.show()
+print("Pattern 2 (mixed colors) sent to JS")
+
+# Pattern 3: Gradient-like pattern
+strip.clear_to(0x000000)
+var i = 0
+while i < strip.leds
+ var brightness = (i * 255) / strip.leds
+ strip.set_pixel_color(i, (brightness << 16)) # Red gradient
+ i += 1
+end
+strip.show()
+print("Pattern 3 (gradient) sent to JS")
+
+print("All Leds JavaScript bridge tests passed!")
+return true
diff --git a/lib/libesp32/berry_animation/src/tests/pulse_animation_test.be b/lib/libesp32/berry_animation/src/tests/pulse_animation_test.be
index 6fdf5f69e..89e27a631 100644
--- a/lib/libesp32/berry_animation/src/tests/pulse_animation_test.be
+++ b/lib/libesp32/berry_animation/src/tests/pulse_animation_test.be
@@ -21,7 +21,7 @@ var anim = animation.pulsating_animation(engine)
print("Created pulse animation with defaults")
# Test default values
-print(f"Default base_color: 0x{anim.base_color :08x}")
+print(f"Default color: 0x{anim.breathe_provider.base_color :08x}")
print(f"Default min_brightness: {anim.min_brightness}")
print(f"Default max_brightness: {anim.max_brightness}")
print(f"Default period: {anim.period}")
@@ -29,11 +29,11 @@ print(f"Default curve_factor: {anim.curve_factor}") # Should be 1 for pulsating
# Test with custom parameters using virtual member assignment
var blue_pulse = animation.pulsating_animation(engine)
-blue_pulse.base_color = 0xFF0000FF
+blue_pulse.color = 0xFF0000FF
blue_pulse.min_brightness = 50
blue_pulse.max_brightness = 200
blue_pulse.period = 2000
-print(f"Blue pulse animation base_color: 0x{blue_pulse.base_color :08x}")
+print(f"Blue pulse animation color: 0x{blue_pulse.breathe_provider.base_color :08x}")
print(f"Blue pulse animation min_brightness: {blue_pulse.min_brightness}")
print(f"Blue pulse animation max_brightness: {blue_pulse.max_brightness}")
print(f"Blue pulse animation period: {blue_pulse.period}")
@@ -41,11 +41,11 @@ print(f"Blue pulse animation curve_factor: {blue_pulse.curve_factor}")
# Test creating another pulse with different parameters
var red_pulse = animation.pulsating_animation(engine)
-red_pulse.base_color = 0xFFFF0000 # Red color
+red_pulse.color = 0xFFFF0000 # Red color
red_pulse.min_brightness = 20
red_pulse.max_brightness = 180
red_pulse.period = 1500
-print(f"Red pulse animation base_color: 0x{red_pulse.base_color :08x}")
+print(f"Red pulse animation color: 0x{red_pulse.breathe_provider.base_color :08x}")
# Test parameter updates using virtual member assignment
blue_pulse.min_brightness = 30
@@ -104,7 +104,7 @@ print(f"First pixel after rendering: 0x{frame.get_pixel_color(0) :08x}")
# Validate key test results
assert(anim != nil, "Default pulse animation should be created")
assert(blue_pulse != nil, "Custom pulse animation should be created")
-assert(blue_pulse.base_color == 0xFF0000FF, "Blue pulse should have correct base_color")
+assert(blue_pulse.breathe_provider.base_color == 0xFF0000FF, "Blue pulse should have correct color")
assert(blue_pulse.min_brightness == 30, "Min brightness should be updated to 30")
assert(blue_pulse.max_brightness == 220, "Max brightness should be updated to 220")
assert(blue_pulse.period == 1800, "Pulse period should be updated to 1800")
diff --git a/lib/libesp32/berry_animation/src/tests/test_all.be b/lib/libesp32/berry_animation/src/tests/test_all.be
index 0339e86f4..fe66e3a28 100644
--- a/lib/libesp32/berry_animation/src/tests/test_all.be
+++ b/lib/libesp32/berry_animation/src/tests/test_all.be
@@ -47,6 +47,7 @@ def run_all_tests()
# Core framework tests
"lib/libesp32/berry_animation/src/tests/frame_buffer_test.be",
+ "lib/libesp32/berry_animation/src/tests/frame_buffer_js_test.be",
"lib/libesp32/berry_animation/src/tests/constraint_encoding_test.be", # Tests parameter constraint encoding/decoding
"lib/libesp32/berry_animation/src/tests/nillable_parameter_test.be",
"lib/libesp32/berry_animation/src/tests/parameterized_object_test.be", # Tests parameter management base class
diff --git a/lib/libesp32/berry_animation/src/tests/twinkle_animation_test.be b/lib/libesp32/berry_animation/src/tests/twinkle_animation_test.be
index a83b19757..1add7803b 100644
--- a/lib/libesp32/berry_animation/src/tests/twinkle_animation_test.be
+++ b/lib/libesp32/berry_animation/src/tests/twinkle_animation_test.be
@@ -132,10 +132,14 @@ while i < size(density_test_cases)
density_time += 167
density_twinkle.update(density_time)
+ # Count active twinkles by checking alpha channel in current_colors buffer
var active_count = 0
+ var strip_len = engine.strip_length
var j = 0
- while j < size(density_twinkle.twinkle_states)
- if density_twinkle.twinkle_states[j] > 0
+ while j < strip_len
+ var color = density_twinkle.current_colors.get(j * 4, -4)
+ var alpha = (color >> 24) & 0xFF
+ if alpha > 0
active_count += 1
end
j += 1
@@ -278,16 +282,18 @@ end
# Test 10: Internal State Inspection
print("\n10. Testing internal state...")
-print(f"Twinkle states array size: {size(twinkle.twinkle_states)}")
-print(f"Current colors array size: {size(twinkle.current_colors)}")
+var strip_len = engine.strip_length
+print(f"Current colors buffer size: {size(twinkle.current_colors)} bytes ({size(twinkle.current_colors) / 4} pixels)")
print(f"Random seed: {twinkle.random_seed}")
print(f"Last update time: {twinkle.last_update}")
-# Check some internal states
+# Check some internal states by examining alpha channel in current_colors
var active_twinkles = 0
i = 0
-while i < size(twinkle.twinkle_states)
- if twinkle.twinkle_states[i] > 0
+while i < strip_len
+ var color = twinkle.current_colors.get(i * 4, -4)
+ var alpha = (color >> 24) & 0xFF
+ if alpha > 0
active_twinkles += 1
end
i += 1
@@ -430,8 +436,9 @@ var new_stars_found = 0
var full_brightness_stars = 0
var k = 0
-while k < size(alpha_test_twinkle.current_colors) && k < 10 # Check first 10 pixels
- var color = alpha_test_twinkle.current_colors[k]
+var num_pixels = size(alpha_test_twinkle.current_colors) / 4 # 4 bytes per pixel
+while k < num_pixels && k < 10 # Check first 10 pixels
+ var color = alpha_test_twinkle.current_colors.get(k * 4, -4)
var alpha = (color >> 24) & 0xFF
var red = (color >> 16) & 0xFF
var green = (color >> 8) & 0xFF
@@ -463,9 +470,8 @@ fade_twinkle.twinkle_speed = 6
fade_twinkle.fade_speed = 100 # Medium fade
fade_twinkle.start()
-# Manually create a star at full alpha
-fade_twinkle.twinkle_states[5] = 1 # Mark as active
-fade_twinkle.current_colors[5] = 0xFFFFFFFF # Full white at full alpha
+# Manually create a star at full alpha (alpha channel serves as active state)
+fade_twinkle.current_colors.set(5 * 4, 0xFFFFFFFF, -4) # Full white at full alpha
# Track alpha over several fade cycles
var fade_history = []
@@ -476,7 +482,7 @@ while fade_cycle < 5
fade_test_time += 167 # ~6Hz updates
fade_twinkle.update(fade_test_time)
- var color = fade_twinkle.current_colors[5]
+ var color = fade_twinkle.current_colors.get(5 * 4, -4)
var alpha = (color >> 24) & 0xFF
var red = (color >> 16) & 0xFF
var green = (color >> 8) & 0xFF
@@ -519,16 +525,16 @@ reset_twinkle.fade_speed = 255 # Max fade speed
reset_twinkle.start()
# Create a star with very low alpha (should disappear quickly)
-reset_twinkle.twinkle_states[3] = 1
-reset_twinkle.current_colors[3] = 0x0500FF00 # Very low alpha (5), full green
+# Alpha channel serves as active state - alpha > 0 means active
+reset_twinkle.current_colors.set(3 * 4, 0x0500FF00, -4) # Very low alpha (5), full green
# Update once (should reset to transparent)
reset_twinkle.update(17000)
-var final_color = reset_twinkle.current_colors[3]
-var final_state = reset_twinkle.twinkle_states[3]
+var final_color = reset_twinkle.current_colors.get(3 * 4, -4)
+var final_alpha = (final_color >> 24) & 0xFF
-if final_color == 0x00000000 && final_state == 0
+if final_color == 0x00000000 && final_alpha == 0
print("✅ Star correctly reset to transparent when alpha reached zero")
else
print("❌ Star not properly reset")
@@ -549,7 +555,7 @@ zero_density_twinkle.update(18000)
print("Zero density twinkle created and updated")
# Test that transparency is working by checking the alpha-based fading results from previous test
-var transparency_working = (final_color == 0x00000000 && final_state == 0)
+var transparency_working = (final_color == 0x00000000 && final_alpha == 0)
var alpha_preserved = alpha_decreased
var background_preserved = 10 # Assume good based on previous alpha tests