Noname CTF v0.3.6
A CTF Mod for Unreal   
http://www.captured.com/nonamectf

-----------------------------------------------------------
1 - Welcome + Updates
-----------------------------------------------------------

	This is an early public release of NnCTF.  Please note that this is
NOT the 1.0 release.  It is an early release and should be considered as such!
In other words, expect bugs, unimplemented features, etc.

Current release notes:
* The flag will lag behind the player in a choppy manner.  This is usually
  not a problem except for when a player, who is carrying a flag, runs
  backwards, the flag will get in their way.  This is still being worked on.
* The smoke trails have been temporarily removed.  They'll be added when I
  figure out how to get them working in net play.
* For very low resolutions (320x200), the HUD will occassionally be too big
  for the screen.  This will be resolved in 0.4.0.


Version 0.3.6:
* Bug fixes include:
  * When a client picks up a flag, it will follow them around correctly.
  * The grappling hook now works properly.
  * The team selection menus now report correct values.
  * The dynamic level info code (that finds where the flags should be spawned)
    was horribly broken, but it works fine now.
  * CTFLevelInfo classes can now be created for levels whose title begins with
    a number.  This involves changing the naming scheme a bit, all of which is
	documented in the readme (see Section 8)
  * The flag is now dropped when a player changes teams.
  * The captured sound (or any other sounds) will not generate an odd
    overlay effect.
* New features include:
  * A new grappling hook!  NnCTF now uses the Grapple Cannon featured on
    PlanetUnreal's Weapons of Destruction site
	(http://www.planetunreal.com/wod)  Bind a key to 'SwitchWeapon 11' to use
	it.  (See the included GRAPPLE.txt for more information on the hook.)
  * CTF support for levels 2Fort4_Test1 and DM Wicked Mansion.
  * Will automatically find team spawn points (it tries to find any PlayerStart
    points near each flag.)

Version 0.3.5:
* Bug fixes include:
  * HUD fragcounts would occassionally go off screen to the left (now they
    shouldn't).
  * The team selection menu now reports correct team scores and player counts.
  * Capture+Stolen sounds should now be heard by all players.
  * The flag no longer gets in the way of the carrier.
* New features include:
  * Hitting F3 will bring up the team selection menu.
  * When carried, the flag will leave behind a small smoke trail.  By 0.4.0,
    this will be team colored.
  * Runes can now be of varying power!  The server admin simply sets up a list
    of runes and their strengths (100 being normal) in the unreal.ini file (or
	in the console.)
  * Adding CTF support to *ANY* map is now possible (without having to edit the
    NnCTF.u file!!)
  * The grappling hook no londer replaces the razorjack!  Instead, it is an
    inventory based item.
	

Version 0.3.1:
* Bug fixes include:
  * No player sounds bug
  * Not being able to fire if not playing on the server bug
  * Scoreboard bug (minor)
  * Flag not following the carrier bug (partial solution)

Version 0.3:
* New version of the jwindy's grappling hook (0.5)
* New skins for Male1, Male3, and Female1 models
* In-game switching to spectator mode (see the "console commands" section)
* Players automatically put in spectator mode (server controllable)
* Menu-based team selection
* The "SetTeam" console command now respawns players after changing teams.
* Runes working properly (strength, resist, haste, and regen)
* Message of the Day (MOTD) support
* Flag capture assist bonuses
* Flag defender bonuses (for killing an enemy near the flag carrier)
* New flag model and skins
* Server setup menus have been enhanced
* Flag stuck-in-mid-air bug fixed.

Version 0.2:
* HUD/console bug fixed.
* New rune code.
* Quad code added.
* Early Grappling Hook (using Jwindy's hook at
  http://gladstone.uoregon.edu/~jwindshe/unreal/ )
* Early Darkmatch code.  This will allow all the lights on a particular level
  to be dimmed by a server-set percentage.  Right now this code has network
  problems.  IE, it only works on the server.  I think I know how to fix this
  though.

Version 0.1:
* Basic CTF structure (flags, ability to steal and capture flags, etc.)
* Custom HUD
* Custom Scoreboard
* Partially-implemented "Configure Game" menu
* All DM maps included with Unreal are CTF-playable (only flags have been
  added, spawn points have not been adjusted for team play.)
* Runes partially implemented, yet they still don't work correctly under 209.




-----------------------------------------------------------
2 - Installation
-----------------------------------------------------------

If installing from the .exe distribution:
    Run the installer and specify where your Unreal directory is located.

If installing from the .zip distribution:
    Unzip Noname CTF into your Unreal directory with full pathnames.  (Full
	pathname support is really only a concern if you use the pkunzip for DOS.
	If you use WinZip, or some other windows unzipper, then don't worry about
	this.)

Then open your unreal.ini file in notepad (or some other editor) and find the
part labeled:

[Core.System]

In there, you'll find a section called Paths.  Find the next available one and
add "..\Maps\MapData\*.u" to it (without the quotes).  Here is an example:

[Core.System]
PurgeCacheDays=30
SavePath=..\Save
CachePath=..\Cache
CacheExt=.uxx
Paths[0]=..\System\*.u
Paths[1]=..\Maps\*.unr
Paths[2]=..\Textures\*.utx
Paths[3]=..\Sounds\*.uax
Paths[4]=..\Music\*.umx
Paths[5]=..\Maps\MapData\*.u
Paths[6]=
Paths[7]=
Paths[8]=
Paths[9]=
Paths[10]=
Paths[11]=


Next find the part labelled:

[UnrealI.UnrealServerMenu]

In the list of games, add NnCTF.NnCTFGame and then increment MaxGames by 1.

Here's an example of what the end result might look like this:

[UnrealI.UnrealServerMenu]
Map=DmExcavation.unr
GameType=UnrealI.DeathMatchGame
Games[0]=UnrealI.DeathMatchGame
Games[1]=UnrealI.TeamGame
Games[2]=UnrealI.KingOfTheHill
Games[3]=UnrealI.DarkMatch
Games[4]=UnrealI.CoopGame
Games[5]=NnCTF.NnCTFGame
Games[6]=
Games[7]=
Games[8]=
Games[9]=
Games[10]=
Games[11]=
Games[12]=
Games[13]=
Games[14]=
Games[15]=
MaxGames=5


NOTES!!: Some people have been having problems getting MaxGames to stay at its
newly changed value.  Here are a few tips if you have such problems:

* Try placing NnCTF.NnCTFGame in between two existing types.
* Immediately after editing the unreal.ini file (or installing the .exe),
  launch a game of NnCTF from the DOS prompt.  The command would be:
  
  unreal.exe dmariza.unr?game=nnctf.nnctfgame


-----------------------------------------------------------
3 - Console Commands
-----------------------------------------------------------

* AboutNnCTF - Displays the current version number of Noname CTF
* SetTeam <team name> - Changes a player to that specific team
* Spectator - Switches a player to spectator mode (and removes them from their
  current team.
  
Grappling Hook:  Go to the "Advanced Options" menu, look under "Advanced" and
then "Raw Key Bindings".  Then designate some key as "SwitchWeapon 11".  Or
you can simply use the console by using the following command:

set input <key> SwitchWeapon 11

For example, if you wanted to bind the shift key to the grappling hook, you'd
issue the following command to the console:

set input shift SwitchWeapon 11


-----------------------------------------------------------
4 - Server Admin Info
-----------------------------------------------------------

The important variables you should know all reside in the NnCTFGame class.
This is where all the options, etc. reside.  Basically, anything a server
admin would want.  It is also important to know that NnCTFGame, for the time
being, is a subclass of TeamGame.  So therefore it should support most of the
options offered in TeamGame and DeathMatchGame.

var() config bool	bAutoFlagReturn;		// should the flag be returned automatically?
var() config bool	bCaptureWithFlag;		// does one's own flag need to be in base in order
											// for the flag to be captured?
var() config bool	bSpawnInitiallyInBase;	// to spawn initially in base or not
var() config bool	bRunes;					// put runes in the level?

var() config bool	bRunes;					// put runes in the level?
var() config class	RuneList[30];			// What types of runes should be included
var() config int	RuneCharges[30];		// How powerful each rune should be
var() config int	MaxRuneCharge;			// The maximum rune charge any one player can have (default: 100)

// Login/Spectating vars
var() config bool	bAutoAssignTeams;		// Should each player automatically be assigned to a team?
var() config bool	bAllowSpectating;		// Is spectating allowed?

// Message of the Day
var() config bool	bMOTD;					// Should the MOTD be displayed?
var() config string[80] MOTD[16];			// The actual MOTD.
var() config float	MOTDDisplayTime;		// The amount of time the MOTD is displayed

// Bonus Variables
var() config float		teamCaptureBonus;	// how many points should a team get for a capture
var() config float		playerCaptureBonus;	// how many points should the capturing player get
var() config string[32]	fragCarrierMessage;	// Message displayed after fragging the flag carrier
var() config float		fragCarrierBonus;	// Bonus given for fragging the flag carrier
var() config float		defendRadius;		// Radius for detecting what's a flag defend
var() config string[32]	defendMessage;      // Message displayed about defenders
var() config float		defendBonus;		// Bonus given to defenders
var() config float		assistTime;			// How much time for an assist
var() config float		assistBonus;		// Bonus given to assisters


var() config bool	bAutoFlagReturn;		// should the flag be returned automatically?
var() config bool	bCaptureWithFlag;		// does one's own flag need to be in base in order
											// for the flag to be captured?
var() config bool	bSpawnInitiallyInBase;	// to spawn initially in base or not



Changing these variables is documented in Tim Sweeney's console command doc,
which is available on http://unreal.epicgames.com

Anyway, here is the basic syntax for changing them:

get NnCTFGame <variable>			- Gets a value
set NnCTFGame <variable> <value>	- Sets a value


These values can also be edited in your unreal.ini file, however they will, by
default, be saved if you edit them at the command line.  However, the easiest
way to edit these variables is by going into the "Advanced


-----------------------------------------------------------
5 - Known Bugs
-----------------------------------------------------------

* On the client's end, the flag will lag behind choppily.  This can be quite
   a problem if the flag carrier is running backwards/

* Botmatch is currently unsupported.  As of 0.3.6 however, someone is actively
  working on changing this (John Parish).
  
* The grappling hook cannot correctly travel through portals.

* The HUD can be a bit overwhelming in 320x200.  This will be fixed by 0.4.0.

Please read the notes in Section 1 for more information about bugs/etc.

This is all I can think of now.  Please send mail to davidl@captured.com with
any new bugs.


-----------------------------------------------------------
6 - Credits/Contacts
-----------------------------------------------------------

If you're interested in joining the team, please contact the appropriate group
leader with a quick resume.

(NOTE TO TEAM: Contact me if I have not included you in the credits.)

(In alphabetical order by first name)

Coders (Current)
----------------------------------------------------------------------------
David "VicViper" Ludwig             - davidl@captured.com
James "StarDrifer" Abbatiello       - abbeyj@wpi.edu
Wesley "Wezo" Lao                   - weslao@home.net
Conny "Karg" Landstedt              - karg@swipnet.se
Jered "Jwindy" Windsheimer          - jwindshe@gladstone.uoregon.edu
John "Gerbil!" Parish               - gerbil@telefragged.com
Nicholas "xNichG" Guttenberg        - nickh@erols.com

Coders (Past)
----------------------------------------------------------------------------
Andreas Jobs                        - Andreas.Jobs@ruhr-uni-bochum.de
Ryan "Garrland" Stolle              - garrland@thepoint.net
Nicholas Anderson                   - AndersNJ@bscmail.buffalostate.edu


Design/Gameplay
----------------------------------------------------------------------------
(to be completed)

Leadership (Da Big Cheeses)
----------------------------------------------------------------------------
Coding/Organization - David Ludwig                - davidl@captured.com
Maps/Gameplay - Luke "weasl" Whiteside            - weasl@cnw.com
Textures/Sounds/Models - Doug "DiGGySpiF" Faddis  - scorpio@lightspeed.net



-----------------------------------------------------------
7 - Code Sharing Policy
-----------------------------------------------------------

The code is and always will be available for users to look at, learn from, and
extend.  This includes building new mods off the NnCTF source code.  However,
you *MUST* give credit where credit is due!

If you're interested in helping out on NnCTF, please see the "Credits/Contacts"
section of this file and then look under leadership for the proper person to
speak to.  We're always interested in new and talented people!



-----------------------------------------------------------
8 - Converting Maps for NoName CTF Play
-----------------------------------------------------------

If you're interested in taking a custom map and converting it to CTF play,
however you're not the author and/or you don't want to redistribute the entire
map, NnCTF will let you do this by creating a "LevelData" object.

To do this, you're going to need a break out a copy of UnrealEd.  Once this is
done, open the level you want to convert as well as NnCTF.u (this can be loaded
by going to the "Browse" selection box (on the right side of the window),
selecting "Classes", and then pressing the "Load" button (bottom-right corner
of the screen.)

Next, from within the list of classes, go to Inventory->Pickup->Flag->NnFlag
and then select the proper flag color.  Place these items onto the map in the
spots you'd like them to end up at, *BUT DON'T SAVE THE LEVEL!!!!*.  The whole
point of this feature (in NnCTF) is that you don't have to make any changes to
the map files.  Instead, right click on each of the flags (on the map), one by
one, go to the flag properties, look under the "Movement" section, then jot
down the three Location values.

Now, go back to the Class list, open up Info->ZoneInfo->LevelInfo and then
select CTFLevelInfo.  Create a New class underneath this one.  The next part is
quite important as it will determine whether or not your module is recognized
and loaded by NnCTF.  You'll need to get the name of the map first (*NOT* the
file name but the map's name.)  This can be found by going to the Options menu,
looking under Level Properties, LevelInfo, and then Title.  If the title is 10
letters or less long, then this will be easy.  Simply write down the name of
it without any spaces and name your new class:

Class Name: <LevelTitle>Info
Package Name: <LevelTitle>Data

For example, if you had a level titled "DM MyLevel", you would name your
class DMMyLevelInfo and put it in the package DMMyLevelData.

However, if the level's title is longer than 10 letters long, then you will
have to take the first five and last five letters in the name (excluding
spaces), combine them together end-to-end, and then append the "Info" and
"Data" as explained above.  For example, if you had a level titled:
"DM Warehouse Rumble", your class would be called "DMWarumbleInfo" and it would
be placed in the package "DMWarumbleData".

One last note on naming; if the level's title begins with a number, then you're
going to have to make a slight adjustment to the name.  First, append an "X"
to the beginning of the name.  Then, if the name is longer than 10 characters
(counting in the "X"), chop off the last character.  Examples:

Level's Title: 2 Legit To Quit
The Name: X2LegioQui
                    ^
                    |
The character that -|
would be here is cut out.


Level's Title: 4 Ever
The Name: X4Ever

Nothing is cut here because the total length is lower than 11.


Level's Title: 8BallAlley
The Name: X8BallAlley

Nothing is cut here either because the total length is still less than 11.


Now, inside this new class, create a function called InitializeLevel which is
passed nothing and returns a bool.  Inside of this function, you will spawn
flags with the values you wrote down earlier.  Here is an example taken from
CurseData.CurseInfo (Which handles DMCurse).

function bool InitializeLevel()
{
	// Red Flag
	Spawn(class'RedFlag',,,vect(-1907.326172, -1020.827820, 21.100090));
	// Blue Flag
	Spawn(class'BlueFlag',,,vect(878.185242, -385.927765, 406.098297));
	
	return true;
}


You can simply take this function and copy it into your class.  The values go
in the order X,Y,Z.  So for this example, the RedFlag is placed along the X
coordinate at -1907.326172, the Y coordinate at -1020.827820, and the Z
coordinate at 21.100090.

The returned boolean is simply used by NnCTF to determine if there were any
errors converting the level.  Obviously in the example above, no error checking
is done whatsoever.  However, you might want to add this yourself, particularly
if your function gets more complex.  Speaking of which...

You are more than welcome to make your function as complex as you want.  By
this, you can use foreach to replace various items in a level or possibly
remove some or add some.  It's up to you.  Look at DMArizaData.DMArizaInfo for
something a bit more complex!

Lastly, make sure you compile your class (hit F7 within UnrealED) and save it
when you're finished.

If you have any questions, feel free ot email davidl@captured.com with any
questions.


