Skip to content

Commit

Permalink
The Mastermind Release
Browse files Browse the repository at this point in the history
This release finally gives some long-overdue love to the Mastermind tab
and binds set.

Changes
-------
* reorganizes the tab to be a bit more intuitive and cleaner
* integrates the classic Sandolphan binds with the by-name selection
binds and the next/prev pet binds.
* removes the broken parts of "Bodyguard Mode" that CityBinder had added
long ago that never worked completely.

What works
----------
* Select-by-name now works correctly assuming pet names can be
uniquely determined.  That means that the default pet names for most
powersets are not going to work, and some pets will need to be renamed
in-game.
* Any number and combination of pets can be specified for "Bodyguard
Mode" which is a one-key bind to put the selected pets into Defensive /
Follow mode.
* The Sandolphan stance and action binds can be applied to all pets,
pets by power level (minion, lieutenants, boss), or to the selected pet.
Pets selected by-name and with the next/previous pet binds count for
this.

What needs work
---------------
* The algorithm to determine unique pet names only uses the longest
word of multi-word pet names.  This causes problems distinguishing, for
instance, between "Howler Wolf" and "Alpha Howler Wolf".  This can
probably be improved.
* Not having unique pet names will cause a warning dialog when you try
to write binds.  This will occur if your archetype is Mastermind,
regardless of whether the by-name binds or the Sandolphan binds are
filled out.  This will be improved.
* Using the next/previous selection binds will put pets into "chatty"
mode if they had been toggled into quiet mode.  This will hopefully be
fixed eventually.

Please dust off your Masterminds and give it a spin.  As always, please
open issues with anything you find.
  • Loading branch information
emersonrp committed Jun 28, 2024
2 parents bdf7d2a + 6b7cd54 commit 6150cf5
Show file tree
Hide file tree
Showing 17 changed files with 501 additions and 656 deletions.
10 changes: 10 additions & 0 deletions Help/BodyguardBinds.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<html>
<head><title>Bodyguard Mode Binds</title></head>
<body>
<h2>Bodyguard Mode Binds</h2>
<p>"Bodyguard Mode" is a feature of Mastermind pets that enable them to share / reduce damage taken by the Mastermind. Setting pets to "Defensive / Follow" or "Defensive / Stay" or "Defensive / Goto" will put them into Bodyguard Mode.</p>
<p>With BindControl, you can specify which pets you'd like to function as bodyguards, and set them all into that mode (Defensive / Follow) with a single keystroke. "Stay" is also available for the bodyguarding pets.</p>
<p>For this feature to work reliably, each pet has to have a unique name in-game, and those names have to be entered into BindControl.</p>
<p>Telling pets to attack or move or putting them into Aggressive or Passive mode will take them out of Bodyguard Mode. They can be returned to Bodyguard Mode at any time by using one of the Bodyguard Mode binds.</p>
</body>
</html>
8 changes: 5 additions & 3 deletions Help/Manual.html
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,13 @@ <h3 name="InspPopper">Inspiration Popper</h3>
<p>Optionally the Inspiration Popper can give you feedback that it was used, via self-/tell.</p>

<h3 name="Mastermind">Mastermind / Pet Binds</h3>
<p>The Mastermind binds offer one-key selection of groups of Mastermind pets as well as one-key orders for stance and action. By default it uses the numeric keypad, but they can of course be rebound anywhere. Each key optionally can give feedback via self-/tell, local chat, or petsay.</p>

<p>In addition, the binds support having any subset of your pets flagged for Bodyguard Mode, which can be toggle on and off. If toggled on, the indicated pets will go into Bodyguard Mode (Defensive+Follow) and the stance and command keys will only apply to the remaining pets. There is also the option to order Bodyguards to Attack or Goto.</p>
<p>This page contains a set of binds to select individual pets by name. This requires you tell BindControl the names of your pets, and that their names not contain spaces. The game will do a "best match" on the name you provide, so short unique substrings of longer names can help here. For instance, for a pet named "Stan The Man," unless you have another pet named with the phrase "stan" in it somewhere, "stan" would be a good choice for BindControl to use.</p>

<p>Also on this page are an optional set of binds to select individual pets by name. This requires you tell BindControl the names of your pets, and that their names not contain spaces.</p>
<p>The Pet Action binds offer one-key selection of groups of Mastermind pets as well as one-key orders for stance and action. By default it uses the numeric keypad, but they can of course be rebound anywhere. Each key optionally can give feedback via self-/tell, local chat, or petsay.</p>

<p>In addition, the binds support having any subset of your pets flagged for Bodyguard Mode, which can be toggle on and off. If toggled on, the indicated pets will go into Bodyguard Mode (Defensive+Follow) and the stance and command keys will only apply to the remaining pets. <strike>There is also the option to order your non-Bodyguard pets to Attack or Goto</strike> - <i>this is not working as intended</i>.</p>
<p>Finally, the page offers a set of binds to select your "next" or "previous" pet, for quickly iterating through your pets for buffing, for instance. There are also keybinds to set the binds' idea of what your pet group size is. This is so that the binds can "wrap around" from the last pet to the first and vice versa, and is necessary because keybinds can't know, without being told, how many pets you have active.</p>

<h1>Troubleshooting</h1>
<p><i>My binds aren't working as I'd expect, help!</i></p>
Expand Down
4 changes: 2 additions & 2 deletions Help/OutputFiles.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ <h2>BindControl's Output Files</h2>
<dt>dtp tp ttp</dt>
<dd>These directories are also created by the <u>Movement Powers</u> tab, and pertain to the various teleport power binds. <b>dtp</b> contains files for Kheldian Dwarf teleport powers, <b>tp</b> standard teleport powers, and <b>ttp</b> Team Teleport.</dd>

<dt>mmbinds petsel</dt>
<dd>These directories are created by the <u>Mastermind</u> tab. <b>mmbinds</b> contains the various bindfiles needed for the Pet Action Binds, while <b>petsel</b> contains the bindfiles for the rotational pet selection keybinds.</dd>
<dt>mmb petsel</dt>
<dd>These directories are created by the <u>Mastermind</u> tab. <b>mmb</b> contains the various bindfiles needed for the Pet Action Binds, while <b>petsel</b> contains the bindfiles for the rotational pet selection keybinds.</dd>

</body>
</html>
16 changes: 6 additions & 10 deletions Help/PetActionBinds.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,15 @@
<body>
<h1>Pet Action Binds</h1>

<p>The pet action binds are a flexible system for controlling mastermind pets, based on Sandolphan's Revised MM Numpad
Pet Controls from 2006. They provide one-key selection of all pets or selection by power level, eg "Select All Minions" and
binds for selecting pet stance and for giving orders.</p>
<p>The pet action binds are a flexible system for controlling mastermind pets, based on Sandolphan's Revised MM Numpad Pet Controls from 2006. They provide one-key selection of all pets or selection by power level, eg "Select Minions," and binds for selecting pet stance and for giving orders.</p>

<p>The binds can optionally have the pets respond to orders via petsay, self-/tell, or into local chat. The pets' chattiness
can be toggled via a keybind, if you're tired of hearing them talk.</p>
<p>The binds can optionally have the pets respond to orders via petsay, self-/tell, or into local chat. The pets' chattiness can be toggled via a keybind, if you're tired of hearing them talk.</p>

<p><i>Note - the game, by default, has built-in pet feedback that will also be said in addition to any response you specify
here. To quiet the default feedback, in-game, go to: Menu &gt; Options, select the "Windows" tab, and in the "Pets"
section, set "Pet Response Text" to "Disabled."</i></p>
<p>The stance and command binds will apply to your currently selected pet(s), whether selected via "Select All," "Select Minions," "Select Lieutenants," or "Select Boss," or via by-name selection or next/previous pet selection.</p>

<p>By selecting any combination of your pets to act as bodyguards, you can cause that set of pets to enter Bodyguard Mode
(Defensive Stance + Follow) with a single keypress.</p>
<p><a href="https://homecoming.wiki/wiki/Mastermind_Strategy#Bodyguard">Bodyguard Mode</a> will place the pets you have designated as bodyguards into Defensive/Follow, which offers significant damage reduction for the Mastermind. Giving any bodyguard further orders will likely take it out of bodyguard mode until the Bodyguard key is pressed again.</p>

<p><i>Note - the game, by default, has built-in pet feedback that will also be said in addition to any response you specify here. To quiet the default feedback, in-game, go to: Menu &gt; Options, select the "Windows" tab, and in the "Pets" section, set "Pet Response Text" to "Disabled."</i></p>

</body>
</html>
8 changes: 8 additions & 0 deletions Help/PetByNameBinds.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<html>
<head><title>Pet By-Name Binds</title></head>
<body>
<h2>Pet By-Name Binds</h2>
<p>These binds allow you to select pets by-name. This is simply an alternative to selecting pets directly by their position in the pet list. As Masteminds can rename their pets, you can specify the name you want to use.</p>
<p>The game will attempt to match the first closest match to the specified name. For instance, if your pet is named "Maximillian" the bind could use "Max" and, assuming you didn't also have a pet named "Maximus," the bind would work.</p>
</body>
</html>
10 changes: 10 additions & 0 deletions Help/PetNames.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<html>
<head><title>Pet Names</title></head>
<body>
<h2>Pet Names</h2>
<p>In order for the various pet selection and command keys to work most properly, your pets need to have unique names. This means, for most powersets, that you'll need to rename one or more of your pets from the default, most likely two minions and a lieutenant, using the in-game "Rename Pet" function.</p>
<p>Once you have uniquely named your pets in-game, you need to input the names you have chosen into BindControl. If you ever rename your pets in-game again, you'll need to update the names in BindControl and rewrite your bind files.</p>
<p>The "Default" button will change BindControl's names to the default pet names for your powerset. This will likely put the name fields into an error state, as the default names contain duplicates, and BindControl will detect this.</p>
<p>If you don't intend to use the by-name selection binds or Bodyguard Mode, you can leave these names blank or otherwise in an error state, but this is strongly not recommended.</p>
</body>
</html>
8 changes: 4 additions & 4 deletions Help/PetOneKeyBinds.html → Help/PetPrevNextBinds.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<html>
<head><title>Pet One-Key Select Binds</title></head>
<head><title>Pet Previous / Next Binds</title></head>
<body>
<h1>Pet One-Key Select Binds</h1>
<p>These binds are a system of pet selection that enables next-pet / previous-pet keybinds. This is useful, for instance,
<h1>Pet Previous / Next Binds</h1>
<p>These binds are a system of pet selection that enables previous-pet / next-pet keybinds. This is useful, for instance,
for players wishing to buff each pet without having to select each one directly.</p>
<p>Increase / Decrease Pet Group Size is used to tell the binds the size of your group of pets. This is necessary because
keybinds have no way of knowing your group size, and therefore are not able to "wrap around" from the last pet to the
keybinds have no way of knowing your pet group size, and therefore are not able to "wrap around" from the last pet to the
first without being told the size of the group.</p>
</body>
</html>
1 change: 1 addition & 0 deletions Page/CustomBinds.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ def OnDuplicateButton(self, evt):
def PopulateBindFiles(self):
for pane in self.Panes:
pane.PopulateBindFiles()
return True

def AllBindFiles(self):
files = []
Expand Down
3 changes: 2 additions & 1 deletion Page/Gameplay.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ def PopulateBindFiles(self):
if self.GetState('Tray4Enabled'):
ResetFile.SetBind(self.Ctrls[f"Tray4Button{button}"].MakeFileKeyBind(f"powexec_serverslot {slotbutton}"))


### Team / Pet Select
if self.GetState('TPSEnable'):
if (self.GetState('TPSSelMode') != "Pets Only"
Expand Down Expand Up @@ -314,6 +313,8 @@ def PopulateBindFiles(self):
ResetFile.SetBind(self.Ctrls['FPSBindKey'] .MakeFileKeyBind('++showfps'))
ResetFile.SetBind(self.Ctrls['NetgraphBindKey'].MakeFileKeyBind('++netgraph'))

return True

def AllBindFiles(self):
files = [self.Profile.GetBindFile("teamsel", "reset.txt")]
dirs = ["teamsel", "teamsel2"]
Expand Down
4 changes: 2 additions & 2 deletions Page/General.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ def PopulateBindFiles(self):
ResetFile.SetBind(self.Ctrls['TellTarget'].MakeFileKeyBind([notifier, 'show chat', 'beginchat /tell $target, ']))
ResetFile.SetBind(self.Ctrls['QuickChat'] .MakeFileKeyBind([notifier, 'quickchat']))

return
return True

# we only fiddle with ResetFile, which is already taken care of.
def AllBindFiles(self):
Expand Down Expand Up @@ -276,7 +276,7 @@ def OnNameCtrlChanged(self, evt):
nc.SetToolTip("The profile name cannot contain spaces.")
else:
nc.SetBackgroundColour(wx.NullColour)
nc.SetToolTip(None)
nc.SetToolTip('')
evt.Skip()


Expand Down
2 changes: 2 additions & 0 deletions Page/InspirationPopper.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,8 @@ def PopulateBindFiles(self):
if self.GetState('EnableRevInspBinds'):
ResetFile.SetBind(self.Ctrls[f"{tab}Rev{Insp}Key"].MakeFileKeyBind(reverseOrder))

return True

UI.Labels['Enable'] = "Enable Inspiration Popper"

for tab in tabs:
Expand Down
Loading

0 comments on commit 6150cf5

Please sign in to comment.