I love the smell of UnrealEd crashing in the morning. – tarquin

Legacy:Mod Ideas/False Prophets

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

False Prophets

Game type: Team Deathmatch

Concept: One player on each team is the "false prophet". Each team competes to obliterate the infidel. The rest of the team protects their "god".

Status: Completed...as best I can. :)

Download it here

Rules:

  • A false prophet (FP) is chosen at random at the start of the game
  • The FP is armed only with his shield
  • The FP's shield regenerates at 2x speed of the normal shield
  • Team members within n radius of the prophet regenerate health
  • (alt) Team members within n radius of the prophet have health leeched
  • FP gets 1 adrenaline every second
  • When the FP is destroyed, the highest (or lowest?) ranked team member becomes the false prophet
  • Each time the FP is destroyed, the opposing team's score increases by 25 points
  • Each time someone kills a member of the other team, his score increases by 1
  • New FP automatically gets n adrenaline for free

Update

  • Dropped prophet ever getting adrenaline (pickup or otherwise) and gave prophet permanent slight speed/jump height increase
  • Dropped prophet leeching/healing health for now
  • Changed scoring to 1 kill of prophet = 1 point, period.
  • First killer on team becomes prophet
  • If prophet dies, the next "first kill" after the prophet's death becomes prophet

Kerlin: Sound like fun? :) Might be good on a CTF map, too, but I think a DM map offers more chaos. If it sounds like a Mutant variant, it is.

Kerlin: To do: TeamAI, SquadAI, Prophet FX

Mosquito: From how it sounds, the FP isn't so false (with all these divine powers and all)

Kerlin: Depends on your perspective, I guess. "My god is real, yours is a false prophet." kinda thing. :)

Kerlin: It never happened. :)

Foxpaw: That sounds like a neat idea.. kind of like a dual escort kind of gametype. Anyways.. the only problem I can see with the scoring system as it stands is that people will probrably not WANT to be the prophet. The only way to score points is by killing people and the prophet is not particularly good at doing so, having only a shield gun. Sure, it's in the best interests of the team for a good player to be the prophet, but players like having big numbers beside their name on the scoreboard because the general impression is that it will impress the other players. How about something like the original domination - the prophet and the prophets team accumulate points as time passes, and the longer the prophet has been the same person, the faster those points will accumulate. That provides incentive to keep the prophet alive as long as possible. For instance, when a player first becomes the prophet, that player and the team accumulate points at a rate of, say, 1 per 3 seconds. After the prophet has been alive for, say, a minute, the team and that player would be accumulating points at a rate of say, 1 point per second. Or something. The numbers need tweaking, but I think it would make gameplay a bit more emotional and exciting, due to the increased stress and important of protecting/assasinating the opposing prophet as he/she/it becomes more venerable.

Kerlin: Some good ideas there, Fox. Since I'm new to scripting, I have to be flexible with what I think I can do vs what I can do. It seems that I'm having problems with bot AI in that the prophet gets stuck trying to pick up health even though I've made sure that WantsPickups(Bot) returns false if the bot is the prophet. WantsPickups is apparently a hack that was implemented into AI for the Mutant gametype. As a result, I may have to come to a compromise that maybe the prophet isn't completely unarmed, but maybe he has less of an ammo capacity....and maybe his health is ticking away. That keeps him on the move and adds some stress. And maybe the idea of a "false prophet" is completely gone and the gametype should just be "Team Marked Men" or "Team Bodyguard". :) Actually it would fix the problem you describe Fox, because prophets would be more lethal. Maybe even give them 2 points per kill. I feel like I'm bastardizing the gameplay now because I'm not quite the coder I need to be.

How about this?

  1. prophets have health ticking away
  2. prophets can use any weapons
  3. kill a prophet get 1 team point
  4. kill a prophet get 10 player points
  5. kill a player get 1 player point
  6. kill a player if you're a prophet, get 2 player points
  7. kill a prophet if you're a prophet, get 20 player points
  8. prophets have full access to pickups

OTOH, I really like the idea of the increased point accrual but I don't think I have the experience to work with states just yet. And if that's the case, there definitely needs to be an "objective" placed on the prophet. Hell, there might need to be anyway since I haven't yet done a Spectate BotMatch. Kind of a bummer that my lack of experience is causing the gameplay to suffer. I need a mentor. :)

Kerlin: WOW! Just had a breakthrough. I used the above changes and it "feels" so much better. Shortly after my teammate became the prophet, other team mates starting showing up and taking defensive positions. When the prophet moved, everyone else followed and pretty much surrounded him. An enemy showed up and the squad completely railed on him. Eventually an enemy became a prophet as well. Him and a few other of his squad were firing on me from a distance. I turned on god mode and ran straight for them. As I approached, a squad member and the prophet started retreating. Two of them held strong and didn't move until they were far enough from their prophet to catch back up with him.

I'm going to do a LOT more testing and run it through spectate botmatch (thanks Mychaeel!!) and see what their orders/tactics are. Scoring has a bug. If I get this scoring bug fixed and come up with a better "glow effect" for my prophet, I think I'll be in business!

(hahah. see the above? that's was a brief moment when I thought it was MY ai that was working)

Kerlin: Thanks for your help everyone. I'm sure you'll find problems but I did my best. (Heck, even I found problems.)

Dark Pulse: Well I'll give it a run-through tonight. My Run-through will be more in-depth once I get my better vidcard in about 2 or so weeks.

Foxpaw: I did not "torture test" the gametype, but I did a few tests and found the following:

Actual Bugs

  • Teams weren't loaded properly. The "team set up" option uses the "no teams"/deathmatch opponent selection instead of the team game opponent/teammate selection. It also nukes the "game rules" if you try to play a different gametype after playing false prophet. Both of these problems were the result of a slight error in the .int file. At any rate this line is in the distributed .int file:
Object=(Class=Class,MetaClass=Engine.GameInfo,Name=Prophet.Prophet,Description="DM|Team False Prophet|XInterface.MapListTeamDeathMatch|true")

Which should read:

Object=(Class=Class,MetaClass=Engine.GameInfo,Name=Prophet.Prophet,Description="DM|Team False Prophet|xinterface.Tab_IATeamDeathMatch|xinterface.MapListTeamDeathMatch|true")

Kerlin: Good catch. Damn...here I go again.... "Thanks!" :)

I tested it with the second line and both problems were fixed.

  • The bots get killed rather easily. I understand that you had some difficulties with the AI, it probrably just needs playing around with. The bots clustered together in a ball and then the entire "ball" stormed into the enemy "ball." Good leadership demonstrated on the part of the prophet, but results in rather high fatality rates for the prophet. :P The clustering also made the bots very vulnerable to massed weapons fire and especially area effect weapons like rockets. I'm not too sure about how the AI scripts work, but it might be possible to separate a team into a bodyguard group and a hunting group.

Kerlin: My AI is, in retrospect, horrible. It's just pathetic. Hindsight being what it is, I shouldn't have released. It's still playable but it feels like an amatuer mod. I have sections of AI code that just don't fire off properly.

  • The scoreboard shows all bot's orders as "sweeping." This probrably isn't hard to fix, but I haven't experimented with it yet so I couldn't tell you how it is done.

Just Ideas

  • I didn't test it, but I'm not sure how well this gametype would operate with a "max lives" setting in the gamerules. This could maybe be changed so that it only counts as a "life" if you die while you are the prophet.. with "Max Lives" there isn't really any significance to who is the prophet since the winner is the team with people left on it.
  • I pictured the glow being more like the one illustrated in the screenshot on the download page.. where Diva has a glowing breastplate. Also cool would be a "halo" around the person's head, but that might be too religeon-specific. I have a couple of ideas how the glow might be made better, but on the other hand maybe you like it just the way it is. Do you mind if I decompile the .u file and try some other effects to see what I can come up with?

Kerlin: So did I. That was a screenshot from a running game test. Then something got wacky with my emitters. They were sticking to the floor after death and the framerate was dropping to 30, 20, 8, 4, 1 FPS as the game went on. All the while, emitters are hanging around. :( Since I was literally compiling new versions every 10 minutes, I ended up losing the good code.

Eventually, it came down to crunch time and I mistakenly released a less than optimum mod so I could theoretically get in the MSU contest. I underestimated the competition and got a little burnt out working 6 hrs a night for the past two weeks. Yes, it's embarassing to admit it but TFP took a massive amount of time.

By all means, decompile. I'll warn you. It isn't pretty. I bastardized the following: xMutantPawn, xMutantGame, CTFGame, MutantGlow and a few more that will become apparent. I think my biggest mistake was "TryToIntercept"

My goal for October is to rework what I've done. Maybe start from scratch. I think the concept is a good one but was poorly delivered on. And there's so much that could be done:

  • Random translocate when becoming prophet
  • Announcements & text display "A new false prophet has risen", "False prophet grows stronger"
  • Better, more custom HUD
  • Combo: Eye of God (any visible enemies get hit with a lightning gun shot emenating from the prophet)
  • Bring back emitter fx

I was a fool for thinking I could come up with a competitive mod in two weeks. Lesson learned. Still humble. :)

Kerlin: As part of the rewrite, I'm lopping out just about everything but the minimum required gameplay rules. I don't know how the game can even be played. I've got to tip my hat to Epic for filling in the gaps because there are some major problems with setting who the prophet is. My question is this: is there some way I can figure out what team a subclassed TeamAI and SquadAI are on? ProphetSquadAIs get created by ProphetTeamAI which is created by the Prophet class. But which Team is the squad on? Definitely need to figure that out before I can say who is an enemy and friendly prophet. :)

Foxpaw: Hmm. I couldn't say about the AIs, I don't use any of that AI scripting stuff in my mod. The emitter in that screenshot was very cool looking. I'm not sure how you got it to only come out of the breastplate like that, unless it was just a coincidence that it lined up like that. Anyways, if you have a problem with emitters sticking around it shouldn't be hard to fix, but I'd have to see it to be sure. I wouldn't worry too much about the MSU contest.. there's three phases anyway, and the first one isn't really a biggie. You'll be able to resubmit false prophet to the second one if it's improved a bunch anyway. The most important thing I think for that contest is that the mod has to be fun.. they probrably won't grade it based on how long it took to make or how complex it is, so I wouldn't worry about that. The best gametype one I can't foresee having that much competition anyway.

VonStrohmen: Both SquadAI and TeamAI have a 'Team' variable which points to the TeamInfo of that squad, which will tell you what team the bot is on by comparing to the TeamIndex variable (0 = red, 1=blue). In SquadAI, you can also call the function FriendlyToward to see if that squad will set another pawn as an enemy. You can also access the TeamAI associated with TeamInfo by using the AI variable in UnrealTeamInfo (since UnrealTeamInfo is subclass thats actually used anyways). Alternatively, if you have a subclass of Bot, you can just use the SameTeamAs function, or directly call Level.Game.IsOnTeam. In short, there are lots of ways to whether a Prophet is friendly towards/on the same team as one of your squads or bots.

Kerlin: Thanks VonStrohmen. As I said, I've been focusing on better understand what's going on rather than trying to modify an existing class (like CTFSquadAI). I'm more interested in doing it the right way (and understanding how/why) than just getting it done...time is on my side right now. With all of the places I can figure out what team someone is on I guess we can categorize this question under "duh".

I'll dig up my code, Fox. I zipped up the entire directory five or six times during this whole fiasco and I think that I've got one saved where the emitter is working. I know my starting point was xMutantPawn and MutantGlow from the BonusPack directory. I believe I just changed the colors and the offsets. I'll dig for it and let you know, though. I figure it's the least I can do for all the help everyone's given me. :)

And yes, it was coincidence for the most part since I clearly don't know what I'm doing half the time. :P

Foxpaw: Hey Kerlin, are you still working on this? I was sitting around in the senior computer lab at university today and I didn't have the source for my mod there but I had UT2003 so I decided to play around and see if I could come up with something interesting. Then I remembered the emitter effect from this mod and thoughts I could whip up something. I'll probrably post the souce up here tomorrow, but I came up with a neat "flaming halo" emitter that can go around the prophets head, and I could probrably add some more fanciness to it too. Anyways, I don't have classes tomorrow but if I stop by the university I;'ll post the source up here.