Custom hardware controls for Empty Epsilon?

Hi all,

I've dropped off the board lately, life getting in the way and all that, but I have a couple of dreams I'm hoping to tinker with and wondering if someone can tell me how plausible they are.

Go big or go home: The Engineering Station

I've got a couple of Teensy boards on order for this, basically I'm thinking of building a custom control much like a lighting or audio desk with motorized sliders, so the engineer can adjust the energy and coolant levels using that. I assume I should be able to utilize the built-in webserver to make this work? Basic points I've already thought about are:

- Could just buy a midi desk and start with that.
Yeah but why would I want to buy a midi desk when it won't be quite right, won't let me enjoy figuring out how to build it and won't cost as much as a custom build likel will by the time I'm done :P
- Motorized Sliders
Not really needed for Power but it seems to me I should have this for coolant so when you change one system and it redistributes across others this is mirrored on the board. Plus that's just cooler, right?
- That's a lot of sliders...
Yeah I probably would want to support the full possible 18 sliders to cover the 9 possible subsystems (if a ship has both Warp and Jump). I looked at using a MUX with one of the various arduino units but Teensy comes with 21 analog inputs if I recall correctly so that's plenty.
- I don't believe EE supports binding keys to the client
Pretty sure @daid has mentioned this in the past. If that's correct then probably one of the simplest ways it could be achieved is out of the question.
- Pretty sure there's not currently support for setting these levels via script.
If I'm wrong about that, happy days!

More of a Proof of Concept: The Helm Throttle

Probably a better thing to start with, thought I'd look at getting a throttle set up probably just a simple rotating potentiometer with a lever and handle attached, though something closer to the controller here could be cool.

Alternatively could just use a throttle from a H.O.T.A.S. controller set, but this has similar challenges. I do like the idea of having a split throttle where "impulse" is controlled via one axis, then you bring it back to 0 to bring up the warp (which would nicely mirror the in-game behaviour).

Again the issue would seem to be that we don't bind keys to the controls, and there's not currently a way to use a script to say set thrust = X.

Any thoughts? Doomed to failure?


  • Every input that a player can do can be done with the scripting engine as well, which is bound to the internal HTTP server. These functions are also supported client side. Reading data is also supported client side.

    There are key bindings, but you cannot do everything with them.
    PlayerSpaceship:commandTargetRotation(float target)
    PlayerSpaceship:commandImpulse(float target)
    PlayerSpaceship:commandWarp(int8_t target)
    PlayerSpaceship:commandJump(float distance)
    PlayerSpaceship:commandSetTarget(P target)
    PlayerSpaceship:commandLoadTube(int8_t tubeNumber, EMissileWeapons missileType)
    PlayerSpaceship:commandUnloadTube(int8_t tubeNumber)
    PlayerSpaceship:commandFireTube(int8_t tubeNumber, float missile_target_angle)
    PlayerSpaceship:commandSetShields(bool enabled)
    PlayerSpaceship:commandMainScreenSetting(EMainScreenSetting mainScreen)
    PlayerSpaceship:commandMainScreenOverlay(EMainScreenOverlay mainScreen)
    PlayerSpaceship:commandScan(P object)
    PlayerSpaceship:commandSetSystemPowerRequest(ESystem system, float power_level)
    PlayerSpaceship:commandSetSystemCoolantRequest(ESystem system, float coolant_level)
    PlayerSpaceship:commandDock(P station)
    PlayerSpaceship:commandOpenTextComm(P obj)
    PlayerSpaceship:commandAnswerCommHail(bool awnser)
    PlayerSpaceship:commandSendComm(uint8_t index)
    PlayerSpaceship:commandSendCommPlayer(string message)
    PlayerSpaceship:commandSetAutoRepair(bool enabled)
    PlayerSpaceship:commandSetBeamFrequency(int32_t frequency)
    PlayerSpaceship:commandSetBeamSystemTarget(ESystem system)
    PlayerSpaceship:commandSetShieldFrequency(int32_t frequency)
    PlayerSpaceship:commandAddWaypoint(sf::Vector2f position)
    PlayerSpaceship:commandRemoveWaypoint(int32_t index)
    PlayerSpaceship:commandMoveWaypoint(int32_t index, sf::Vector2f position)
    PlayerSpaceship:commandConfirmDestructCode(int8_t index, uint32_t code)
    PlayerSpaceship:commandCombatManeuverBoost(float amount)
    PlayerSpaceship:commandSetScienceLink(int32_t id)
    So, if you want to use a Teensy, it cannot talk to the HTTP server directly. So you need 2 pieces of custom software. One on the teensy that talks to your hardware, and one on the computer that talks to the teensy and the game.
  • edited November 2016
    HOU5E said:

    Hi all,
    - I don't believe EE supports binding keys to the client
    Pretty sure @daid has mentioned this in the past. If that's correct then probably one of the simplest ways it could be achieved is out of the question.

    For the Teensy, I'd have it send keypresses via USB HID keyboard inputs.

    I've considered flying faders (motorized auto-moving sliders) in the past, but, keeping them in sync/aligned correctly between games could be tricky. I plan in using digital encoders; that way I don't have to keep track of their location.

  • @daid oh wow I must have been looking at an old reference for what's available, it looks like between PlayerSpaceship:commandImpulse &
    PlayerSpaceship:commandWarp that's the throttle sorted, and engineering levels are covered by PlayerSpaceship:commandSetSystemPowerRequest &

    Yes I suspected that most of the work would be in writing something to handle the interface between Teensy & the HTTP server. Good to get some confirmation that this seems accurate :smile:
Sign In or Register to comment.