Jump to content

BindControl (alternative to CityBinder)


Recommended Posts

I've just released BindControl 0.5 out into the public eye after 12+ years of on-and-off tinkering.  It's a port / clone++ of the original CityBinder 0.76, rebuilt in Python using the wxWindows toolkit.

 

https://github.com/emersonrp/bindcontrol

 

This is intended as an alternative to CityBinder (both the original and tailcoat's update-in-progress), with the hope of eventually achieving parity with CityBinder's feature set, updated for Homecoming changes.

 

Features include:

  • Custom Binds using PowerBinder
  • Speed-on-Demand binds (currently as implemented in CityBinder;  need updating for Issue 27 travel power changes)
  • Mastermind Binds including Bodyguard Mode support
  • Inspiration Popper
  • Runs on Windows, MacOS, Linux (for my fellow Wine users)

 

Check out the github page for more info.  There's a prerolled Windows .exe on the releases page, and a completely experimental MacOS app in a zipfile.

 

Feedback welcome.  There will be bugs, please file issues on the github page.

 

Thanks to Konoko and Monorail for CityBinder, and to tailcoat for working to preserve and modernize it.  It's still the go-to solution for keybinds;  BindControl is for the brave and reckless.  Please check it out if that's you, and file bugs and give feedback.  Thanks all!

  • Like 4
  • Thumbs Up 1
Link to comment
Share on other sites

  • 2 months later
4 hours ago, DevoDog68 said:

Just came across this. Doesn't look like there's a way to set a doubleclick bind in this.  I use ldblclick for Teleport quite often.

 

Thanks for the report -- I really thought I'd had that in there, but clearly not.  I've just released v0.8.1 which supports right and left double click bindings.

Link to comment
Share on other sites

On 1/29/2023 at 4:53 PM, emersonrp said:

 

Thanks for the report -- I really thought I'd had that in there, but clearly not.  I've just released v0.8.1 which supports right and left double click bindings.

Just downloaded that, but not seeing how you set doubleclick.

Link to comment
Share on other sites

5 minutes ago, DevoDog68 said:

Just downloaded that, but not seeing how you set doubleclick.

It should be that a left double-click in the keybinding dialog box will now show "leftdoubleclick" as the bind, same for right double-click.  If that's not working, please let me know what platform / etc you're running this on and I'll try to duplicate the problem.  It's working for me on Windows 10.

dblclick.png

Link to comment
Share on other sites

A question for you. Some people use movement key binds to cycle between clickable powers like hasten and SR's mez protection, so that it automated clicking them when they become available.

 

I never did this because I use the old SoD bands from Citybinder. Is there a way to incorporate this into the SoD menu options?

Link to comment
Share on other sites

4 hours ago, Marshal_General said:

A question for you. Some people use movement key binds to cycle between clickable powers like hasten and SR's mez protection, so that it automated clicking them when they become available.

 

I never did this because I use the old SoD bands from Citybinder. Is there a way to incorporate this into the SoD menu options?

Ah interesting -- so there would be a list of click powers at the front of the movement binds so it fires whatever is available before starting to move?  I suspect it might end up mutually exclusive with SoD just because the binds might get longer than the allowed 255 characters, but I can totally look into adding that.  The movement / SoD stuff needs a full-on rethink anyway, as it doesn't account for the Homecoming movement power changes from a year or so ago.  I keep postponing thinking about it but maybe now is the time.  Thanks for the feedback, I'll keep y'all posted.

Link to comment
Share on other sites

Would you want my notes on new things I was working on for CityBinder? I could upload the unfinished 4K version if you want to recycle that. I've been haunted by my inability to at least finish that version and I've wanted to pass it on to someone more knowledgeable in programming (my field is art, so I focused a lot on making the UI visually clean and intuitive. I also made the icons).

I haven't been able to work on it in about a year because I started working full-time and often had difficulty getting Lua to do what I want. I think Python is a much better choice for today since it's well-documented, but I don't know Python and forgot most of Lua (I only learned it because I really liked CityBinder 😅 and programming is interesting. I wouldn't mind learning some Python to tinker with modules, but I can't handle making a full-on complicated app such as CityBinder like a dedicated programmer could. I could never figure out how to generate .exe files for systems other than my own Win10 64-bit)

In the unreleased version of CB4HC, I figured out a way to make the app populate a tree of modules based on what's in a folder rather than hardcoding what's available. I figured that would allow the user to easily swap in and out what they wanted (if they aren't sure, they can put those module files into a different folder). The app can also grab some info from a module file and make an info window from it. I wanted to make it easier for people to make and add their own modules. Modules can also be enabled or disabled from the module tree since I wanted to be able to keep the app from generating unnecessary text in the files it spits out.

I was also able to add some QOL fixes like some shortcuts, links to useful sites, clear binds options, and I updated the pop-up keyboard to take keyboard input.

I was hoping since the beginning of CB4HC to be able to create a feature where the user could select from a grid of icons in order to generate the code to paste into the game to generate image macros w/o having to go to a site and find the image name, but that proved difficult with Lua. I managed to make a little test file with a couple of icons. I wanted to be able to have it organizable by hue, symbols, stuff like that.

My favorite module is Inspiration Popper, which I'd started reworking with more options (ex. dual inspirations, team inspirations, and a thing where you can use a key to swap whether you consume the big ones or little ones first). I think "Last Resort" is pretty cool since it allows you to enable consumption of a dual inspiration if you run out of the regular inspiration and push its key bind. I used that a lot while playing.

EDIT: I also added an option to let a player add their Global Name to the beginning of a chat. There's a camera settings module too-- sure, the options are in the game, but if a player wants to keep all their options in one profile and use it as a default for other characters, it's convenient to have it all in one place.

My files also have some new powers, emotes, and commands since 0.76. They were a PITA to copy and organize, so if you need that info, it might save you some time to grab it from them. It wouldn't have anything new from the past year though.

@emersonrp Please let me know if you need anything to help make the app!

image.thumb.png.b253d41546f8011f523f6b0e06bac229.pngimage.thumb.png.4fa75ae355bde93649827c29b8f3bf11.png256px_color_antialiased.png.39752c2dd49fc2691f31d09031667037.png

image.thumb.png.13f4f330d493734c75f96d297864f04c.pngimage.thumb.png.fb71c6e739074ed8f7cf5f9e4fff1c2e.pngimage.png

Edited by Tailcoat
more info
Link to comment
Share on other sites

With BC 0.8.1, if I bind something to ctrl+lclick (for example, Caltrops), I can no longer enter any missions/portals/tram/etc. Clicking (without Shift) triggers that bind.  (Even forcing to LCTRL+LCLICK.)  Also, trying to bind Teleport to a double-click only targets, but never activates the power.

 

Edited by DevoDog68
Link to comment
Share on other sites

On 2/1/2023 at 1:12 PM, Marshal_General said:

I think they do it using the key up and key down. W key is down, you move forward and when you release it, it tries to fire off Hasten.

I've found some info on how people have been doing that for Hasten + Domination, for instance: 

It uses bindloadfile and a few bindfiles to do its magic, which means it's going to be at best difficult to integrate with SoD, since SoD uses its own bindloadfile tricks to do its thing.  That said, it doesn't seem impossible, just complicated.  And again, the implementation of SoD needs a complete rethink anyway since the Homecoming movement power changes, so this is not off the table.

Edited by emersonrp
Link to comment
Share on other sites

On 2/4/2023 at 1:42 PM, Tailcoat said:

Would you want my notes on new things I was working on for CityBinder?

 

I'd -love- to see what you have cooking, yes.  Some of those screenshots are delightful, and so much easier on the eyes than the original CityBinder.  I'm intrigued by your modular concept.  I made the decision early on to turn BindControl into a tab-based interface, which in some ways is easier to deal with, but also makes for weirdly-laid-out tabs for "modules" that have less UI than, say, SoD.  Keeping CityBinder's notion of opening a separate module-managed window for each module has started to seem cleaner as the years have gone on, but I haven't revisited it in a long long time.

 

Your additions to Inspiration Popper totally mirror the half-baked ideas I was thinking about in the back of my head for "someday" so that's very cool to see implemented.

 

The build-a-macro feature seems fun and useful, but having to ship the entire game's icons seems daunting.  Still, BindControl ships a -lot- of the icons already, so that's not completely out of the question.  Cool idea with sorting by color etc.

 

So yea, in short, I'd be delighted to see any notes you have and/or take a look at the unreleased version itself.  Thanks for the offer, and thanks for giving CityBinder some love.

 

 

Link to comment
Share on other sites

1 hour ago, DevoDog68 said:

With BC 0.8.1, if I bind something to ctrl+lclick (for example, Caltrops), I can no longer enter any missions/portals/tram/etc. Clicking (without Shift) triggers that bind.  (Even forcing to LCTRL+LCLICK.)  Also, trying to bind Teleport to a double-click only targets, but never activates the power.

 

 

Hm, I am not able to reproduce this.  When I bind something to ctrl-lclick, it works as expected, and lclick still opens doors and the tram.  However, ctrl-lclick will try to fire the power -and- try to open a door/etc if it's used when the "hand" icon is visible over the door.  I think this is just a consequence of how City of Heroes processes left-click specifically.  I've seen warnings in various bind guides that trying to tinker with left and right click binds can have unexpected results, sadly, since the game treats those specially.

 

Is it possible you accidentally have a bind to just "lclick" or "lbutton" in your binds?  If you do /bindsavefile and look at keybinds.txt?  If that's not the case, toss me your keybinds.txt and your saved BindControl profile and I'll take a look as to what might be happening.

 

As far as binding double-click to Teleport not firing the power, yeah, I see now that my 0.8.1 double-click fix was not adequate -- BindControl needs a separate option that uses "/powexec_location", one of the many Issue 25 additions that I need to integrate.  Currently it just has the binding for the "Teleport" power, which is the basic version that lets you pick the location with a click.  I'll look at adding a "teleport directly to max distance straight ahead" option to bind double-click to.

 

Thanks for the reports!

Edited by emersonrp
Link to comment
Share on other sites

Weird. I can reproduce it every single time.

 

Here are the contents of the profile:

 

---

{
  "General": {
    "Name": "ScavengerHunter",
    "Origin": "Technology",
    "Archetype": "Blaster",
    "Primary": 1,
    "Secondary": 2,
    "Epic": 0,
    "Pool1": 12,
    "Pool2": 6,
    "Pool3": 0,
    "Pool4": 0
  },
  "Gameplay": {
    "TPSEnable": false,
    "TeamEnable": false,
    "ChatEnable": false,
    "QuitToDesktop": "",
    "InviteTarget": "",
    "FPSBindKey": "",
    "NetgraphBindKey": ""
  },
  "CustomBinds": [
    {
      "Type": "SimpleBind",
      "Title": "FFChat",
      "Contents": "beginchat /send \"Fusion Force\" [$name - $level $archetype]: ",
      "Key": "LC+SPACE",
      "PowerBinderDlg": []
    },
    {
      "Type": "SimpleBind",
      "Title": "Caltrops",
      "Contents": "powexecname Caltrops",
      "Key": "LC+LBUTTON",
      "PowerBinderDlg": [
        {
          "Use Power": {
            "method": "powexecname",
            "pname": "Caltrops",
            "picon": "Powers/Devices_Caltrops"
          }
        }
      ]
    }
  ],
  "SoD": {
    "EnableSoD": true,
    "TurnLeft": "Q",
    "Forward": "W",
    "TurnRight": "E",
    "Left": "A",
    "Back": "S",
    "Right": "D",
    "Down": "X",
    "Up": "SPACE",
    "MouseChord": false,
    "DefaultMode": 1,
    "SprintPower": 0,
    "AutoMouseLook": false,
    "AutoRun": "R",
    "Follow": "TILDE",
    "NonSoDEnable": false,
    "SprintSoD": true,
    "ChangeCamera": false,
    "ChangeDetail": false,
    "TPHideWindows": false,
    "Feedback": false,
    "HasSS": false,
    "HasSJ": false,
    "HasCJ": false,
    "HasHover": false,
    "HasFly": false,
    "HasCF": false,
    "HasQF": false,
    "HasTP": true,
    "TPBindKey": "LS+LBUTTON",
    "TPComboKey": "LSHIFT",
    "TPResetKey": "LCTRL+T",
    "HasTTP": false
  },
  "InspirationPopper": {
    "AccuracyKey": "SHIFT+A",
    "AccuracyBorder": "#FFFF00",
    "AccuracyBackground": "#FFFFFF",
    "AccuracyForeground": "#000000",
    "HealthKey": "SHIFT+S",
    "HealthBorder": "#00FF00",
    "HealthBackground": "#FFFFFF",
    "HealthForeground": "#000000",
    "DamageKey": "NUMPAD0",
    "DamageBorder": "#FF0000",
    "DamageBackground": "#FFFFFF",
    "DamageForeground": "#000000",
    "EnduranceKey": "SHIFT+Q",
    "EnduranceBorder": "#0000FF",
    "EnduranceBackground": "#FFFFFF",
    "EnduranceForeground": "#000000",
    "DefenseKey": "SHIFT+W",
    "DefenseBorder": "#800099",
    "DefenseBackground": "#FFFFFF",
    "DefenseForeground": "#000000",
    "ResistDamageKey": "SHIFT+SPACE",
    "ResistDamageBorder": "#E65000",
    "ResistDamageBackground": "#FFFFFF",
    "ResistDamageForeground": "#000000",
    "BreakFreeKey": "SHIFT+E",
    "BreakFreeBorder": "#6E4CC8",
    "BreakFreeBackground": "#FFFFFF",
    "BreakFreeForeground": "#000000",
    "ResurrectionKey": "SHIFT+TILDE",
    "ResurrectionBorder": "#32B4A0",
    "ResurrectionBackground": "#FFFFFF",
    "ResurrectionForeground": "#000000",
    "EnableInspBinds": true,
    "EnableRevInspBinds": false,
    "DisableTells": false
  },
  "Mastermind": {}
}

 

 

Link to comment
Share on other sites

@emersonrp
Ok, I've uploaded my unfinished CityBinder for Homecoming v0.2 files here: https://sourceforge.net/projects/citybinder-for-homecoming/files/unfinished_CB4H_v0.2/

I added a bunch of notes in the Documentation folder on changes I made since 0.76, some issues to resolve, and ideas I wanted to implement. 

 

My LUA files contain various notes explaining things I did, keeping in mind helping potential programmers (or my future self) looking at them. I suffixed them with "-TC". Some of the original author notes are in there too (they're unlabeled).

A couple of files in my project folders relate to an unsuccessful attempt to build a 32-bit version of it in order to reach a wider audience, but that stuff got waaaay too technical for me. The version my .exe file works for is Win10, 64-bit.

If you find any of the info in my SourceForge project's help files useful for explaining features, feel free to recycle it! I'd hoped in the future to perhaps create a how-to video on using it. The tooltips are kind of weird and don't always pop up over sections that would intuitively make sense.

 

Let me know if you have any questions!

Edited by Tailcoat
Link to comment
Share on other sites

3 hours ago, DevoDog68 said:

Weird. I can reproduce it every single time.

 

Here are the contents of the profile:

 

Oh yeah it looks like it's incorrectly building the bind in your case.  Weird that it works in my case but I have a more complicated profile so it probably triggers different code paths.  This is a bug and I am on it, thanks.

Link to comment
Share on other sites

5 hours ago, DevoDog68 said:

Weird. I can reproduce it every single time.

 

I've just released v0.8.2, which should fix this problem.  Unfortunately, you'll need to rebind the misbehaving keys/clicks and resave the profile.  Let me know your luck with this.

Link to comment
Share on other sites

1 hour ago, DevoDog68 said:

LEFTDOUBLECLICK still isn't getting generated properly in the reset.txt file.

 

It gives LEFTDOUBLECLICK "nop" as the entry.

Still for teleport, yeah?  This is very weird, digging in the original generation code, I see that CityBinder quite intentionally does the same thing for -any- value for "Teleport Bind," so it's either a bug left over that I faithfully ported or it's a misunderstanding on everyone's part as to how it was intended to work, but it seems like "Teleport Bind" is, and has been, disabled for a long time.  (The same is true of "Team Teleport Bind")

 

Looks like "Teleport Combo Key" however will correctly cast the basic teleport power, as well as adding in the movement details settings, camera distance settings, and hiding the windows, so maybe it's what you're looking for?

 

I see this as an opportunity to repurpose the "Teleport Bind" control / bind / logic for the "teleport forward max distance" functionality, and I'm going to get started on that.  Meanwhile let me know whether "Teleport Combo Key" works as you expect or if it's overengineered somehow.

 

I'd really like to get this working for you, but can you tell I don't use Teleport much?  I need to level some more alts....  Thanks for all the input.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...