<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 28 Jan 2022 at 01:07, James Paige <<a href="mailto:Bob@hamsterrepublic.com">Bob@hamsterrepublic.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu., Jan. 27, 2022, 4:34 a.m. Ralph Versteegen, <<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 20 Jan 2022 at 14:56, James Paige <<a href="mailto:Bob@hamsterrepublic.com" rel="noreferrer" target="_blank">Bob@hamsterrepublic.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 19, 2022 at 6:49 PM Ralph Versteegen <<a href="mailto:teeemcee@gmail.com" rel="noreferrer" target="_blank">teeemcee@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 19 Jan 2022 at 13:49, James Paige <<a href="mailto:Bob@hamsterrepublic.com" rel="noreferrer" target="_blank">Bob@hamsterrepublic.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>So I do have a few other changes related to this one planned.</div><div>* An option to make heroes controlled by (random) AI</div><div>* A concept of "traitor" which will affect targeting classes when an attacker is targeting</div><div>* A concept of "turncoat" which will affect targetting classes when an target is being targeted</div><div>* Attacks that can turn these effects on and off or set-to-default<br></div><div><br></div><div>So an enemy with all 3 of Controllable, Traitor, and Turncoat would function as a hero for that one battle.</div><div><br></div><div>To simulate a classic "Confuse" status, you would have an attack that turns Controllable off, and traitor on, but don't touch turncoat. Then to end that status, use an attack that sets Controllable and Turncoat back to default.</div></div></blockquote><div> </div></div><div class="gmail_quote">I was hoping this meant you were going down this direction :)<br></div><div class="gmail_quote"><br><div>I'm not sure whether "Traitor" is proposed to swap 
foes and allies of a target, or just makes everyone count as a foe. 
Those are two different ways that you might want a Confused status to work, and it seems that these bits would only allow one or the other.</div><div><br></div><div>What I was thinking was to give each combatant a team (default 1 for heroes, 2 for enemies) and an "acting" team. A target is considered an ally by an attacker if their team is the same as the attacker's acting team, else they're a foe. Also team 0 could mean "independent", with no allies. You probably wouldn't use more than a third team, for "Nature", say when a clan of hyenas opportunistically attack while you're fighting someone else). <br></div><div><br></div><div>So Confuse to make someone attack anyone indiscriminately would change their acting team to 0 (so two confused targets still hit each other), and to swap sides you'd change their acting team (although now I realise that means the attack would need to be specific to use by heroes or enemies, unless there was an attack bit like "swap target's acting team" that just set it to the attacker's).<br></div><div><br></div><div>Maybe I've overcomplicated it again, while still not adding all that much utility/flexibility (really should work on allowing script hooks for things like this) vs just adding a third Independent bit.<br></div></div></div></blockquote><div><br></div><div>Yeah, I think teams will overcomplicate it for now-- and yes, having scripting hooks so people can customize this behavior will be the best way to get advanced fancy effects</div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br></div><div>I do kinda like the idea of being able to make a confused enemy target all, rather than only the opposite side, but I'll have to think if there is a nice simple way to do that.</div></div></div></blockquote><div><br></div><div>Going down the route of bitsets then I don't really see another option but adding another bitset to make everyone an enemy.</div><div><br></div><div><div>Now, I'm not pushing for the team IDs idea, but I just wanted to write something about complexity. Say you add a third bit, or even a fourth ("Foe to all"). I think that arguably two integer-valued settings are simpler than 3 bits, because 3 bits is 8 possible combinations, a lot to think about. And even an 8-way setting could be simpler to reason about than 3 bits if you don't have to think about any interactions. Complexity of implementation is usually also secondary.<br></div><div>But in fact after looking at the new version of get_valid_targs I realised team IDs would actually have been simpler in implementation too. The bitsets are more complex... in fact I see some mistakes in the code, which I'll fix: "Dead-ally (hero only)" and "Dead foe (enemy only)" were meant to be informative only, to warn that those settings didn't make sense for enemies/heroes, but not to intentionally restrict the targets.<br></div></div></div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I was actually considering two more bit states-- "Indiscriminate Attacker" to attack both sides, and "Tergiversate Target" to be targeted by both sides</div></div></blockquote><div><br></div><div>Maybe we need to make more frequent releases so that you can outlet your penchant for lexical obscureness elsewise :)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><div></div><div> </div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Or a classic Berzerk could be implemented with Controllable=Off and could end with controllable set to default (this would work for heroes, but wouldn't do anything meaningful on an enemy)</div><div><br></div><div>This should allow a lot of possibilities, and is all pretty easy to implement.</div><div><br></div><div>And yes, someone could totally fake 5 or 6 heroes in the party with this, by using an instead-of-battle script, and adding hero enemies to the formation with a script before the battle starts. Definitely not ideal, but fine if people want to try it.<br></div><div><br></div><div>Actually increasing the size of the active party > 4 and increasing the number of enemies in a formation > 8 is something I definite;ly want to do, but it will require lots and lots of cleanup, which is outside of the scope of what I am trying to do right now. In particular, there are tons of places where the ID range within the bslot() array defines what a BattleSprite Instance does, so the first step of that cleanup will probably be to convert all access to bslot() to a set of accessor functions for heroes, enemies, attack sprites, and weapon sprites. Then those different ranges can be split apart into different arrays, which can be dynamically sized when you load a battle formation with 15 enemies in it, or something like that. But that is for later. I want to keep the scope of what I am working on broken down into bite-sized baby-steps to mix a metaphor :D<br></div></div></blockquote><div><br></div><div>I don't think we would want to split bslot() into separate arrays for heroes and enemies: being able to index across all of them with a bslot() index is very useful and widely used (eg. targeting) so it would be a lot of work to remove that. Why not just add is_hero and is_enemy attributes. There's a lot of lines of code to change, but each would then be an easy change. Could also start using polymorphism.<br></div></div></div></blockquote><div><br></div><div>Yes, you are right. is_hero and is_enemy attributes are much better than what I was thinking of with the accessor functions for bslot. Glad you said it :)<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div><div>On the other hand, I do want to remove attacks and weapons from bslot() and was considering doing it soonish. Almost all of the BattleSprite data is irrelevant for them, and nearly all of the advantages of having them in bslot are (or will be) gone now that battles are converted to slices.</div></div></div></blockquote><div><br></div><div>Ah, right! Those only get used in animations, so the slice is all that really matters :)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div><br></div><div>Fortunately I think the current features I am adding will not make any of that later work harder, and might even lead to a little helpful cleanup.</div><div><br></div><div>---</div><div>James</div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 18, 2022 at 8:22 AM Ralph Versteegen <<a href="mailto:teeemcee@gmail.com" rel="noreferrer" target="_blank">teeemcee@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Wow! That's not a feature I was expecting to see for a long time. A nice surprise!</div><div><br></div><div>I suppose this is particularly useful for giving the player extra actions they can perform in battle. People are going to inevitable think to use it to get around the 4 hero limit, but it seems really problematic for that. Or is time to add team numbers to battles, so you can define which combatants are "foe" or "ally"?<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 17 Jan 2022 at 14:01, <<a href="mailto:subversion@hamsterrepublic.com" rel="noreferrer" target="_blank">subversion@hamsterrepublic.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">james<br>
2022-01-16 17:01:32 -0800 (Sun, 16 Jan 2022)<br>
39<br>
New enemy bitset "Controlled by Player"<br>
---<br>
U   wip/bmodsubs.bas<br>
U   wip/enemyedit.bas<br>
U   wip/loading.rbas<br>
U   wip/<a href="http://udts.bi" rel="noreferrer noreferrer" target="_blank">udts.bi</a><br>
U   wip/whatsnew.txt<br>
<br>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" rel="noreferrer" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div></div></div>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
</blockquote></div></div>