Combat and Parley in RPG

Started by
17 comments, last by jefferytitan 10 years, 11 months ago

You could add something like a parlay state into combat so a hostile NPC will not attack the player is in parlay but will not become friendly. Then as soon as parley ends the hostile can begin attacking. Basically a continuous loop of the attacker going "can I kill you yet" until you are done talking.

Also a possibility is letting NPCs command each other so when you enter parlay with an NPC, it commands all others to stop being hostile. When parlay ends that NPC can command the others to become hostile again.

- My $0.02
Advertisement

At the risk of over-complicating things, maybe you could tighten up the various scenarios just by having a "relations floor" where relations must be at least X to even attempt a parlay.

that would be the cutoff where "killers" never accept surrender/yield, whereas all others will at least get a chance to accept.

the number of "scenarios" is a result of the different types of hostiles you can encounter, based on the capabilities of the game engine. these are (final names have yet to be decided):

1. killers/bushwhackers - bad guys who try to kill you, then take your stuff.

2. thieves/raiders - attack if you don't give them your stuff.

3. slavers - attack to subdue, capture, and enslave.

4. kidnappers - attack to subdue, capture, and ransom back to your side. requires player controls more than one band member, and is "well off".

5. everyone else - attack if relations go way south, or in accidental friendly fire incidents.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

You could add something like a parlay state into combat so a hostile NPC will not attack the player is in parlay but will not become friendly. Then as soon as parley ends the hostile can begin attacking. Basically a continuous loop of the attacker going "can I kill you yet" until you are done talking.

Also a possibility is letting NPCs command each other so when you enter parlay with an NPC, it commands all others to stop being hostile. When parlay ends that NPC can command the others to become hostile again.

it looks like the way to implement it will be to add a is_parlaying boolean field to an animalrec (a target record in the database of active targets in the simulation).

if a yield is accepted, and it doesn't automatically result in capture, the player is presented with the talk to caveman menu, or a menu for thieves (give all stuff, or resume combat).


the talk to caveman menu allows a variety of actions: gifting, trading, teaching, learning, healing, etc. during parlay most of these will be of little use except for gifting, trading, and talking. gifting and trading are "zero-time" actions, and happen immediately when the player makes the menu pick. but talking takes time, like when you talk to another sim in The SIMs.

if the player selects talk and triggers a talk action, the is_parlaying flags get set to 1 for all active hostiles near the PC in question, and then the simulation resumes, allowing the talk action to occur.

an extra line or two of code will be added to get_hostile_tgt to not target the player's party if is_parlaying is set, but continue to target and attack wild animals for example.

get_friendly_tgt will need to be modified so friendlies/neutrals don't target hostiles who are in parlay. same for band members, traveling companions, hired warriors, and tamed animals - so basically all the good guy AI targeting routines.


each PC has an array of 10 generic variables ( int actiondata[10] ) to hold action specific data, such as the ID number of an object you're fixing, how tired you were when you went to sleep, whether you're in parlay, who you're parlaying with, etc.

an variable will be set in the player's actiondata array, indicating that the talk action is part of a parlay.
a second variable in the player's actiondata array will indicate the npc #.

the talk action handler code will be modified as follows:
when the talk action completes, if the is part of a parlay flag is set, do a fuzzy relations check between the PC and the NPC. if the check succeeds, set all is_parlaying hostiles near the PC in question to neutral, and set their relations with the PC from -100 to -99, where -100 is always attack. then clear all the is_parlaying flags of hostiles near the PC in question, and you're done, continue with the simulation (RET from your INT handler, so to speak - TSR programming talk there). if they're still hostile after the end of all that, they'll resume combat, if not, they won't (but it will be REALLY easy to provoke them, so best to just leave the area).

the only other option than stopping combat is to stop time for a special zero-time parlay-talk action. which might be easier to implement, but is less realistic, and unlike the way the rest of the game works.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

now the question is, what happens when you get it all going on at once?

you're at a friendly/neutral cave trading, wild animals appear, then right way, hostiles appear. combat ensues, with the player's party and the local friendly/neutrals on one side, the hostiles on a scond side, and the animals on a third side. the player yields and parlays. player's party etc stop fighting with the hostiles. everyone starts attacking just the animals. player is free to conduct talk action with npc, unless attacked by animal.

if player is attacked by animal, talk action stops, but hostiles etc are still "in_parlay" mode. so they don't attack. player must complete talk action to reset "in_parlay" flags. but what if the player doesn't resume or start another talk action? in_parlay flags don't get cleared, and those combatants will ignore their foes from then on. could make the code only ignore nearby hostiles in parlay vs all hostiles when you're in parlay, but NPCs whose "in_parlay" flag doesn't get reset will never resume combat.

so the rules aren't airtight yet, and i still can't implement.

perhaps a counter for how long they've been in parlay.

make "in_parlay" a counter, instead of a boolean. 0 = not in parlay.

initialize it to zero.

when they go into parlay, set it to 1.

add a "model_parlay_expiration" routine to "do_global_frame" or "do_global_second".

"model_parlay_expiration" would increment "in_parlay" counters, and check for time expired (counter past some limit). time expired would have to be long enough for combat with animals, followed by a resumption of negotiations (another talk action).

if time expired, reset the "in_parlay" counter to zero, so the unit follows the normal tageting AI.

that way yielding and talking only buys you a temporary reprieve, and the player can't take undue advantage of a half-assed implementation.

does that make it airtight?

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

I don't think I ever really used the 'yield' feature in Oblivion and in Skyrim I know I had problems un-equiping my weapons. What if there was an equipable item like a white flag you could use that basically said "I yield" to everyone around you? It takes up both hands so it's like unequiping your weapons. Different flags could also communicate things like "I surrender", "I want to talk", "I want to negotiate terms to cross your lands", or "If you attack me, the guy who sent me will bring his army to murder your whole family".

i came to the conclusion that parlay with expiration time is airtight. and overkill.

never model more than you need to, to get the same effect.

its only neutrals that have become hostile who would use it. and they can simply end combat if they accept your yield, like in oblivion.

then you can talk to them, gift them, etc. possibly leading to improved relations or a resumption of combat.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

I don't think I ever really used the 'yield' feature in Oblivion and in Skyrim I know I had problems un-equiping my weapons. What if there was an equipable item like a white flag you could use that basically said "I yield" to everyone around you? It takes up both hands so it's like unequiping your weapons. Different flags could also communicate things like "I surrender", "I want to talk", "I want to negotiate terms to cross your lands", or "If you attack me, the guy who sent me will bring his army to murder your whole family".

caveman rpg. no techo. no magic.

no equipping stuff. you're assumed to always us the best gear on you. current weapon and ammo type are the only things the player must select manually.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Cavemen era - low population and high value of individual for group surival.

An individual dies they take their abilities and skills with them which might be hard for small groups to replace.

Meaning there would probably be posturing BEFORE the battle/fight/brawl starts to make sure that fighting needs to commence.

Allowing the sides to size each other up and what risk is involved.

The parlay situation would probably then be beforethings got confusing/heated (and likely when most of the opponents are still out of range of each other)

--------------------------------------------[size="1"]Ratings are Opinion, not Fact

Might I suggest that parlaying is only an option when your opponents (as a group) make it an option. For example, if you're proving too dangerous to kill, there's not enough profit in it for them, there's a bigger third-party threat (such as a saber-tooth tiger), or they are generally too tired/scared/demoralised. In that scenario there would be some visible/audible signal that they were willing to negotiate and you need to initiate at that moment (or at least generally not screw it up by attacking them).

This topic is closed to new replies.

Advertisement