forked from mirrors/principia
1319 lines
28 KiB
Text
1319 lines
28 KiB
Text
-----
|
|
|
|
Game Modes
|
|
|
|
Puzzles
|
|
Robot Mode
|
|
Minigames (asteroid shooter, pinball)
|
|
|
|
Downloadable:
|
|
Atanasoff's Nightmare (30 digital circuitry puzzles)
|
|
Fifth Gear
|
|
|
|
World's Most Annoying Level Pack
|
|
30 puzzle levels annoying enough to turn you into a vegetable, for only $10, have you ever stumbled upon
|
|
a better deal? These levels are designed to be extremely difficult, but not in a manner of
|
|
complexity but rather in terms of precision and patience.
|
|
|
|
Helicopter (Clone of the classic helicopter game, precision-control a helicopter through 30 levels)
|
|
Apparatus (Classic puzzle levels in the style of Apparatus, get the marble to the goal!)
|
|
More minigames (2 pinball games, 4 Happy Robots levels, Bird shooting)
|
|
|
|
-----
|
|
|
|
Sandbox Help
|
|
|
|
Welcome to the sandbox!
|
|
To the left you have the Advanced Options button, click
|
|
on it show a few extra options.
|
|
|
|
The button with a ruler enables "Architect Mode". This mode
|
|
renders the scene with orthographic projection and allows you
|
|
to precisely measure objects in different layers. Effectively
|
|
what happens is that the depth is removed.
|
|
|
|
Next we have the layer transparency button. This button will
|
|
toggle the transparency of layers so that you can build and edit
|
|
occluded objects.
|
|
|
|
And lastly we have the info button that will print out where
|
|
the centre of mass is for each rigid construction. Note that
|
|
this does not include objects that are attached using soft nails
|
|
and rotary nails, but only compounds of stiffly attached objects.
|
|
|
|
---
|
|
|
|
|
|
Copy/paste
|
|
Grid
|
|
|
|
Advanced options:
|
|
Quickbuild (disable joint type select, always automatically pick the hardest available nail)
|
|
Architect Mode (orthographic)
|
|
Show grid
|
|
Hide/show layers
|
|
Show centre of mass
|
|
|
|
----
|
|
|
|
Battery (3V)
|
|
|
|
2 AA 1.5V batteries series connected, totaling 3 V.
|
|
|
|
----
|
|
|
|
Power Supply
|
|
|
|
Voltage and current regulating power supply. Constant output between 1.5 V and 20 V.
|
|
|
|
|
|
----
|
|
|
|
----
|
|
|
|
Motor
|
|
|
|
Simple DC motor.
|
|
|
|
NOTE:
|
|
Since this motor is not capable of keeping its idle position
|
|
or slowing down, it will oscillate if interfacing with a BH-CTRL SERVO.
|
|
For precise angle control, the stepper motor should be used.
|
|
|
|
Characteristics:
|
|
* High maximum speed
|
|
* Speed control through Pulse-Width Modulation, constant torque
|
|
* No engine braking
|
|
|
|
----
|
|
|
|
Microstep Motor
|
|
|
|
A motor that is good for precise angle control or abrupt speed control.
|
|
|
|
Characteristics:
|
|
* Low maximum speed
|
|
* High torque
|
|
* A desired speed below the current speed slows down (brakes) the motor
|
|
* Applies torque to hold idle position or desired angle
|
|
|
|
----
|
|
|
|
Controllers and panels
|
|
|
|
Control panel:
|
|
|
|
OUT0-7 raw signal
|
|
OUT8-15 Focus (binary)
|
|
|
|
IN0-7 feedback/report current value
|
|
IN8-15 Set value
|
|
IN16-23 Set enabled/disabled
|
|
|
|
One external device is controlled using 2 output slots and 3 input slots.
|
|
OUT0 is connected to IN0, IN8 and IN16.
|
|
OUTx is connected to INx, IN(x+8) and IN(x+16)
|
|
|
|
OUT8-15 reports widget focus. For example, if a slider is dragged to 0,
|
|
the raw signal is 0, but the focus signal is 1. When the slider is released
|
|
the raw signal remains at 0 and the focus signal turns 0 as well.
|
|
This can be used to create a recoil effect, when the focus value is 0,
|
|
send a 1 (inverted focus signal) to the IN16-23 (Set enabled/disabled),
|
|
when the slider is released it will recoil back to 0 (or another value as
|
|
set through IN8-15).
|
|
For a button, the focus signal is always equal to the raw signal.
|
|
|
|
IN8-15
|
|
Alternative output value
|
|
The value received here is the alternative output value used if IN16-23
|
|
is 1.
|
|
|
|
IN16 to IN23 toggles passthrough mode and selects which output signal to use
|
|
for the corresponding OUTn.
|
|
A binary value of 0 means the control panel output value is used (from widgets on the screen),
|
|
and a binary value of 1 means the widget is ignored and
|
|
|
|
Example 1) Toggle button
|
|
We want a button that each time pressed changes its state. We want the state to be reflected on
|
|
the visible button.
|
|
Add a button widget to OUT0, and connect OUT0 to a Sparsifier. Then connect the Sparsifier to a Toggler.
|
|
The output of the Toggler is the value we want.
|
|
Send the toggler output to IN0 (report value) and also your own electronics.
|
|
|
|
Example 2) Slider with recoil
|
|
Add a slider widget to OUT0.
|
|
Connect OUT8 (focus) to an Inverter and then to IN16 (Value select).
|
|
The slider will now recoil to 0 when not focused (inverted focus value = 1),
|
|
if you want it to recoil to another value than 0, for example 0.5, then connect
|
|
something to IN8 (Set value). 0 is the default value if nothing is connected.
|
|
|
|
Example 3) Slider with springy Recoil
|
|
We want to create a slider with a recoil effect that acts like a spring
|
|
and does not instantly go back to 0.
|
|
Add a slider widget to OUT0.
|
|
Connect OUT8 (focus) to an Inverter and then to IN16 (Value select).
|
|
Connect OUT0 (raw signal) to your own electronics and separately to a Square component.
|
|
Connect the Square component to IN8 (Set value).
|
|
|
|
|
|
-----
|
|
|
|
Series Circuit (1 in, multiple out)
|
|
WHAT WE KNOW: constant current to all out
|
|
WHAT WE CALCULATE: total resistance
|
|
NEED: voltage per component
|
|
|
|
IN voltage unknown
|
|
IN current unknown
|
|
|
|
SOLVE
|
|
|
|
total current = 1.f / total_resistance;
|
|
<- resistance
|
|
|
|
APPLY
|
|
|
|
|
|
/* push components back to the bottom series circuit */
|
|
|
|
if (in[0].is_series_circuit()) {
|
|
circuit *c = in[0];
|
|
|
|
while (c->in[0] && c->in[0].is_series_circuit())
|
|
c = c->in[0];
|
|
|
|
c->push(this);
|
|
return DONE;
|
|
} else {
|
|
|
|
float t_res = 0;
|
|
float num_components = my_components;
|
|
|
|
if (this->num_ready == this->num_components) {
|
|
for (int x=0; x<num_components; x++) {
|
|
float r = get_resistance(out[x]);
|
|
t_res += r;
|
|
}
|
|
|
|
float t_current = V / t_res;
|
|
float current = t_current / num_components;
|
|
|
|
for (int x=0; x<num_components; x++) {
|
|
float r = get_resistance(out[x]);
|
|
|
|
}
|
|
} else
|
|
return NOT_DONE;
|
|
|
|
}
|
|
|
|
Parallel Circuit (1 in, multiple out)
|
|
WHAT WE KNOW: constant voltage to all out
|
|
WHAT WE CALCULATE: total resistance
|
|
NEED: current per component
|
|
|
|
float t_res = 0;
|
|
|
|
for (int x=0; x<num_out; x++) {
|
|
float r = 1.f / get_resistance(out[x]);
|
|
t_res += r;
|
|
}
|
|
|
|
t_res = 1.f / t_res;
|
|
|
|
-----
|
|
|
|
CT Pass
|
|
|
|
Constant power passthrough.
|
|
|
|
IN0: Power
|
|
OUT0: Motor
|
|
|
|
-----
|
|
|
|
CT Mini
|
|
|
|
Simplest controllers of them all.
|
|
Control the speed of a motor.
|
|
|
|
OUT0: Motor interface (blue cable)
|
|
IN0: Power
|
|
IN1: Speed control
|
|
|
|
-----
|
|
|
|
CT Feedback
|
|
|
|
Feedback motor controller.
|
|
OUT0: Motor interface
|
|
OUT1: Speed feedback
|
|
OUT2: Torque/force feedback
|
|
OUT3: Error feedback
|
|
|
|
IN0: Power
|
|
IN1: Speed control
|
|
|
|
-----
|
|
eer
|
|
CT Servo
|
|
|
|
OUT0: Motor Interface
|
|
OUT1: Angle/translation feedback
|
|
OUT2: Torque/force feedback
|
|
|
|
IN0: Power
|
|
IN1: Angle/translation control
|
|
|
|
-----
|
|
|
|
Level
|
|
|
|
Package & level ID
|
|
0 - 50000 Official
|
|
50000 - 100000 Local
|
|
100000 - inf Community
|
|
|
|
Properties
|
|
Local ID
|
|
Community ID
|
|
Derivation ID
|
|
Package ID
|
|
Description
|
|
Allow derivatives
|
|
Name
|
|
|
|
Categories:
|
|
Puzzle
|
|
Puzzle Adventure
|
|
Freebuild
|
|
Minigame
|
|
Puzzle Solution
|
|
|
|
FILES:
|
|
eer
|
|
data/pkg/Puzzle/0.plvl
|
|
data/pkg/Puzzle Adventure/0.plvl
|
|
data/pkg/Minigames/0.plvl
|
|
|
|
sdcard/pkg/0/0.plvl
|
|
sdcard/dl/0.plvl
|
|
sdcard/sandbox/0.plvl
|
|
|
|
-----
|
|
|
|
Settings
|
|
|
|
UI
|
|
[_1.0_] Sandbox menu scale
|
|
[_1.0_] On-screen buttons scale
|
|
|
|
[_1.0_] Sandbox menu scroll speed
|
|
[_1.0_] Game scroll speed
|
|
[_1.0_] Game zoom speed
|
|
|
|
[_20_] Button error tolerance
|
|
If you have trouble clicking buttons
|
|
and other small icons, increase this number.
|
|
(default 20)
|
|
[_20_] Drag threshold
|
|
If your device is over-sensitive to touch events,
|
|
try increasing this number (default 20)
|
|
|
|
Graphics
|
|
|
|
Load Preset Quality:
|
|
(Low) (Medium) (High) (Ultra)
|
|
|
|
Shadow Map Softness
|
|
[----#----]
|
|
|
|
Shadow Map Precision
|
|
(8-bit) (16-bit)
|
|
|
|
Shadow Map Resolution
|
|
(256x128) (256x256) (512x256) (512x512)
|
|
(1024x512) (native)
|
|
|
|
Lighting
|
|
[ ] Gamma Correct
|
|
Enable this to make the luminance transition
|
|
from fully lit to shadowed more realistic.
|
|
The effect is only noticable on smooth surfaces
|
|
near perpendicular to the light direction. If your
|
|
device has a very high screen resolution performance
|
|
will most likely take a noticable hit. If your device
|
|
is fast enough with this option enabled, it is
|
|
recommended to enable it since the subliminal
|
|
effect greatly increases the realism and removes
|
|
the typical "old 3d video game" look.
|
|
|
|
|
|
-----
|
|
|
|
Control Panel
|
|
|
|
Widgets:
|
|
Left arrow
|
|
Right arrow
|
|
Up arrow
|
|
Down arrow
|
|
Toggle button
|
|
Button
|
|
Slider
|
|
Hold Slider
|
|
V Slider
|
|
V Hold Slider
|
|
:wq
|
|
|
|
-----
|
|
|
|
Water tank?
|
|
|
|
-----
|
|
|
|
Objects
|
|
|
|
Basic
|
|
- Plank
|
|
- Thick plank
|
|
Plank with cut edges
|
|
- Cylinder
|
|
- Ball
|
|
- Dummy
|
|
- Wall shelf
|
|
Iron Cube
|
|
- Ball
|
|
Magnet
|
|
Weight
|
|
- Rails (TODO: reposition)
|
|
|
|
Mechanics
|
|
- Rope
|
|
- Trampoline
|
|
Conveyor belt
|
|
Damper (2 sizes)
|
|
Angular damper
|
|
- Cog wheel
|
|
- Wheel with tire
|
|
Propeller
|
|
Rubber band
|
|
Suction cup
|
|
Lever
|
|
- Seesaw base (BUGGY, SOFT)
|
|
Open pivot
|
|
|
|
Robotics
|
|
Wall-fixed Motor
|
|
Motor
|
|
Linear motor
|
|
?Bistable linear motor
|
|
Gasoline/combustion engine
|
|
Rocket engine
|
|
Servo motor
|
|
Linear servo motor
|
|
|
|
Electronics
|
|
Battery
|
|
- Generator
|
|
- Power cable (TODO: size)
|
|
- Red cable (TODO: don't connect to same obj)
|
|
Cable pipeline?
|
|
- Control Panel
|
|
- Switch
|
|
Hub
|
|
Button
|
|
Toggle button
|
|
LED lamp
|
|
Wireless connection
|
|
- Magnetic plug
|
|
- Magnetic socket
|
|
- Breadboard
|
|
|
|
- Gyroscope
|
|
Motion detector
|
|
Proximity sensor
|
|
Inductive sensor
|
|
Tiltmeter
|
|
Scanner
|
|
|
|
Components
|
|
- XOR gate
|
|
- OR gate
|
|
- AND gate
|
|
- NAND gate
|
|
- IF gate
|
|
- Inverter
|
|
- Square
|
|
- Sqrt
|
|
- FIFO queue
|
|
- Floor
|
|
- Debugger
|
|
- Sparsifier
|
|
- Sparsifier+
|
|
- Clamp
|
|
- Moving Average
|
|
- Charged Average
|
|
- Epsilon
|
|
- Toggler
|
|
- Value shift (add x, wrap around)
|
|
Jumper (0)
|
|
Jumper (1)
|
|
|
|
Misc
|
|
Gas balloon
|
|
Needle
|
|
Mine
|
|
- Plastic Cup
|
|
- Sticky note
|
|
Navigator (points to goal)
|
|
|
|
Gameplay
|
|
Robot
|
|
- Command pad
|
|
- Command broadcaster
|
|
Goal
|
|
Blockerbot
|
|
Blockfield
|
|
Camera marker
|
|
Dragfield
|
|
|
|
|
|
|
|
------------------------------------------
|
|
|
|
---
|
|
|
|
Game Manager
|
|
|
|
Various I/O to control level completion and scoring.
|
|
|
|
The game ends if a value of 1 is sent to either IN0
|
|
or IN1. If the game is lost, no highscore is saved.
|
|
|
|
The game may also end automatically if the final score is reached.
|
|
|
|
IMPORTANT: If OUT0 is used, the game will not automatically
|
|
end when the final score is reached.
|
|
To automatically end the game when the final score is reached,
|
|
either a) Wire OUT0 to a Floor component and then to IN0 (win), or
|
|
b) leave OUT0 disconnected.
|
|
|
|
NOTE: OUT0 can be used to check whether the final
|
|
score has been reached. You may want to use a Floor component
|
|
to filter this value before you pass it on to binary devices,
|
|
otherwise a value of 0.5 (half final score reached) will be interpreted
|
|
by the binary device as a value of 1.
|
|
|
|
NOTE: If electronics prevent the game from ending when the final score has been
|
|
reached, subsequent score additions or subtractions will still be effective.
|
|
To prevent this, you can Floor and Invert OUT0 and use the value as a conditional
|
|
for incoming values.
|
|
|
|
IN0: Player wins the game
|
|
IN1: Player loses the game
|
|
IN2: Score +100
|
|
IN3: Score +250
|
|
IN4: Score +500
|
|
IN5: Score +1000
|
|
IN6: Score +10000
|
|
IN7: Score -100
|
|
IN8: Score -250
|
|
IN9: Score -500
|
|
IN10: Score -1000
|
|
IN11: Score -10000
|
|
OUT0: Output current score as a fraction: current_score/max_score.
|
|
If there is no max score, 0 is always output.
|
|
|
|
---
|
|
|
|
Open pivot
|
|
|
|
A rotary joint that allows slight relative movement, can help a
|
|
mechanical system from locking itself.
|
|
|
|
---
|
|
|
|
Seesaw base
|
|
|
|
A seesaw base, attach a plank to the anchor point to create a seesaw.
|
|
Allows two objects in the same layer to rotate around each other.
|
|
|
|
The bottom can be attached to other objects.
|
|
|
|
---
|
|
|
|
Cable pipeline
|
|
|
|
Use this socket to connect electronics from one layer to another.
|
|
NOTE: You MUST nail this object to something else first before you
|
|
can use it. If you hang it freely you will NOT be able to connect any
|
|
cables to it.
|
|
|
|
Contains two pipelines, one from the top-most layer to the bottom, and one from
|
|
the bottom-most layer to the top.
|
|
|
|
---
|
|
more work on if gate done
|
|
IF gate
|
|
|
|
If IN1 is logical 1, forward IN0 as-is to OUT0, otherwise output 0 to OUT0.
|
|
This is essentially an AND gate that preserves the smoothness of the signal.
|
|
|
|
---
|
|
|
|
Gyroscope
|
|
|
|
Stabilization device with two output signals, one for clockwise rotation
|
|
and one for counter-clockwise rotation.
|
|
|
|
Properties:
|
|
Sensitivity
|
|
Relative angle (if enabled, full revolutions are allowed and a discontinuity at 180 degrees
|
|
switches the reported direction)
|
|
|
|
OUT0: Outputs a value between 0-1 depending on the counter-clockwise rotation of the gyroscope.
|
|
OUT1: Outputs a value between 0-1 depending on the clockwise rotation of the gyroscope.
|
|
|
|
---
|
|
|
|
Toggler
|
|
|
|
Whenever a bit of 1 is read as input, the output stream is toggled.
|
|
|
|
Example:
|
|
0001001000010
|
|
->
|
|
0001110000011
|
|
|
|
Use in combination with the sparsifier and the effect on control panel buttons
|
|
is a "checkbox" that can be toggled on/off.
|
|
|
|
---
|
|
|
|
Epsilon
|
|
|
|
Add a very small value (1e-5) to the input signal before passing it on.
|
|
Use this component for systems where the output value does not converge to
|
|
the output limit. For example, a series of Square root components will never
|
|
reach exactly 1, but the Floor component requires a value of exactly 1 to
|
|
output 1.
|
|
|
|
---
|
|
|
|
Clamp
|
|
|
|
Clamp the input signal to a given minimum and maximum value.
|
|
|
|
To invert the clamp, set the maximum to a lower value than the minimum,
|
|
the input signal will then be clamped outside of the range.
|
|
|
|
|
|
---
|
|
|
|
Moving Average
|
|
|
|
Output a value according to:
|
|
|
|
I := xa + I(1-a)
|
|
|
|
Where 'x' is the input signal, 'I' is the internal value
|
|
and 'a' is a weight factor.
|
|
I is always initially 0.
|
|
|
|
Example usage:
|
|
Connect a Moving Average component to a Floor component, the input
|
|
value of the system will "charge" for some time depending on the
|
|
Moving Average's weight factor, before a 1 is output.
|
|
|
|
---
|
|
|
|
0-reset Moving Average
|
|
|
|
Identical to Moving Average, but resets itself if an input signal
|
|
of exactly 0 is received:
|
|
|
|
I: = / x > 0 : xa + I(1-a)
|
|
\ x = 0 : 0
|
|
|
|
Where 'x' is the input signal, 'I' is the internal value
|
|
and 'a' is a weight factor.
|
|
I is always initially 0.
|
|
|
|
---
|
|
|
|
Sparsifier
|
|
|
|
Output 1 if the input is 1 and the previous tick's input was not 1.
|
|
|
|
Example:
|
|
000011110000
|
|
->
|
|
000010000000
|
|
|
|
Use this gate to, for example, convert control panel button presses to button clicks.
|
|
|
|
---
|
|
|
|
Sparsifier+
|
|
Output 1 if the current input signal is not equal to the last input signal.
|
|
Essentially, bit noise is smoothed out and coherent signal streams are turned into sparse noise.
|
|
|
|
Example
|
|
00001111000010
|
|
->
|
|
00001000100011
|
|
|
|
Example:
|
|
01010101
|
|
->
|
|
01111111
|
|
|
|
Use this gate to do, for example, nothing. :(
|
|
|
|
---
|
|
|
|
Switch
|
|
|
|
5 OUT, 3 IN
|
|
|
|
The input signal is sent to any of the 5 outputs. Initially, the signal is sent to OUT0.
|
|
The two right inputs switch which output receives the signal.
|
|
If a 1 is sent to IN2, the next output is selected, if a 1 is sent to IN1, the previous output
|
|
is selected. A sparsifier can help filter out too much data.
|
|
|
|
---
|
|
|
|
A wooden plank.
|
|
Any of the two ends of a plank can be attached to other objects
|
|
by placing them near the object and clicking the appearing icon.
|
|
|
|
Material:
|
|
The plank is light, slightly bouncy and has low friction.
|
|
|
|
Electronics:
|
|
None.
|
|
|
|
---
|
|
Wheel and tire
|
|
Can be attached to objects that are not in the same layer as the wheel itself.
|
|
|
|
Material:
|
|
It is pretty heavy, has high friction, and bouncy.
|
|
|
|
Electronics:
|
|
None. Must be connected to a motor.
|
|
|
|
---
|
|
Blocker
|
|
|
|
Annoying enemies who try to block the robot by standing in front of him.
|
|
|
|
Material:
|
|
Hollow light metal. Low friction, very low bounciness, light weight.
|
|
|
|
Electronics:
|
|
None.
|
|
|
|
---
|
|
Robot
|
|
|
|
Material:
|
|
The robot is hollow making it light, it has low friction and medium bounciness.
|
|
|
|
Electronics:
|
|
Can be remote controlled in the Robot play mode. Responds to commands
|
|
when stepping on a command pad.
|
|
|
|
---
|
|
Suction cup
|
|
|
|
Automatically attaches to objects in-game. High forces detach the cup.
|
|
|
|
Material:
|
|
Wood. Same properties as wooden plank.
|
|
|
|
Electronics:
|
|
One red wire socket for on/off control.
|
|
|
|
---
|
|
Metal shelf
|
|
|
|
Static object attached to the wall.
|
|
|
|
Material:
|
|
Iron. Low friction and low bounciness.
|
|
|
|
Electronics:
|
|
None.
|
|
|
|
---
|
|
Command Pad
|
|
|
|
When a robot steps on the command pad, the pad sends a command to the robot.
|
|
Commands include: turn left, turn right, switch layer, jump, aim, shoot
|
|
|
|
Material:
|
|
Plastic. Low friction, medium bounciness.
|
|
|
|
Electronics:
|
|
One red wire socket. If nothing is connected, the command pad acts as if receiving
|
|
a signal of 1.
|
|
Different action depending on command:
|
|
STOP - Send stop command on signal 1, otherwise no command.
|
|
STARTSTOP - Send start command on signal 1, stop command on signal 0.
|
|
RIGHT - Turn right on signal 1, nothing on signal 0.
|
|
LEFT - Turn left on signal 1, nothing on signal 0.
|
|
LEFTRIGHT - Turn left on signal 0, right on signal 1.
|
|
JUMP - Jump on signal 1, nothing on signal 0.
|
|
AIM - On signal 1, set the angle of the right arm to the constant angle. Nothing on signal 0.
|
|
SHOOT - On signal 1, shoot. On signal 0, do nothing.
|
|
LAYER+ - On signal 1 step one layer out from the wall. On signal 0 do nothing.
|
|
LAYER- - On signal 1 step one layer in towards the wall. On signal 0 do nothing.
|
|
|
|
---
|
|
Wall-attached motor
|
|
|
|
A static motor attached to the wall. The motor has two modes, passive and active.
|
|
When active, input power is used to rotate the motor.
|
|
When passive, input power is used to counteract rotation.
|
|
|
|
Material:
|
|
Iron.
|
|
|
|
Properties:
|
|
- Default mode
|
|
Passive or active. This is the default mode used when a red wire is not connected
|
|
or when 0 is received through the wire.
|
|
|
|
Electronics:
|
|
One power wire socket.
|
|
One red wire socket for toggling passive/active.
|
|
|
|
---
|
|
Motor
|
|
|
|
Electronics:
|
|
IN0
|
|
|
|
---
|
|
|
|
Magnetic IN-socket
|
|
|
|
Automatically attaches to nearby magnetic OUT-socket (if compatible signal type).
|
|
Can be used for either power or signaling.
|
|
|
|
OUT0: Received signal
|
|
IN0: Alternative input (data discarded if connected to magnetic socket)
|
|
|
|
---
|
|
Magnetic OUT-socket
|
|
|
|
Automatically attaches to nearby magnetic IN-socket (if compatible signal type).
|
|
Can be used for either power or signaling.
|
|
|
|
IN0: Input signal to be forwarded
|
|
OUT1: Alternative output (not used if connected to a magnetic socket)
|
|
|
|
---
|
|
|
|
Wireless transmitter
|
|
|
|
One sender and one receiver.
|
|
|
|
|
|
---
|
|
Motor
|
|
|
|
Electronics:
|
|
IN0: Power
|
|
IN1: Power control
|
|
IN2: Speed vs torque control (0 is fastest, 1 is strongest)
|
|
|
|
---
|
|
|
|
Feedback motor
|
|
|
|
Motor with speed and torque feedback.
|
|
|
|
Output speed is a value between 0 and 1, where 0
|
|
is no angular movement and 1 is the maximum possible
|
|
speed as determined by the speed vs torque tradeoff
|
|
setting.
|
|
|
|
Output torque is a value between 0 and 1 where 0
|
|
means essentially no torque is required to keep the
|
|
motor spinning. A value of 1 means the maximum
|
|
amount of torque is being applied but the motor is
|
|
still not spinning.
|
|
|
|
The error feedback outputs exactly 1 when an "error" is detected.
|
|
Errors are due to external forces that prevent the motor from rotating
|
|
or cause the motor to rotate in the wrong direction. Note that
|
|
this signal can be very noisy when the motor is stuck.
|
|
|
|
Example 1) Motor is stuck
|
|
Torque feedback: 1
|
|
Speed feedback: 0
|
|
Error feedback: 1 or 0 (noisy)
|
|
|
|
Example 2) Motor is rotating in the wrong direction
|
|
Torque feedback: 1
|
|
Speed feedback: 0
|
|
Error feedback: 1
|
|
|
|
Example 3) Motor is running at full speed
|
|
Torque feedback: 0 or close to 0
|
|
Speed feedback: 1
|
|
Error feedback: 0
|
|
|
|
Electronics:
|
|
|
|
IN0: Power
|
|
IN1: Power control
|
|
IN2: Speed vs torque control
|
|
OUT0: Speed feedback
|
|
OUT1: Torque feedback
|
|
OUT2: Error feedback
|
|
|
|
---
|
|
|
|
Servo motor
|
|
|
|
Angle control, angle will be equal to '2pix' where 'x' is the input
|
|
control value.
|
|
The current angle of the motor is converted to an output feedback signal using
|
|
'x = a/(2pi)' where 'a' is the current angle and 'x' is the output value.
|
|
|
|
The servo motor always takes the shortest path to the target angle, so
|
|
for instance if the target value is 0.1 and the current value is 0.9,
|
|
the difference is calculated as +0.2 instead of -0.8, which will result
|
|
in a value of 1.1. This conversion is done internally and is not reflected,
|
|
in the output feedback value, which will send 0.1 if the internal value is 1.1.
|
|
Likewise, if the motor has wrapped around many times and has an internal value of,
|
|
for instance, 10.1, a target value of 0.2 will be interpreted as 10.2.
|
|
|
|
Electronics:
|
|
IN0: Power
|
|
IN1: Servo control
|
|
IN2: Speed vs torque control (0 is fastest, 1 is strongest)
|
|
OUT0: Feedback
|
|
|
|
---
|
|
|
|
Linear servo motor
|
|
|
|
Linear servo motor where an input value of 0 is one end of the
|
|
motor and an input value of 1 is the other end. The motor is not bistable
|
|
and has a fixed speed vs force tradeoff.
|
|
|
|
Electronics:
|
|
IN0: Power
|
|
IN1: Servo control
|
|
OUT0: Feedback
|
|
|
|
---
|
|
|
|
Linear motor
|
|
|
|
If recoil is enabled and the speed of the motor is 0, full force is applied
|
|
in the reverted direction.
|
|
|
|
When the recoil effect is active, all feedback data sent through the interface
|
|
is relative to the recoil direction.
|
|
|
|
Errors are reported through the interface if the motor is unable to move, unless
|
|
it has reached its final position (any of the two ends depending on direction/recoil).
|
|
Errors are always reported if the motor is moving in the wrong direction.
|
|
|
|
|
|
Properties:
|
|
- Speed/force tradeoff (internal gearing)
|
|
- Recoil enable/disable
|
|
|
|
Electronics:
|
|
IN0: Control and power interface
|
|
|
|
Electronics:
|
|
IN0: Power
|
|
IN1: Power control
|
|
IN2: Speed/force tradeoff (replaces property value)
|
|
|
|
---
|
|
Generator
|
|
|
|
Generate electricity for powering electronic devices.
|
|
|
|
Material:
|
|
Iron. Heavy weight, low friction, low bounciness.
|
|
|
|
Electronics:
|
|
OUT0: Power output
|
|
IN0: Voltage control
|
|
|
|
---
|
|
Button
|
|
|
|
A one-time button, outputs 0 by default and 1 continuously once clicked.
|
|
The bottom of the button can be attached to most surfaces.
|
|
|
|
Material:
|
|
Iron.
|
|
|
|
Electronics:
|
|
One red wire out-socket.
|
|
|
|
---
|
|
Toggle button
|
|
|
|
Switches between 0 and 1 red wire output every click.
|
|
|
|
Material:
|
|
Iron.
|
|
|
|
Electronics:
|
|
One red wire out-socket.
|
|
|
|
---
|
|
Lever
|
|
|
|
Sends a smooth red wire signal any percentage between 0 and 1. Maximum
|
|
clockwise position is 1 and maximum counter-clockwise position is 0.
|
|
|
|
Logical devices will round smooth red wire signals to the nearest value.
|
|
When the lever is in the centre position (0.5) logical devices treat
|
|
the signal as 1.
|
|
|
|
Non-logical devices have specific behaviour. For example, a smooth
|
|
red wire signal received by a generator affects the voltage and current.
|
|
|
|
Material:
|
|
Iron.
|
|
|
|
Electronics:
|
|
One red wire out-socket.
|
|
|
|
---
|
|
Scanner
|
|
|
|
Scans for movement. Outputs 1 when movement is detected and 0 otherwise.
|
|
|
|
Electronics:
|
|
1 input power socket.
|
|
1 output signal socket, for reporting movement.
|
|
|
|
---
|
|
Red wire
|
|
|
|
Used for message signaling. Most messages are either 0 or 1 (for on/off signaling),
|
|
but messages are allowed to be any number between 0 and 1 and are then referred to as
|
|
"smooth" messages.
|
|
Most devices don't handle smooth messages but round the value to the nearest value of
|
|
either 0 or 1, exceptions include the generator which can use the smooth value to
|
|
control its voltage and current output.
|
|
|
|
The bandwidth of the wire is 50 messages per second.
|
|
|
|
---
|
|
Power wire
|
|
|
|
The power wire is black and delivers power to devices.
|
|
|
|
---
|
|
Hub
|
|
|
|
Combines multiple input power signals and distributes to output devices.
|
|
|
|
---
|
|
OR device
|
|
|
|
If the rounded value of any input signal is 1, output 1.
|
|
|
|
---
|
|
AND device
|
|
|
|
If the rounded value of both input signals are 1, output 1.
|
|
|
|
---
|
|
XOR device
|
|
|
|
If the rounded value of any, but not both, input signal is 1, output 1.
|
|
|
|
---
|
|
Inverter
|
|
|
|
Inverts the given signal, 0 becomes 1 and 1 becomes 0.
|
|
For smooth signals, the output is 1-x where x is the input signal.
|
|
|
|
---
|
|
Floor
|
|
|
|
Converts smooth signals to non-smooth signals without rounding.
|
|
Any input value below 1 is equal to an output value of 0.
|
|
|
|
---
|
|
FIFO queue
|
|
|
|
First-in-first-out queue with an initial buffer of 8 extra 0-messages.
|
|
Approximately 50 messages are passed through red wires every second.
|
|
This means a series of 6 delayers will cause roughly 1 second delay before
|
|
the message arrives.
|
|
|
|
---
|
|
Square
|
|
|
|
Raises the given input signal to the power of 2.
|
|
Does not affect non-smooth signals.
|
|
|
|
For smooth signals, the rounding threshold which separates
|
|
logical values of 0 and 1 is raised
|
|
from 0.5 to an input value of approximately 0.707 (0.707*0.707 is ~0.5).
|
|
|
|
---
|
|
Square root
|
|
|
|
Outputs the square root of the input signal.
|
|
Does not affect non-smooth signals.
|
|
|
|
Note that since signals are in the range from 0 to 1,
|
|
contrary to what one might intuitively think, the square
|
|
root component will actually amplify the signal. For example
|
|
a signal of 0.5 is converted to ~0.707. Consequently
|
|
for subsequent components, the rounding threshold
|
|
which separates logical values of 0 and 1 is lowered
|
|
from 0.5 to an input value of approximately 0.25.
|
|
|
|
|
|
------------------------------------- CREDITS --------------------------------------
|
|
|
|
Principia
|
|
Copyright (c) 2012 Bithack AB
|
|
|
|
Programming, graphics, 3d modeling, sfx engineering and other crap
|
|
Emil Romanus
|
|
|
|
Music
|
|
Daniel Hjerth
|
|
|
|
----
|
|
|
|
"Roboto" font (c) Google Inc.
|
|
"Easy Speech" font (c) Jean-Jacques Morello
|
|
|
|
|
|
------------------------------------------------------------------------------------
|
|
|
|
Write to file
|
|
|
|
of::write
|
|
uint8 g_group
|
|
uint8 g_child
|
|
uint32 id
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
|
|
If in group _ is the body-local coords.
|
|
|
|
------------------------------------ ACHIEVEMENTS -------------------------------------------
|
|
|
|
Headstand
|
|
(The robot lands on its head and stabilizes in that position.)
|
|
|
|
Smartass
|
|
(Follow an exponent gate by a sqrt gate, or vice versa)
|
|
|
|
Star Collector
|
|
(Collect 50 stars.)
|
|
|
|
Gravedigger
|
|
(High angular velocity of the robot.)
|
|
|
|
Superman
|
|
(The robot flies a long horizontal distance with low angular displacement.)
|
|
|
|
Gouranga Las Vegas
|
|
(5 robots walking in the same direction)
|
|
|
|
Harakiri
|
|
(Shoot a land mine while standing next to it)
|
|
|
|
World War 3
|
|
(10 land mines exploding in a chain reaction)
|
|
|
|
Big Daddy
|
|
Drive a vehicle that shoots rockets
|
|
|
|
Woodstock
|
|
100 pieces of wood on the board
|
|
|
|
Noob
|
|
Play a puzzle 10 times without moving anything
|
|
|
|
Sonic
|
|
Robot speed > 250
|
|
|
|
------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------
|
|
Community Section
|
|
|
|
SLOW CONNECTIONS !!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
Hopkopplat kontosystem med phpBB eller annat simpelt forumsystem.
|
|
|
|
Varje bana som laddas upp blir en forumtrod.
|
|
Troden embeddas och ser ut som ett kommentarsfaelt naer man tittar
|
|
po level description i communityt.
|
|
Ska aeven go att posta fron levelsidan
|
|
|
|
Behoever antispamsystem, kunna markera banor, kommentarer och rapportera
|
|
anvendare som spam.
|
|
|
|
DB:
|
|
|
|
- level -
|
|
id, autoincrement
|
|
parent_id
|
|
solution_parent_id
|
|
user_id
|
|
creation_date
|
|
modified_date
|
|
title VARCHAR(255)
|
|
description TEXT
|
|
type ENUM puzzle,adventure,freebuild,minigame,solution
|
|
status ENUM pending,published,removed
|
|
screenshot_status ENUM working,done,error
|
|
bool allow_derivatives
|
|
num_downloads
|
|
num_views
|
|
num_thumbs
|
|
|
|
nycklar:
|
|
|
|
id PRIMARY
|
|
type+status INDEX
|
|
creation_date INDEX
|
|
title+description FULLTEXT
|
|
|
|
eller nogot sont
|
|
|
|
CREATE TABLE principia_web.level (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
`parent_id` INT UNSIGNED,
|
|
`solution_parent_id` INT UNSIGNED,
|
|
`user_id` INT UNSIGNED,
|
|
`creation_date` DATETIME NOT NULL,
|
|
`modified_date` DATETIME,
|
|
`title` VARCHAR(255) NOT NULL,
|
|
`description` TEXT,
|
|
`type` ENUM('Puzzle', 'Adventure', 'Custom', 'Puzzle Solution') NOT NULL,
|
|
`status` ENUM('Pending', 'Published', 'Removed') NOT NULL,
|
|
`screenshot_status` ENUM('Working', 'Done', 'Error') NOT NULL,
|
|
`allow_derivatives` BOOL,
|
|
`num_downloads` INT DEFAULT 0,
|
|
`num_views` INT DEFAULT 0,
|
|
`num_thumbs` INT DEFAULT 0,
|
|
);
|
|
|
|
CREATE INDEX `type_status`
|
|
ON `level` (`type`, `status`);
|
|
CREATE INDEX `creation_date`
|
|
ON `level` (`creation_date`);
|
|
|
|
- -
|
|
|
|
----
|
|
|
|
Levels
|
|
|
|
Build a bistable linear servo motor.
|
|
|
|
----
|
|
|
|
----
|
|
|
|
MODEL STUFF
|
|
|
|
Socket dimensions:
|
|
.25 x .25 x .25
|
|
|
|
z = .375
|
|
|
|
|
|
|
|
|
|
----
|
|
|
|
EXTRA PAUSE BUTTON
|
|
nej
|
|
|
|
|
|
+0+++
|
|
|
|
Hey! Sorry to interrupt you, but...
|
|
|
|
It seems that the temperature of your Android device is getting
|
|
very hot. This can severly affect performance and make
|
|
Principia run very slowly, ruining the experience.
|
|
|
|
When the temperature rises, Android automatically
|
|
decreases the performance to keep your device from overheating.
|
|
This is called CPU throttling.
|
|
|
|
If you notice periodic slowdowns in performance, you should
|
|
open up the graphics options and lower the settings. This
|
|
will save battery life and increase the performance.
|
|
|
|
Have fun.
|
|
|
|
|
|
|
|
|
|
--------------
|
|
Level properties
|
|
|
|
Type: Freebuild, Puzzle, Minigame
|
|
|
|
Name
|
|
Description
|
|
|
|
Width
|
|
Height
|
|
Background
|
|
Gravity
|
|
|
|
Gameplay
|
|
Final score [ ]
|
|
|
|
Physics
|
|
- Position iterations
|
|
- Velocity iterations
|
|
|
|
Community
|
|
[ ] Allow saving for offline play
|
|
[ ] Allow derivative works (sandbox download)
|
|
|
|
|
|
TODO
|
|
|
|
Note Block - Plays an instrument-like noise, with a setting for pitch?
|