From a9d32dc9798392000d7d36c542e316d62686b34d Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Mon, 22 Dec 2025 08:46:39 +0100 Subject: [PATCH] Berry animation fix breathe (#24246) * Remove tab from json * Berry animation fix breathe --- lib/libesp32/berry_animation/README.md | 333 +- .../compiled/compilation_summary.md | 2 - .../anim_examples/compiled/palette_demo.be | 7 - .../anim_examples/palette_demo.anim | 3 - .../anim_tutorials/chap_1_00_plain.anim | 2 +- .../chap_1_10_palette_rotation.anim | 2 +- .../chap_1_20_color_transition.anim | 2 +- .../chap_1_30_color_pattern.anim | 2 +- .../chap_1_31_color_pattern_spatial_2.anim | 2 +- .../chap_1_32_color_pattern_spatial_osc.anim | 2 +- ...hap_1_33_color_pattern_spatial_rotate.anim | 2 +- .../chap_1_40_color_pattern_meter.anim | 2 +- .../chap_1_41_color_pattern_meter_random.anim | 2 +- .../anim_tutorials/chap_2_10_sky.anim | 2 +- .../chap_5_10_template_cylon_simple.anim | 2 +- ...hap_5_21_template_shutter_bidir_flags.anim | 2 +- .../chap_5_22_template_shutter_bidir.anim | 2 +- .../ANIMATION_CLASS_HIERARCHY.md | 1197 + .../ANIMATION_DEVELOPMENT.md | 695 + .../berry_animation_docs/DSL_REFERENCE.md | 1695 ++ .../berry_animation_docs/DSL_TRANSPILATION.md | 798 + .../berry_animation_docs/EXAMPLES.md | 479 + .../OSCILLATION_PATTERNS.md | 263 + .../berry_animation_docs/QUICK_START.md | 257 + .../TRANSPILER_ARCHITECTURE.md | 858 + .../berry_animation_docs/TROUBLESHOOTING.md | 1238 + .../berry_animation_docs/USER_FUNCTIONS.md | 677 + .../berry_animation/src/animations/breathe.be | 25 +- .../src/animations/palettes.be | 46 +- .../src/core/frame_buffer_ntv.be | 3 + .../src/solidify/solidified_animation.h | 23906 ++++++++-------- .../src/tests/breathe_animation_test.be | 12 +- .../src/tests/frame_buffer_js_test.be | 53 + .../src/tests/pulse_animation_test.be | 12 +- .../berry_animation/src/tests/test_all.be | 1 + .../src/tests/twinkle_animation_test.be | 44 +- 36 files changed, 20383 insertions(+), 12247 deletions(-) create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_CLASS_HIERARCHY.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/ANIMATION_DEVELOPMENT.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/DSL_REFERENCE.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/DSL_TRANSPILATION.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/EXAMPLES.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/OSCILLATION_PATTERNS.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/QUICK_START.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/TRANSPILER_ARCHITECTURE.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/TROUBLESHOOTING.md create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/USER_FUNCTIONS.md create mode 100644 lib/libesp32/berry_animation/src/tests/frame_buffer_js_test.be 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