The code that gives characters their surnames is line 98 of ".../files/scripts/characters/constructor.gd".
The code that assigns surnames to races is found in ".../files/scripts/characters/races.gd", such as line 12.
The code that assigns first names to characters is line 81 of ".../files/scripts/assets.gd".
The script for "names.gd" can be accessed anywhere with "globals.names" and the function can be accessed anywhere with "globals.assets".
The races of the captives can be accessed using "enemygroup.captured[ <index> ].race" if you know the index or use zero to reference the first captive, which is what is used on line 1931 of .../files/scripts/exploration.gd".
The number of steps to travel through a region is set as "length" in ".../files/scripts/explorationregions.gd".
The energy cost per step of exploration is subtracted on at line 863 of ".../files/scripts/exploration.gd".
By "bound tightly to prevent escape" I assume you mean 'A tied and bound [color=yellow]$sex[/color] looks at you with fear and hatred. ' on line 202 of ".../files/scripts/characters/descriptions.gd". Unfortunately, there's no good way to differentiate between enemies and captives. That's not to say that it isn't possible, but you would need to reference the "enemygroup.captured" array in the exploration script which needs to be referenced through the mansion script which needs to be referenced through the globals script. Then you would need to search the array for a person with an ID that matches the person for the description.
To release a captive during exploration you would need to call the function "freetrue" at line 2521 of ".../files/scripts/outside.gd" by pressing the Control button during exploration (even with the post battle menu), selecting the Captured Slaves tab, pressing the red circle button (which is a very lame button), and agree to free this person. No errors with this functionality in the current version as far as I know, though a prior version did have errors. Note that this still counts as using the rope so it might wear out and break, but otherwise you will get the rope back.
The functions for the String type have improved a lot as the Godot Engine has been updated. Many of the convenient functions in the current version weren't available when this game was written and the code wasn't updated to use newer functions. There are newer versions of Godot available now that have even better functions, but simply updating the game to be compatible with it could take a few days. String.find() reports the position of the first character of the matched string and is useful for string editing or searching for multiple instances of a string, though the latter has String.count() in the latest version of Godot. The "in" keyword is basically a sideways access to String.contains() even though that function wasn't included in the API until 4.0.
Strive for Power uses a beta version of Godot 3.2, so it has some of the features and fixes of 3.3. The Debug mod displays the Godot version in the terminal when the game starts. Usually I get the docs I want by googling something like "godot 3.2 string".