Radiant AI Quirks and Bugs
In the senaro you just described, imagine you have played for 100 hours and all NPCs whom were not quest related were dead or say only Main quest NPCs were left so you could not complete any SQ.
It is possible right, everyone dead except the ones protected by a single parameter?
No merchants, no guilds, no Arena and no Oblivion Dagoroth.
Would you care if your game broke out of randomness, after a 100 hours of play, say you were 5 hours from completing your MQ and had 100 dungeons and 100 SQ left.
Now your gonna have to start over, you can NOT ever use and old save cause it was just a random act, 100 hours flushed.
Is funny now and realistic now?
It is only "realistic" in your twisted logic.
That is why it is NOT hairsplitting but specific and accurate.
NPCs could do that if they are programmed and allowed to do that, but they are not, k?
It is possible right, everyone dead except the ones protected by a single parameter?
No merchants, no guilds, no Arena and no Oblivion Dagoroth.
Would you care if your game broke out of randomness, after a 100 hours of play, say you were 5 hours from completing your MQ and had 100 dungeons and 100 SQ left.
Now your gonna have to start over, you can NOT ever use and old save cause it was just a random act, 100 hours flushed.
Is funny now and realistic now?
It is only "realistic" in your twisted logic.
That is why it is NOT hairsplitting but specific and accurate.
NPCs could do that if they are programmed and allowed to do that, but they are not, k?
Trust me, most of the names I have been called you can't translate in any language...they're not even real words as much as a succession of violent images.
- Gaal Dornik
- Posts: 41
- Joined: Fri Sep 19, 2003 1:10 pm
- Contact:
Ofc the real FIGHT probability would be much lower, with some extra parameters. And surely all NPCs of any value would not be involved. Only at night or something like this. Imagine you're walking in a dark passage and suddenly see 2 NPCs having a controversy, with a bloody end for one of them. Impressive, isnt it.
It is possible right, everyone dead except the ones protected by a single parameter?
No, because, new ones will appear, like in real life. After a while that empty house will became inhabited again, by ppl from distant lands, towns or just grownups. It helps to make the game-world less static. More, it offers an interesting choice to rob that house during that time w/o consequences. which is bad, but unfortunately also happens in real life.
NPCs could do that if they are programmed and allowed to do that, but they are not, k?
Im pretty sure default NPC script can handle this, because all it has to do, is to start the "NPCbattle" procedure.
It is possible right, everyone dead except the ones protected by a single parameter?
No, because, new ones will appear, like in real life. After a while that empty house will became inhabited again, by ppl from distant lands, towns or just grownups. It helps to make the game-world less static. More, it offers an interesting choice to rob that house during that time w/o consequences. which is bad, but unfortunately also happens in real life.
NPCs could do that if they are programmed and allowed to do that, but they are not, k?
Im pretty sure default NPC script can handle this, because all it has to do, is to start the "NPCbattle" procedure.
- fable
- Posts: 30676
- Joined: Wed Mar 14, 2001 12:00 pm
- Location: The sun, the moon, and the stars.
- Contact:
It really isn't. We've had statements in this thread that show some people believe an NPC's "random behavior" in a game is simply that: you tell characters to act randomly, and they do. No pre-programming is involved. This is wrong in itself; there's nothing right about letting inaccuracies stand, not when they interfere with making sound judgements. In addition, it's caused some people to believe that this could lead to NPCs massacring entire villages, since programmers wouldn't realize in advance that these self-willed NPCs were fighting one another. Again, that's wrong. So correcting it isn't hairsplitting.Gaal Dornik wrote:Thats just hairsplitting.
Of course, but that isn't what's being written in this thread by others:Ofc the real FIGHT probability would be much lower, with some extra parameters. And surely all NPCs of any value would not be involved. Only at night or something like this. Imagine you're walking in a dark passage and suddenly see 2 NPCs having a controversy, with a bloody end for one of them. Impressive, isnt it.
"Fable, I was more talking about if NPC A stopped and talked to NPC B and they got in an argument over differing views, they started to fight, friend sof A and friends of B joined in and all of Sudden Town of NPC A and B is gone."
"Won't it just be a matter of scripting only the guy-in-the-street to have random behaviour, and excluding important people such as shop-keepers, healers, and quest-related people?"
This is from two of the posters in this thread. What you state is both possible and (in small, occasional instances) desireable, since it gives the game the feeling of additional activity it never had. But that doesn't deal with the misconceptions that have been aired in this thread.
I've seen no reference to any "Npcbattle" command or procedure in either Morrowind or Oblivion, and can find none, through Google, or within the MW scripting code, or on any mod site: where did you get this? And there are far too many parameters that would have to be instituted directly by a programmer for town-sized battles to simply occur by accident. If Oblivion's combat code is anything like the one in the MMORPG where I worked, then it will consume in excess of 10,000 lines of programming, taking into account plenty of flags, variables and values, undergoing a host of checks before combat is initiated and any combat round occurs.NPCs could do that if they are programmed and allowed to do that, but they are not, k?
Im pretty sure default NPC script can handle this, because all it has to do, is to start the "NPCbattle" procedure.
To the Righteous belong the fruits of violent victory. The rest of us will have to settle for warm friends, warm lovers, and a wink from a quietly supportive universe.
"No, because, new ones will appear, like in real life......"
No?
Of course that is not the point or the discussion, what I said was true, they could all die from that random parameter, which is why it is not programmed.
The Devs dont want to break the game by allowing random NPC conversations leading to genocide of towns and villages.
What does starting a NPCbattle procedure have to do with anything, doesn't matter what you call it, if NPCs were allowed to randomly start fights that lead to the destruction of towns and villages it would break the game.
I have no idea where you are getting this info from.
As I and others are mentioning of course it is possible, but not practical or probable, nor even profitable for Bethesda.
It would be much easier to script the destruction of a town due to somesuch, because you contain the parameters.
What you are talking about is asking for a cascade effect that would be accessable to all NPCs at during any converstation, that is just nonsence.
No?
Of course that is not the point or the discussion, what I said was true, they could all die from that random parameter, which is why it is not programmed.
The Devs dont want to break the game by allowing random NPC conversations leading to genocide of towns and villages.
What does starting a NPCbattle procedure have to do with anything, doesn't matter what you call it, if NPCs were allowed to randomly start fights that lead to the destruction of towns and villages it would break the game.
I have no idea where you are getting this info from.
As I and others are mentioning of course it is possible, but not practical or probable, nor even profitable for Bethesda.
It would be much easier to script the destruction of a town due to somesuch, because you contain the parameters.
What you are talking about is asking for a cascade effect that would be accessable to all NPCs at during any converstation, that is just nonsence.
Trust me, most of the names I have been called you can't translate in any language...they're not even real words as much as a succession of violent images.
- ch85us2001
- Posts: 8748
- Joined: Wed Apr 13, 2005 7:53 pm
- Location: My mind dwells elsewhere . . .
I ran into a random battle just a few minutes ago. It was between a guard and an regular NPC, and I didn't get a journal entrie, so I assume it was just Random!!!!!!!!!!!
[url=tamriel-rebuilt.org]Tamriel Rebuilt and,[/url] [url="http://z13.invisionfree.com/Chus_Mod_Forum/index.php?"]My Mod Fansite[/url]
I am the Lord of Programming, and your Mother Board, and your RAR Unpacker, and Your Runtime Engine, can tell you all about it
I am the Lord of Programming, and your Mother Board, and your RAR Unpacker, and Your Runtime Engine, can tell you all about it
- fable
- Posts: 30676
- Joined: Wed Mar 14, 2001 12:00 pm
- Location: The sun, the moon, and the stars.
- Contact:
[QUOTE=ch85us2001]I ran into a random battle just a few minutes ago. It was between a guard and an regular NPC, and I didn't get a journal entrie, so I assume it was just Random!!!!!!!!!!! [/QUOTE]
Now, I think you're being sarcastic, and just trying to stir up trouble. We both know that just because an event doesn't show up as a journal entry, it's not automatically random. And I *think* you're intelligent enough to realize that characters have to be given a selection of activities, and can't generate their own.
But the kicker is that you used a gaggle of exclamation points, you ungrammatical, imitation-newbie, you.
Now, I think you're being sarcastic, and just trying to stir up trouble. We both know that just because an event doesn't show up as a journal entry, it's not automatically random. And I *think* you're intelligent enough to realize that characters have to be given a selection of activities, and can't generate their own.
But the kicker is that you used a gaggle of exclamation points, you ungrammatical, imitation-newbie, you.
To the Righteous belong the fruits of violent victory. The rest of us will have to settle for warm friends, warm lovers, and a wink from a quietly supportive universe.
- ch85us2001
- Posts: 8748
- Joined: Wed Apr 13, 2005 7:53 pm
- Location: My mind dwells elsewhere . . .
He did have a copy of a certain book that the enemy carries, but he was in plain clothes and showed no signs of Hostility! Some Random Guard just started wailing (pwning ) on 'em!!! Obviously he did something to trigger that event, but jeez, I thought I had smacked the Guard or something!!!!! At least it gives the appearance of randomness.
Yeah, I'm chu. Punctuation:Chu as Mispronounciation:Bush
Yeah, I'm chu. Punctuation:Chu as Mispronounciation:Bush
[url=tamriel-rebuilt.org]Tamriel Rebuilt and,[/url] [url="http://z13.invisionfree.com/Chus_Mod_Forum/index.php?"]My Mod Fansite[/url]
I am the Lord of Programming, and your Mother Board, and your RAR Unpacker, and Your Runtime Engine, can tell you all about it
I am the Lord of Programming, and your Mother Board, and your RAR Unpacker, and Your Runtime Engine, can tell you all about it
I'm not sure on the validity of its randomness, but outside the Flowing Bowl Inn at the Anvil Docks, I ran into two NPCs having a fist fight, with one watching. Which, there are plenty of 'random' battles, in the Fighters Guild in about every town. You'll see a couple of members sparring inside, at least adds the feeling of depth to the game.
- fable
- Posts: 30676
- Joined: Wed Mar 14, 2001 12:00 pm
- Location: The sun, the moon, and the stars.
- Contact:
[QUOTE=ch85us2001]At least it gives the appearance of randomness.
[/QUOTE]
Yes, that's what it's all about: the appearance of NPC randomness, just as some RPGs give the appearance of non-linearity. But programmers know that you can't program randomness. Programming is inherently an activity of order and thought-in-advance. No Oblivion NPC acts randomly; it only has a selection of activities that are allowed it by coding, and a series of flags and other controls that govern which of these activities it will consider doing at any moment. It will then be allowed to "choose" one of these high priority activities--that's about as random as it gets.
If I could find some of my old NPCs from that MMORPG I mentioned above, I'd gladly post a couple of pieces of code. I used to try to make them as "human" as possible, meaning they had a large variety of responses and possible activities, depending upon what was going on around them. But it took forever to code one of these, and I didn't think players really appreciated that. Judging from some of the remarks posted here, I'm inclined to think my views were correct. Instead of realizing the amount of time spent programming something to give the appearance of self-willed randomness, I read comments saying the coded NPCs themselves can do whatever they like.
[/QUOTE]
Yes, that's what it's all about: the appearance of NPC randomness, just as some RPGs give the appearance of non-linearity. But programmers know that you can't program randomness. Programming is inherently an activity of order and thought-in-advance. No Oblivion NPC acts randomly; it only has a selection of activities that are allowed it by coding, and a series of flags and other controls that govern which of these activities it will consider doing at any moment. It will then be allowed to "choose" one of these high priority activities--that's about as random as it gets.
If I could find some of my old NPCs from that MMORPG I mentioned above, I'd gladly post a couple of pieces of code. I used to try to make them as "human" as possible, meaning they had a large variety of responses and possible activities, depending upon what was going on around them. But it took forever to code one of these, and I didn't think players really appreciated that. Judging from some of the remarks posted here, I'm inclined to think my views were correct. Instead of realizing the amount of time spent programming something to give the appearance of self-willed randomness, I read comments saying the coded NPCs themselves can do whatever they like.
To the Righteous belong the fruits of violent victory. The rest of us will have to settle for warm friends, warm lovers, and a wink from a quietly supportive universe.
Fable, I think you're missing the point. Radiant AI is supposed to be different than what was in Morrowind and an improvement. Either you're using the word "scripted" incorrectly or you don't understand the difference between "scripted" and what Radiant AI is supposed to do. Before I get started on my point, however, I want to be clear that, of course, all NPC actions are controlled by programing. That's like saying the sky is blue or the sun will come up tomorrow. Nothing to argue there.
Scripting means that you explicitly tell the NPC to do something based on, perhaps, a few If/Then checks. Radiant AI, as I understand it, is more variable driven and, therefor, more dynamic. It is not scripted. So lets take a very simple case of a Gaurd and a Commoner.
In the scripted case, the Gaurd and the Commoner have scripted patterns of movement such as [Go north to the wall, turn east and go 100 yards, retrace your steps to the begining, start over] .The Guard attacks Commoner script may say something along the lines of [IF the game has reached a certain point in game time AND the player is in the same town as the Gaurd and the Commoner AND the Guard is within range of the Commoner THEN have the Guard attack the Commoner]
The dynamic, non-scripted version would involve more generic function calls/checks and randomness. For instance, perhaps the Commoner is given the goal to eat. He has 3 choices: go to the Butcher, go to the General Store, go to a Street Vendor. He randomly chooses go to a Street Vendor. At the same time, the Guard is given the general goal to patrol town. He's given the choice to start out going North, West or South. He randomly chooses North. It just so happens that the Guard and the Commoner cross paths becuase the Commoner chose the street vendor and the Guard chose to start patroling North. Now, the game checks to see if the Guard and the Commoner strike up a conversation based on a random roll and possible influencers (e.g. the Commoner has the characteristic of being chatty). The roll comes up and, sure enough, they talk. The Guard starts the game with a neutral disposition to all NPC's. Let's say, through the ConversationFunction(participant1, participant2), the game determines that the Guard leaves the conversation with the Commoner with a lower disposition toward him, say 'Dislikes'. Now both Commoner and Guard continue on their way. The Commoner gets to the Street Vendor and does not have enough money to purchase food from the Street Vendor and is given two choices now: steal from the Street Vendor or proceed to the General Store or Butcher. However, there is the influencer of how hungry he is now. Let's say, that due to the delay of crossing paths with the Guard and striking up a conversation with him, the Commoner's hunger variable is now at 'Extremely Hungry'. The game rolls the dice with the influencer pushing the odds towards stealing and, sure enough, the Commoner steals and begins to run from the Street Vendor. The Guard, meanwhile, made another random choice to proceed East rather than West on his patrol which, low and behold, happens to put him at the Street Vendor just as the Commoner was stealing. This lowers the Gaurds disposition to 'Hates', which causes him to chase and attack the Commoner. However, nowhere in the code is a line that says 'Guard attacks Commoner'. It was simply an outcome of the generic functions (e.g. EatFunction(), PatrolFunction(), DirectionToWalkFunction(), ConversationInitiationFunction(), FightFunction(), etc.) that were fed variable parameters based on the state of the game world at the time the function was called.
I hope it's clear from the above example that in the scripted version, if you played the game to the point where the Gaurd attacked the Commoner and then played the game 10 more times taking the exact same steps in the exact same time period as you did the first time, the Guard would attack the Commoner every time. In the dynamic example, you could do the same 10 game test and the Gaurd may or may not attack the Commoner each game. It's dynamic. Thus, Radiant AI is NOT the same as scripted.
Scripting means that you explicitly tell the NPC to do something based on, perhaps, a few If/Then checks. Radiant AI, as I understand it, is more variable driven and, therefor, more dynamic. It is not scripted. So lets take a very simple case of a Gaurd and a Commoner.
In the scripted case, the Gaurd and the Commoner have scripted patterns of movement such as [Go north to the wall, turn east and go 100 yards, retrace your steps to the begining, start over] .The Guard attacks Commoner script may say something along the lines of [IF the game has reached a certain point in game time AND the player is in the same town as the Gaurd and the Commoner AND the Guard is within range of the Commoner THEN have the Guard attack the Commoner]
The dynamic, non-scripted version would involve more generic function calls/checks and randomness. For instance, perhaps the Commoner is given the goal to eat. He has 3 choices: go to the Butcher, go to the General Store, go to a Street Vendor. He randomly chooses go to a Street Vendor. At the same time, the Guard is given the general goal to patrol town. He's given the choice to start out going North, West or South. He randomly chooses North. It just so happens that the Guard and the Commoner cross paths becuase the Commoner chose the street vendor and the Guard chose to start patroling North. Now, the game checks to see if the Guard and the Commoner strike up a conversation based on a random roll and possible influencers (e.g. the Commoner has the characteristic of being chatty). The roll comes up and, sure enough, they talk. The Guard starts the game with a neutral disposition to all NPC's. Let's say, through the ConversationFunction(participant1, participant2), the game determines that the Guard leaves the conversation with the Commoner with a lower disposition toward him, say 'Dislikes'. Now both Commoner and Guard continue on their way. The Commoner gets to the Street Vendor and does not have enough money to purchase food from the Street Vendor and is given two choices now: steal from the Street Vendor or proceed to the General Store or Butcher. However, there is the influencer of how hungry he is now. Let's say, that due to the delay of crossing paths with the Guard and striking up a conversation with him, the Commoner's hunger variable is now at 'Extremely Hungry'. The game rolls the dice with the influencer pushing the odds towards stealing and, sure enough, the Commoner steals and begins to run from the Street Vendor. The Guard, meanwhile, made another random choice to proceed East rather than West on his patrol which, low and behold, happens to put him at the Street Vendor just as the Commoner was stealing. This lowers the Gaurds disposition to 'Hates', which causes him to chase and attack the Commoner. However, nowhere in the code is a line that says 'Guard attacks Commoner'. It was simply an outcome of the generic functions (e.g. EatFunction(), PatrolFunction(), DirectionToWalkFunction(), ConversationInitiationFunction(), FightFunction(), etc.) that were fed variable parameters based on the state of the game world at the time the function was called.
I hope it's clear from the above example that in the scripted version, if you played the game to the point where the Gaurd attacked the Commoner and then played the game 10 more times taking the exact same steps in the exact same time period as you did the first time, the Guard would attack the Commoner every time. In the dynamic example, you could do the same 10 game test and the Gaurd may or may not attack the Commoner each game. It's dynamic. Thus, Radiant AI is NOT the same as scripted.
- fable
- Posts: 30676
- Joined: Wed Mar 14, 2001 12:00 pm
- Location: The sun, the moon, and the stars.
- Contact:
Chamr, you could saved yourself a lot of trouble if you'd read the thread. I have no disagreement with you. (Though I would point ot that what you're calling variable driven is dynamic based on variable checks, but still goes back to NPC "choices" made entirely from scripted options.) This is what I've been dealing with, instead:
"Fable, I was more talking about if NPC A stopped and talked to NPC B and they got in an argument over differing views, they started to fight, friend sof A and friends of B joined in and all of Sudden Town of NPC A and B is gone."
"Won't it just be a matter of scripting only the guy-in-the-street to have random behaviour, and excluding important people such as shop-keepers, healers, and quest-related people?"
"I ran into a random battle just a few minutes ago. It was between a guard and an regular NPC, and I didn't get a journal entrie, so I assume it was just Random!!!!!!!!!!!"
So there is a definite undercurrent of people who understand that RAI means NPCs can do whatever they want. Random = no coding. That's what I've been addressing.
For the rest, the system I worked with for 4 years was a lot more sophisticated than the example you gave, but yes, we could create the impression of random behavior in NPCs by using a large range of flags and variables that looked at everything from aggression to fear, to weather, profession, experience, dialog, items, health, etc. Sorry if I sound grumpy, but I'm getting a bit tired of being bumped on one side by people who believe Radiant AI means freewill NPCs, and hammered on the other by people who tell me of course it doesn't mean freewill NPCs.
"Fable, I was more talking about if NPC A stopped and talked to NPC B and they got in an argument over differing views, they started to fight, friend sof A and friends of B joined in and all of Sudden Town of NPC A and B is gone."
"Won't it just be a matter of scripting only the guy-in-the-street to have random behaviour, and excluding important people such as shop-keepers, healers, and quest-related people?"
"I ran into a random battle just a few minutes ago. It was between a guard and an regular NPC, and I didn't get a journal entrie, so I assume it was just Random!!!!!!!!!!!"
So there is a definite undercurrent of people who understand that RAI means NPCs can do whatever they want. Random = no coding. That's what I've been addressing.
For the rest, the system I worked with for 4 years was a lot more sophisticated than the example you gave, but yes, we could create the impression of random behavior in NPCs by using a large range of flags and variables that looked at everything from aggression to fear, to weather, profession, experience, dialog, items, health, etc. Sorry if I sound grumpy, but I'm getting a bit tired of being bumped on one side by people who believe Radiant AI means freewill NPCs, and hammered on the other by people who tell me of course it doesn't mean freewill NPCs.
To the Righteous belong the fruits of violent victory. The rest of us will have to settle for warm friends, warm lovers, and a wink from a quietly supportive universe.
[QUOTE=fable]Chamr, you could saved yourself a lot of trouble if you'd read the thread. I have no disagreement with you. [/QUOTE]
That's OK. I had fun writing it.
[QUOTE=fable]Random = no coding.[/QUOTE]
Ah. This explains a lot. To an old software engineer like me, when you're talking about code, "Random" just means a call to a random number generator and certainly NOT the absence of coding.
That's OK. I had fun writing it.
[QUOTE=fable]Random = no coding.[/QUOTE]
Ah. This explains a lot. To an old software engineer like me, when you're talking about code, "Random" just means a call to a random number generator and certainly NOT the absence of coding.