Manual talk:Configuration settings

Some archived discussion from when the page was located on meta can be found in /archive from meta (including full page history).

Configuration Settings - Index Creation
As a big thank you to Brion, for all his useful help over IRC, I decided I'd put a bit back and make a more useful 'configuration settings' index. All data has come from the configuration page on meta, and has been translated partially by machine, partially by hand. Errors or omissions are bound to have crept in (in particular links within the summaries/descriptions).

All settings pages currently have 2 warnings. The first indicates that the information is not necessarily accurate or up-to-date. The second indicates that the version information has not been checked. Initially, all settings are listed as being available in 1.5, whether they are or not!

Please hold off editing any of these pages until I have removed the notice from the top of this main page.

-- HappyDog 02:32, 21 October 2005 (UTC)


 * I have completed the update. ALL information from  should now be incorporated here.  I have even included notes that were not attached to a particular setting (i.e. attached to a heading), even though I think these are probably not wanted here.  We can move/remove them later though, once things are bedded in.
 * There are sure to be some conversion errors, even aside from the version data that I have flagged, so be warned!
 * --HappyDog 04:39, 21 October 2005 (UTC)
 * Well done and a Thank you again :-) -- :Bdk: 10:14, 16 January 2006 (UTC)

Subdomains??
My mediawiki is reachable under http://mydomain.com/mediawiki/ Is it possible that the mediawiki is reachable under http://wiki.mydomain.com?

What I have to do? I use Apache2 under Debian Sarge. 07 May 2006


 * Point wiki.mydomain.com to your ip, create a new virtual host for it under /etc/apache2/sites-enabled (default is a good example). Also use the apache rules under /etc/mediawiki/apache.conf for it. I'm sure you'll figure it all out. 129.241.139.198 17:20, 24 May 2006 (UTC)


 * If have your subdomain at your webserver set up correctly, it's easily possible to perform a fresh install of the MediaWiki software there. It is also possible to move an existing installation from http://mydomain.com/mediawiki/ to http://wiki.mydomain.com by changing all the relevant entries in LocalSetting.php - but this may require a few trial-and-error interations before you got everything right. --Klaws 14:24, 15 June 2006 (UTC)


 * I don't understand... I suck at English... should i go to http://85.30.155.6/smashbros.elwiki.com/ (my wiki isa t smashbros.elwiki.com) 85.30.155.6 23:04, 26 August 2006 (UTC)

File Uploads
My testing indicates that the only flag from the upload section that still works is wgEnableUploads. (Backward step imo from 1.4, where I could select whether or not to allow certain file types to be uploaded) - Kevin 192.85.50.2 10:02, 16 January 2006 (UTC)

Adjust Time
My Server is running on Greenwich Main Time but I would like to set it to German Time. Can I do that in LocalSettings.php? I tried to set $wgLocaltimezone but it has no effect. 212.126.218.123 11:18, 28 January 2006 (UTC)

Hi, I have the same problem, the $wgLocaltimezone doesn't working correct, so I experiment a little bit and find out, that following entries set the german time:


 * 1) Set Default Timezone
 * $wgLocaltimezone = "EUR-1";
 * $oldtz = getenv("TZ");
 * putenv("TZ=$wgLocaltimezone");
 * $wgLocalTZoffset = date("Z") / 3600;
 * putenv("TZ=$oldtz");

--84.246.248.39 12:01, 10 March 2006 (UTC)

dumpMessages.php
I don't find no information about this "dumpMessages.php". Is is deprecated ? Or just no one writing a help file ? --tr:katpatuka

User Options
How can I change the default options for non-logged-in users? I mean things like numberheadings or justify the text. When I'm logged-in, I can change the options for me, but not for the non-logged-in users.

thx!


 * $wgDefaultUserOptions

Trail
Is there a configuration parameter for adding the 'Trail' somewhere on the GUI. I'm looking for the list of pages that you have visited that gets stored at the top of the page. I can then click on any page and go back to that page. The previous version of Wiki (JSPWiki v2.2.33) had this and I can't seem to find it in MediaWiki.

Thx


 * Nope. There might be a third-party extension, try googling it up. The usual term is something like 'breadcrumbs'. --Brion VIBBER 21:36, 11 April 2006 (UTC)

Updates
I am updating all the individual configuration settings sub-pages, with the following changes: Note that I will not be checking accuracy or completeness at this stage. I may do so in the future - but then again I may not :) --HappyDog 00:37, 16 April 2006 (UTC)
 * If the page still has the 'unchecked version' it will be removed, and the version will be listed as '??'.
 * The name of the setting will be passed to the template minus the $wg part, so it can be used to order the category listings appropriately (as well as being available for future use within the template itself).
 * Adding a '== Details ==' header, as this needs to be removed from the template. In the current situation, clicking the section-edit link to edit the details section takes you to the template instead.


 * All done. Still a lot of tidying up/fact checking to do, but it's getting better. --HappyDog 03:06, 16 April 2006 (UTC)

localsettings.php
It may sound stupid but could someone please tell me how to access the localsettings page to enter all these configurations. TIA --172.143.130.105 18:47, 16 April 2006 (UTC)
 * localsettings.php is in the top level of your mediawiki directory. --Rick 01:35, 24 May 2006 (UTC)


 * OK, I hate to sound twice as stupid, but I have the same question, and that answer didn't help. Could you pleeeeeeeeese explain, really simple like, exactly what I have to do to find this page??? 70.105.24.59 06:48, 27 August 2006 (UTC)


 * You have to log into your server account and go to the wiki root directory and then if you list the contents of that directory, then you will see the file named LocalSettings.php. Open and edit using your favourite text editor.  Or using your ftp client, connect to the server, again go to the wiki root directory, then transfer the file to your computer, edit using your favourite text editor, then upload back to the server the new version. --Dr DBW 00:12, 12 December 2006 (UTC)

When I edit my LocalSettings.php and then upload it and refresh... no changes happen! I tried just changing the logo and no go.

Yup, same here. Is $wgLogo special? I just moved my logo into the wiki.png image file, but I'd prefer to, you know, "do it right." --Brad Eleven 19:30, 28 June 2007 (UTC)


 * There are some caching issues involved I suspect. And there are two places this can happen, with the browser you are using and with MediaWiki itself.  With the latter, a trivial change to the page typically fixes it. --Dr DBW 02:43, 29 June 2007 (UTC)

How to enable IFRAME Tag?
Hi, I need to learner how to enable IFRAME HTml tag in this script. Or I need to understand which line of file creat a Title of Article. I put a code is this line. Thanks.

Sorry for my bad english.

contatc: flaviogomes (a) correios.net.br --201.10.139.15 12:37, 26 April 2006 (UTC)

In your LocalSettings.php, set $wgRawHtml=true. Note that will allow raw HTML for everyone, on every page!

In one of my Wikis, I have an extension which allows raw HTML for Sysops only (on protected pages only), to prevent abuse. Available upon request. --Klaws 12:09, 15 June 2006 (UTC)

When I edit my LocalSettings.php and then upload it and refresh... no changes happen! I tried jsut changing the logo and no go.
 * Maybe you made a typographical error?

Using $wgDBuser
Hi! I want to use the variables $wgDBuser, $wgDBPassword, $wgDB... in an other file.

How can i get informations from this variable in there?

Thanks Sascha Brockmeyer.S@atlas.de

How to override functions in SpecialUpload.php???
I want to customize some of the functions in SpecialUpload.php. I do NOT want to edit that file. Instead I want to "subclass" it or in some other way get wiki to read another file with custom functions. What is the best way to override one of the standard wiki phps??
 * Depending on what you are trying to do, you may be able to acheive what you're after by writing an extension using one of the supplied hooks. See Manual:MediaWiki hooks for more details. --HappyDog 23:09, 3 May 2006 (UTC)

Is there a configuration to turn off section edit links, globally?
Is there any configuration setting to remove the section edit links for all pages? Something like a global " " which could be set in "localSettings.php"...  any ideas? thanks, --Zeroasterisk 04:13, 4 May 2006 (UTC)
 * I don't know of a setting for this (doesn't mean there isn't one...) but it is something that individual users can enable/disable through their preferences. You could set the default option for non-logged-in and new users to be off, though I don't know if you could stop someone turning it on if they chose. --HappyDog 13:11, 4 May 2006 (UTC)
 * That's a great idea - it's a least a good start. (how to do it: )  It would still be nice to know if anyone knew of the actual setting...?  --Zeroasterisk 15:59, 5 May 2006 (UTC)

$wgEmailConfirmToEdit
Please add the above setting to the "Email settings" list. Archon 19:46, 9 May 2006 (UTC)

Wiki on old MySQL
Is pssible installing Wiki on MySQL 3.23.40 and PHP Version 4.3.8? Wich version?--82.200.186.12 22:11, 19 May 2006 (UTC)

and it works fine, Im sure there are some security threats, but its a private Wiki with a great crew to help me maintain it.
 * I Had a similar problem, I just used an older stable version of MediaWiki (1.6.X) I beleive

Windows path quoting
To whom it may concern: I (as 67.170.224.143, sorry, I forgot I didn't have an account on this site) added a note in Manual:$wgSVGConverters about quoting the executable path for Windows. Hope this is OK. It doesn't seem to apply to $wgImageMagickConvertCommand, which (at least in 1.6) is properly escaped by Image.php before use. JohanTheGhost 20:31, 21 May 2006 (UTC)

$wgRightsText
There appears to be very little info about how to get this this variable to work.

I found that if I place a string in it, I can only get the string to display if I also put something into the '$wgRightsPage' variable, but I don't want a rights page, so I placed a space into it, which works, but I'm still left with the 'Content is available under' as lead in to the page link.

Why are these two variables so interdependent?

Why are there no docs anywhere about them?

tia

Never mind - I finally found the info (on Meta) $wgRightsText is the string displayname for the page located by $wgRightsPage


 * I added some more information to Manual:$wgRightsPage, Manual:$wgRightsText and Manual:$wgRightsUrl. Please add to this if there is anything else I missed. --HappyDog 00:08, 28 June 2006 (UTC)

LocalSettings.php as an article
I've always preferred having my LocalSettings.php available as an article rather than a file so configuration can be done directly from within the wiki (sysop only because you can break the wiki if the article has a fatal error in it). So if any admin thinks this is useful, could you move it to the article or somewhere appropriate? I can't edit much here now that its all locked down :-(

To get it to execute the LocalSettings.php article, add the following lines to your index.php file after the line containing the wfProfileIn('main-misc-setup'); statement: $tmp = new Article(Title::newFromText('LocalSettings.php')); eval($tmp->fetchContent(0, false, false));
 * 1) eval($tmp->getContentWithoutUsingSoManyDamnGlobals); # use this for version 1.4x or less
 * --Nad 22:31, 28 June 2006 (UTC)


 * However, it may be impractical that after saving a version with a fatal error, you have to undo the changes above in order to be able to correct the error.--Patrick 14:09, 14 February 2007 (UTC)

$wgSitename
Is it possible to use special chars like the German ä in $wgSitename? I tried using ä and &auml; in the $wgSitename-String, in both cases it´s not displayed as ä the Browser- as well as for the Project-Link in the Navigation bar. What can I do? --89.48.62.134 14:24, 7 July 2006 (UTC) (I use the latest stable MetaWiki Version with German localization)
 * That's due to the way your browser handles special characters. If not sure if newer browsers or browsers running on computers set in German may display this correctly.  Anyway, you site users may not have updated browswers, so that won't work.  Unfortunly non-English characters can not reliably be used on the Internet today. Sorry --141.158.62.105 17:38, 7 August 2006 (UTC)
 * Actually you can use accentuated characters in $wgSitename, but it needs to be encoded in UTF-8. Probably your LocalSettings.php file is encoded in IS0-8859-1 (latin1) if you use Windows (depends on your text editor too). For the $wgSitename to contain UTF-8 encoded string, use the PHP function $wgSitename=ut8_encode('Schwarzwälderkirschtorte'); and it will display fine.


 * The issue is not related to 'reliability' of browsers, but to understanding of character encoding. English people who can rely entirely on ASCII (the 128 first characters common to most encodings) tend to forget about that and make things 'unreliable' for the rest of the planet. So be carefull! :) BigueNique@yahoo.ca --64.18.180.117 19:54, 31 May 2007 (UTC)

Sitenotice
Can someone change the listing for $wgSiteNotice, because it is currently full of POV. The notice does not have to be bold or ugly. --141.158.62.105 17:31, 7 August 2006 (UTC)


 * Done. --HappyDog 17:34, 8 August 2006 (UTC)

File Upload
Hello, I need some help. I have started a wikisite, and had the host install the wikifiles, I belive with the very latest version as of Thursday, August 17th. I cannot seem to get file upload activated, but the documentation seems to say it should be...--Trek84 20:47, 18 August 2006 (UTC)

Add this please
Manual:$wgBlockAllowsUTEdit. Oh and I probably didn't format it properly when writing it so it may need some template stuff. I don't know which version it started being active, either. 12.72.105.234 07:46, 8 September 2006 (UTC)
 * Done; thanks for reporting this. —dto 08:12, 8 September 2006 (UTC)

New 1.7 Configuration Settings
Please add the two configuration settings added in MediaWiki 1.7: $wgSaveDeletedFiles and $wgSaveDeletedFiles /** * By default deleted files are simply discarded; to save them and * make it possible to undelete images, create a directory which * is writable to the web server but is not exposed to the internet. * * Set $wgSaveDeletedFiles to true and set up the save path in * $wgFileStore['deleted']['directory']. */ $wgSaveDeletedFiles = false;

/** * New file storage paths; currently used only for deleted files. * Set it like this: * *  $wgFileStore['deleted']['directory'] = '/var/wiki/private/deleted'; * */ $wgFileStore = array; $wgFileStore['deleted']['directory'] = null; // Don't forget to set this. $wgFileStore['deleted']['url'] = null;      // Private $wgFileStore['deleted']['hash'] = 3;        // 3-level subdirectory split Many thanks! --130.202.234.240 04:42, 10 October 2006 (UTC)

Selecting default fonts
Which config file specifies the font selections for the skin? I looked in MonoBook.js, MonoBook.css, and localsettings.php. Perhaps I missed it, but I didn't see it there. I'd like to tweak the skin so that section headers use a different font. Thanks.

Templates not working for me
There are many templates (mostly for Infoboxes) that I have been trying to copy from Wikipedia to my Wikia. The Conditionals, I think, are crashing the code. (Example: http://wiki.raceNOSPAMtotheright.com/index.php?title=Template:Infobox_Radio_station) I have installed the Parser extensions. H-E-L-P, please. --Mnyakko 19:38, 30 October 2006 (UTC)

Images not showing up
Mine is a new installation, and I'm trying to insert images in the wiki pages. The images are hosted in a seperate gallery software (PhotoPost), but on the same domain.

Anyway, I'm still calling the images using a full url (I would love to see a bridge for PP-MW, but that's for another day), by typing bracket bracket Image: http:// fullurletc .jpg pipe title bracket bracket.

However, it's creating a link to the Special:Upload page instead of embedding the photo. I have $wgAllowExternalImages = true; in LocalSettings.php - so why is it not inserting the photo? I have gone through the documentation and I cannot seem to figure what I've overlooked. I don't want people uploading images to the wiki directly, I want them to upload them to the PhotoPost installation, so I want to steer away from enabling uploads.

While I have you, speaking of not enabling uploads, where can I locate the file I use to edit the text on Special:Upload -> "Uploads disabled... File uploads are disabled on this wiki." I want to change that and tell them to go to the PP gallery and upload them there instead (with the respective link).

2 questions. Thank you for your time. MediaHound 01:09, 3 November 2006 (UTC)


 * bump MediaHound 01:26, 6 November 2006 (UTC)


 * where exactly are you trying to bump to? --HappyDog 04:22, 13 November 2006 (UTC)
 * the 2 questions above that I'm asking for help with, can you help? thanks MediaHound 18:34, 15 November 2006 (UTC)
 * Not 'what', 'where'. :) --HappyDog 03:18, 16 November 2006 (UTC)
 * Right here :) MediaHound 15:57, 9 April 2007 (UTC)


 * As you read above I was calling the images with brackets. What I did to fix my problem, (yes, I worked around it), was drop the brackets and call the image by the full url AND since I was using dynamic image urls chock-full-of ? and & characters etc it did not end with a common image filetype. So I added &filefix=.jpg to the end of my urls and that got it to parse properly as an image. I'm still wondering where to edit the text "File uploads are disabled on this wiki.", but since I worked around the problem that led me to that page, I care less now. MediaHound 15:57, 9 April 2007 (UTC)
 * found it /index.php?title=MediaWiki:Uploaddisabledtext&action=edit :blows kisses: MediaHound 16:19, 9 April 2007 (UTC)

How to set upload limit?
As title, how to set upload limit to my Wiki?


 * Are you after a total upload limit for a user, or per file? The latter is quite easy to do, but it only provides a warning, not something that stops it from being done entirely.  See, Manual:$wgUploadSizeWarning.  --Dr DBW 00:19, 12 December 2006 (UTC)

undocumented option $wgEnableScaryTranscluding
$wgEnableScaryTranscluding allows you include template from another wiki.

--84.32.99.253 11:12, 24 November 2006 (UTC)
 * in LocalSettings.php add $wgEnableScaryTranscluding = true
 * in database in interwiki table in column 'iw_trans' you must set to 1.
 * then use   in page

$wgUseTidy
The manual entry for this is here: Manual:%24wgUseTidy. Is there any further information around about how this actually works, how to configure etc? Would be nice to know what the code is actually being run too, is it already incorporated into the distribution of MediaWiki, or where is it actually been run? Where it the default configuration file for Tidy, or does one not exist and all defaults are being used?

Reason being that I have enabled it to solve some issues with HTML table coding not rendering correctly, but now it messes up the coding for all images within the wiki. Full details are on the talk page - Manual_talk:%24wgUseTidy --Dr DBW 00:19, 12 December 2006 (UTC)


 * From what I can tell, looking in DefaultSettings.php, tidy is run off the server that MediaWiki is installed on (on my server it is at /usr/bin/tidy). There is no configuration file being used, but if you do the default location is at /extensions/tidy/tidy.conf --Dr DBW 01:02, 12 December 2006 (UTC)

Problem with implementing Infoboxes
I'm having the same issue as mentioned in an early comment with setting up Infoboxes and other coding that uses the #if parameter in on my local MediaWiki site. Any ideas? --TotalBalance
 * What exactly is the problem? Or a link to where it is detailed?--Dr DBW 01:10, 9 January 2007 (UTC)

changed LocalSettings.php does not work
The installation was succesfull. After enabling image uploads, and thus only changing false into true, de LocalSettings.php doesn't work anymore. I get this error:

Warning: Cannot modify header information - headers already sent by (output started at /opt/www/avontsk/web/www.derepubliek.eu/vvp/wiki/LocalSettings.php:1) in /opt/www/avontsk/web/www.derepubliek.eu/vvp/wiki/includes/WebResponse.php on line 9

Only the original LocalSettings.php seems to work. I've tried chmodding, but to no effect. Can anyone help me?

Avonts 16:13, 14 January 2007 (UTC)


 * You have probably added whitespace before the opening  tag. --HappyDog 15:29, 15 January 2007 (UTC)


 * Thanks for your reaction. I've checked it. I didn't add any whitespace. It still doesn't work.
 * Since the initial LocalSettings.php works, but later uploads (which overwrite the old ones) don't, I was thinking it may have something to do with FileZilla. Any ideas? Avonts 17:18, 15 January 2007 (UTC)
 * In that case, I don't know. The error is caused by some output being generated before the page headers are sent, and is normally caused by whitespace generated by include calls, or by PHP errors.  However, when there is an error, you should see that on the screen too.  All I can suggest is to try checking the source of the page that is generated, and to undo your change and see if the problem goes away.  Maybe someone else can offer some more advice. --HappyDog 18:11, 15 January 2007 (UTC)
 * It seems that it is BOM at the beginning of LocalSettings.php. Use editor which can save in UTF-8 without BOM. 84.32.103.78 15:25, 16 January 2007 (UTC)
 * I'm using Windows Notepad now. I'll try another one. Avonts 17:28, 16 January 2007 (UTC)
 * You can fix it with Notepad, by using 'save as' and selecting "ANSI" as the encoding type. --HappyDog 23:19, 16 January 2007 (UTC)
 * Yes, it was the BOM-thing. I'm using jEdit now. Thanks for your help.Avonts 08:05, 17 January 2007 (UTC)

$wgMaxUploadSize
Please add $wgMaxUploadSize. 71.133.74.137 01:07, 3 February 2007 (UTC)
 * Done --HappyDog 01:02, 7 February 2007 (UTC)

broken Redirects
Is there anything I need to do to enable the special page "Broken redirects"? it does not seem to be updating at all.

Auto-Logout
Is there a parameter where I can config after what time a session gets closed? --GunterS 15:33, 14 March 2007 (UTC)
 * Seconding this question: Is there an option to modify this timer? --Elonka 00:58, 8 April 2007 (UTC)
 * Session timout is set in php.ini, see ini.session.cache-expire --Nad 01:38, 8 April 2007 (UTC)

Page organization
I would like to see the site list a 10 most common settings at the top of the page. It should include login required for editing.

External images
$wgAllowExternalImages is listed under "#Parser" instead of "#Images", but I think it should be at least mentioned at the "Images" section. --Kjoonlee 17:33, 5 May 2007 (UTC)

$wgNoFollowNsExceptions
Could someone add $wgNoFollowNsExceptions to the list? (Why is this page protected while the alphabetical list isn't, anyway? Shouldn't they have the same protection status?  And why doesn't the protection log show anything?)  --Ilmari Karonen 18:21, 13 May 2007 (UTC)
 * Good point. Will do so. This page was protected way back then when it was located in Help:Configuration settings, and the protection log doesn't follow pages across page moves. (See Bug 8296 and Bug 7011.) Titoxd (?!?) 18:35, 13 May 2007 (UTC)

Category/ies: link
How to modify the "Category/ies:" link (that is, Special:Categories by default) at the bottom of pages ?

nb: I think the topmost category should be a better default value. STyx 00:16, 27 May 2007 (UTC)

How to change language??
How to change the language to swedish? I've tried to change : "$wgLanguageCode = "en" " to "$wgLanguageCode = "sv" " but it doesn't work. How should I do it??
 * Maybe it's because there's no LanguageSv.php in the language/classes directory of the standard installation - there is a MessagesSv.php file though, but I think it needs both... --Nad 21:26, 28 May 2007 (UTC)
 * You have right, there is no LanguageSv.php but where can I get it? I can't do it myself cuz I can't PHP.

Cookies?
Can i turn the cookies off because the login doesn't work in IE7. It says: "Login error:SWiki uses cookies to log in users. You have cookies disabled. Please enable them and try again. ". I have all cookies accepted and session-cookies accepted. And plz help with the launguage problem over this post. And plz get a forum like phpBB or vBulletin. It should be easier to get answers so.


 * Try to add this line to your LocalSettings.php:
 * header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
 * It's a tweak for cookies to be accepted by IE6+. It worked for me on another PHP project, so who knows.  BigueNique@yahoo.ca --64.18.180.117 20:06, 31 May 2007 (UTC)


 * It is still the same problem :(

The above is nonsense. robchurch | talk 12:44, 21 July 2007 (UTC)

using search for a 3 letter word
searching for "IBM" or anyother 3 letter word doesnt work on my wiki.

anywhere i can config this?

its a mysql config problem Change your 'my.cnf' file to contain at least the following: [mysqld] ft_min_word_len=2 [myisamchk] ft_min_word_len=2 and then even 2-character words should be searchable. Once you change this parameter, you need to rebuild the text index by running maintenance/rebuildtextindex.php

Page customizations
Is the list of page customizations still up to date? I have MeidaWiki 1.9.3 and find that: Am I living in the past or do these page names change very frequently?
 * Instead of MediaWiki:aboutpage I have MediaWiki:about.
 * Instead of MediaWiki:copyrightpage I have MediaWiki:Copyrights.
 * Instead of MediaWiki:privacypage I have MediaWiki:Privacy_policy.

Zakładanie konta przez administratora
Mam pewien problem z mediawiki i nadzieje ze ta stronke odwiedzi jakis polski uzytkownik i mi pomoze. Chodzi o to ze nie wiem jak sprawic by w przeze mnie stworzonej wiki tylko administrator mogl zakladac uzytkownikom konta, a uzytkownicy wysylali do administratora powiadomienie o checi zalozenia konta i wtedy administrator albo decyduje sie na zalozenie albo nie. Z góry bardzo dziekuje za pomoc.

Categorise by section
Moved from User talk:Eep

Hi Eep - On your 'todo' list, you have "Categorize Category:MediaWiki configuration settings (variables)". What are you planning to do here? Please discuss any changes before implementing them. Thank you, and welcome to MW.org --HappyDog 13:08, 25 July 2007 (UTC)


 * Hi. Well, like how that category has a link to Manual:Configuration settings which divides the variables into functions/sections, categorizing each variable under the section (Category:Namespace variables, etc) would make them easier to reference, to along with categorizing MediaWiki functionality (Category:MediaWiki components). -Eep² 13:41, 25 July 2007 (UTC)


 * I'm not sure I quite understood that. Do you mean adding categories for each of the section headings, 'General Settings', 'Paths', 'Shared uploads', etc.  If so, this should be possible by just modifying Template:SettingSummary, as the section is already passed to it as a parameter. --HappyDog 02:09, 26 July 2007 (UTC)


 * I don't mean sorting variables in Manual:Configuration settings but in actual MediaWiki categories under Category:Variables that match the sections in the manual. Categories are then categorizable under other categories (such as Category:Namespace variables under Category:Variables and Category:Namespace, which also includes other namespace-related articles/categories). The idea is to make finding related things easier. -Eep² 03:28, 26 July 2007 (UTC)


 * I think we're talking about the same thing... What I mean is that the 'section' parameter is currently passed to the template, which provides a link to the appropriate section on the main config settings page.  What I am suggesting is that it would be very easy to also use this parameter to add the setting to the appropriate category by using something like  (obviously checking that it's not blank, etc., first).  That way all the settings will be automatically categorised without needing an edit, and that categorisation is consistent with the main config page.  After that you would categorise the resulting categories into the appropriate locations as you describe.  I would also recommend adding them to a new Category:Configuration settings by function so that they can be found easily from Category:MediaWiki configuration settings as well as from the more functional Category:Namespace, Category:User rights etc. (which would also hold help/manual pages and so on).
 * Note that we may need to add a prefix/suffix to the section names otherwise there may be clashes with more general purpose categories, so maybe "Config:" ("Config:General settings", "Config:Paths", "Config:Shared uploads") or "Config variables for "("Config variables for General settings", "Config variables for Paths", "Config variables for Shared uploads"), or perhaps ending with " (variables)" ("General settings (variables)", "Paths (variables)", "Shared uploads (variables)"). None of those examples are ideal, but I think we can't just use the settings names directly.  Any better suggestions? --HappyDog 12:06, 26 July 2007 (UTC)

slide shows
Is there a good way to upload slide shows to Mediawiki? Wlecroy 18:13, 23 August 2007 (UTC)

Restrict Registration to specific Domain via email address
Hello, As this is a hack, I've elected to place it here. I just installed mediawiki for the first time this week. If I have time, I will explore the possibility of making an extention in the future. at this time I don't have the background experience with mediawiki to do so.

Purpose This hack restricts user registrations by adding a single conditional to the includes/SpecialUserlogin.php, adding a single function to includes/AuthPlugin.php and adding a new message to /Messages.php. In the event that you upgrade mediawiki, chances are you will need to update these files.

Steps //Conditional added to require email is specific domain. Calls function from include/AuthPlugin.php if( !$wgAuth->checkEmail( $this->mEmail )){ $this->mainLoginForm( wfMsg( 'wrongemailDomain' ) ); return false; }
 * Turn off anonymous editing in localsettings.php
 * Open up /includes/SpecialUserlogin.php and add the following code (I added it at line 188)


 * Open up /includes/Authplugin.php and add the following code (I added it at line 54)

//Function added to require email from specific domain function checkEmail($email) { if(eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email)) { return FALSE; }    list($Username, $Domain) = split("@",$email); if($Domain != 'domain.com') { return FALSE; }else{ return TRUE; }    }

Replace 'domain.com' with your domain in the above code.


 * Open up /languages/messages.php and add the following code (I added it at line 404)

//Added to Display Message when email is not from your domain 'wrongemailDomain' => 'Email address was not from the correct domain. Please try again.',

CURL PHP Forum


CADM error messages
jfl;askjflkasjdfl

Range.c
/* *************************************************************************** * File: race_class.c                                         Part of Toril * * Usage: tables, wordlists, and etc, dealing with races & classes. * * Copyright  1996 - John Bashaw and Sojourn Systems Ltd.                   * *************************************************************************** */


 * 1) include "race_class.h"

/* new saving throws are given as {max, min} for each class, max applies at level 1, min applies at MAXLVLMORTAL (50 currently), levels in between will have a saving throw somewhere in between. JAB */

byte saving_throws[TOTALCLASS][5][2] = {  {{ 0,  0},  { 0,  0},  { 0,  0},  { 0,  0},  { 0,  0}}, /* NONE             */ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (Warrior)     */ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (Ranger)      */ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (Berserker)   */ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (Paladin)     */ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (AntiPaladin) */ {{50, 10}, {85, 30},  {65, 25},  {80, 40},  {75, 35}}, /* CL (Cleric)      */ {{50, 10}, {85, 30},  {65, 25},  {80, 40},  {75, 35}}, /* CL (Monk)        */ {{50, 10}, {85, 30},  {65, 25},  {80, 40},  {75, 35}}, /* CL (Druid)       */ {{50, 10}, {85, 30},  {65, 25},  {80, 40},  {75, 35}}, /* CL (Shaman)      */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Sorcerer)    */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Necromancer) */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Conjuror)    */ {{65, 40}, {85, 20},  {60, 35},  {80, 55},  {75, 25}}, /* TH (Thief)       */ {{65, 40}, {85, 20},  {60, 35},  {80, 55},  {75, 25}}, /* TH (Assassin)    */ {{70, 40}, {90, 25},  {75, 35},  {85, 55},  {85, 30}}, /* WA/TH (Mercenary)*/ {{65, 40}, {85, 20},  {60, 35},  {80, 55},  {75, 25}}, /* TH (Bard)        */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Psionicist)  */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* LI (Lich)        */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Enchanter)   */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Invoker)     */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Illusionist) */ {{65, 40}, {85, 20},  {60, 35},  {80, 55},  {75, 25}}, /* TH (Battlechant) */ {{65, 40}, {85, 20},  {60, 35},  {80, 55},  {75, 25}}, /* TH (Rogue)       */ {{70, 40}, {55, 15},  {65, 25},  {75, 35},  {60, 20}}, /* MU (Elementalist)*/ {{70, 15}, {90, 25},  {75, 20},  {85, 20},  {85, 30}}, /* WA (Dire Raider) */ };

/* mob race lookup table, used to assign a race to a mob when reading them from the .mob file. Need to  update this table when adding new races.

A note on the codes: when I set them up, I tried to follow a pattern of general/specific, like all 'player' races are "Px", all elementals are "Ex", undead "Ux", humanoid "Hx", animals "Ax", etc.  Currently this is not used for anything specific, but it looked like a good idea, so try to follow it   if you add more races. JAB */

/* since this pairs RACE_XXX with a string, order is unimportant. */ const struct race_lookup race_lookup_table[DEFINED_RACES] = { {RACE_ANIMAL,       "A"}, {RACE_PRIMATE,      "AA"}, {RACE_BEAR,         "AB"}, {RACE_CARNIVORE,    "AC"}, {RACE_CANINE,       "AD"}, {RACE_HORSE,        "AE"}, {RACE_FELINE,       "AF"}, {RACE_HERBIVORE,    "AH"}, {RACE_PARASITE,     "AP"}, {RACE_ARACHNID,     "AS"}, {RACE_HYBRID_ANIMAL, "AY"}, {RACE_BIRD,         "B"}, {RACE_RAPTOR,       "BR"}, {RACE_DRAGON,       "D"}, {RACE_DRAGONKIN,    "DK"}, {RACE_EFFREETI,     "E1"}, {RACE_DJINNI,       "E2"}, {RACE_A_ELEMENTAL,  "EA"}, {RACE_E_ELEMENTAL,  "EE"}, {RACE_F_ELEMENTAL,  "EF"}, {RACE_W_ELEMENTAL,  "EW"}, {RACE_FISH,         "F"}, {RACE_GIANT,        "G"}, {RACE_HUMANOID,     "H"}, {RACE_HALFORC,      "H2"}, {RACE_CENTAUR,      "HC"}, {RACE_FAERIE,       "HF"}, {RACE_GOBLIN,       "HG"}, {RACE_HYBRID_HUMAN, "HH"}, {RACE_KOBOLD,       "HK"}, {RACE_ORC,          "HO"}, {RACE_NAGA,         "HS"}, {RACE_GITHYANKI,    "HY"}, {RACE_INSECT,       "I"}, {RACE_IXZAN,        "IX"}, {RACE_KIRIN,        "K"}, {RACE_LYCANTH,      "L"}, {RACE_UMBERHULK,    "MH"}, {RACE_MANSCORPION,  "MS"}, {RACE_NONE,         "N"}, {RACE_BEHOLDER,     "OB"}, {RACE_GOLEM,        "OG"}, {RACE_HUMANOID_OTHER,"OH"}, {RACE_POSSESSED,    "OP"}, {RACE_SLIME,        "OS"}, {RACE_SESSILE,      "OU"}, {RACE_HALFELF,      "P2"}, {RACE_BARBARIAN,    "PB"}, {RACE_DUERGAR,      "PD"}, {RACE_GREY,         "PE"}, {RACE_HALFLING,     "PF"}, {RACE_GNOME,        "PG"}, {RACE_HUMAN,        "PH"}, {RACE_ILLITHID,     "PI"}, {RACE_DROW,         "PL"}, {RACE_MOUNTAIN,     "PM"}, {RACE_OGRE,         "PO"}, {RACE_TROLL,        "PT"}, {RACE_PORC,         "PR"}, {RACE_YUANTI,       "PY"}, {RACE_MYCONID,      "PS"}, {RACE_LICH,         "PZ"}, {RACE_REPTILE,      "R"}, {RACE_REPTOID,      "RH"}, {RACE_SNAKE,        "RS"}, {RACE_KUO_TOA,      "RT"}, {RACE_UNDEAD,       "U"}, {RACE_GHOST,        "UG"}, {RACE_HIGH_UNDEAD,  "UH"}, {RACE_SPIRIT,       "US"}, {RACE_VAMPIRE,      "UV"}, {RACE_TREE,         "VT"}, {RACE_DEMON,        "X"}, {RACE_DEVIL,        "Y"}, {RACE_ANGEL,        "Z"}, };

/* races must be listed in numerical order here */

const char *race_types[] = { "None",          /*  0 */ "Human",         /*  1 */ "Barbarian", "Drow-Elf", "Grey-Elf", "Dwarf",         /*  5 */ "Duergar", "Halfling", "Gnome", "Ogre", "Troll",         /* 10 */ "Half-Elf", "Illithid", "Yuan-Ti", "Lich", "Myconid",       /* 15 */ "Orc", "None17", "None18", "Possessed", "Raptor",        /* 20 */ "High-Undead", "Canine", "Feline", "Angel", "Githyanki",     /* 25 */ "Sessile", "Spirit", "Hybrid-Animal", "Slime", "Fire-Elem.",    /* 30 */ "Air-Elem.", "Water-Elem.", "Earth-Elem.", "Tanar'ri", "Baatezu",       /* 35 */ "Undead", "Vampire", "Ghost", "Were", "Giant",         /* 40 */ "Kobold", "Orc", "Goblin", "Half-Orc", "Golem",         /* 45 */ "Faerie", "Dragon", "Dragonkin", "Reptile", "Snake",         /* 50 */ "Insect", "Arachnid", "Fish", "Bird", "Horse",         /* 55 */ "Primate", "Humanoid", "Animal", "Tree", "Herbivore",     /* 60 */ "Carnivore", "Parasite", "Reptoid", "Kuo-toa", "Hybrid-Human",  /* 65 */ "Centaur", "Naga", "Humanoid-Other", "Kirin", "Effreeti",      /* 70 */ "Djinn", "Beholder", "Bear", "Manscorpion", "Ixzan",         /* 75 */ "Umberhulk", "\n" };

/* races must be listed in numerical order here */ int race_size[][12] = { /*         Male                            Female Height           Weight            Height          Weight Min Avg  Max  Min   Avg     Max   Min  Avg  Max  Min   Avg     Max  */ { 1,   2,   3,   0,    0,      0,    1,   2,   3,   0,    0,      0}, /* none        */ { 62, 71,  80, 124,  186,    267,   58,  67,  75, 106,  160,    229}, /* Human       */ { 71, 75,  87, 194,  229,    357,   67,  71,  82, 166,  196,    306}, /* Barbarian   */ { 56, 60,  65,  74,   91,    116,   53,  56,  61,  63,   78,     99}, /* Drow        */ { 56, 60,  65,  74,   91,    116,   53,  56,  61,  63,   78,     99}, /* Elf         */ { 44, 48,  53, 162,  210,    283,   41,  45,  50, 138,  180,    242}, /* Dwarf       */ { 44, 47,  52, 154,  188,    255,   41,  44,  49, 132,  161,    219}, /* Duergar     */ { 34, 41,  48,  27,   47,     76,   32,  38,  45,  23,   40,     65}, /* Halfling    */ { 39, 42,  44,  57,   72,     83,   37,  39,  41,  49,   62,     71}, /* Gnome       */ { 94, 104, 114, 624, 845,   1113,   98, 109, 119, 722,  978,   1289}, /* Ogre        */ { 80, 85,  90, 213,  256,    304,   83,  89,  94, 247,  296,    352}, /* Troll       */ { 62, 67,  72, 112,  141,    175,   58,  63,  68,  96,  121,    150}, /* Half-Elf    */ { 64, 67,  70, 110,  127,    145,   64,  67,  70, 110,  127,    145}, /* Illithid    */ { 55, 64,  72,  90,  150,    230,   62,  75,  88, 120,  200,    290}, /* Yuan-Ti     */ { 62, 71,  80, 124,  186,    267,   58,  67,  75, 106,  160,    229}, /* Lich        */ { 94, 104, 114, 624, 845,   1113,   98, 109, 119, 722,  978,   1289}, /* Myconid     */ { 62, 71,  80, 124,  186,    267,   58,  67,  75, 106,  160,    229}, /* Porc        */ { 1,   2,   3,   0,    0,      0,    1,   2,   3,   0,    0,      0}, /* unused 17   */ { 1,   2,   3,   0,    0,      0,    1,   2,   3,   0,    0,      0}, /* unused 18   */ { 3,  14,  72,   0,    0,     43,    3,  14,  72,   0,    0,     43}, /* possessed   */ { 9,  76, 650,   0,  227, 139541,    9,  80, 682,   0,  263, 161536}, /* raptor      */ { 62, 71,  80,  79,  119,    171,   58,  67,  75,  68,  102,    146}, /* high_undead */ { 12, 37, 120,   2,   64,   2029,   11,  36, 113,   1,   55,   1740}, /* canine      */ { 8,  30, 120,   0,   34,   2029,    7,  29, 113,   0,   29,   1740}, /* feline      */ { 55, 75, 240, 100,  350,  10823,   55,  75, 240, 100,  350,  10823}, /* angel       */ { 62, 71,  80,  98,  148,    212,   58,  67,  75,  84,  127,    182}, /* githyanki   */ { 14, 124,1100,  0,  202, 140688,   13, 117,1044,   0,  173, 120622}, /* sessile     */ { 62, 71,  80,   0,    0,      0,   58,  67,  75,   0,    0,      0}, /* spirit      */ { 62, 105, 180, 359, 1778,  8797,   58, 100, 170, 308, 1524,   7542}, /* hyb. animal */ { 36, 74, 156,  54,  494,   4458,   36,  74, 156,  54,  494,   4458}, /* slime       */ { 36, 92, 240,   0,    0,      0,   36,  92, 240,   0,    0,      0}, /* f_elemental */ { 36, 92, 240,   0,    0,      0,   36,  92, 240,   0,    0,      0}, /* a_elemental */ { 36, 92, 240,  36,  633,  10910,   36,  92, 240,  36,  633,  10910}, /* w_elemental */ { 36, 92, 240, 301, 5187,  89296,   36,  92, 240, 301, 5187,  89296}, /* e_elemental */ { 24, 75, 240,  10,  342,  10823,   24,  75, 240,  10,  342,  10823}, /* demon       */ { 40, 97, 240,  50,  736,  10823,   40,  97, 240,  50,  736,  10823}, /* devil       */ { 62, 71,  80, 130,  196,    280,   58,  67,  75, 111,  168,    240}, /* undead      */ { 62, 71,  80, 124,  186,    267,   58,  67,  75, 106,  160,    229}, /* vampire     */ { 62, 71,  80,   0,    0,      0,   58,  67,  75,   0,    0,      0}, /* ghost       */ { 62, 71,  80, 124,  186,    267,   58,  67,  75, 106,  160,    229}, /* lycanth     */ {108, 180, 300, 875, 4051, 18758,  102, 170, 284, 750, 3473,  16083}, /* giant       */ { 40, 44,  48,  40,   53,     70,   41,  46,  50,  46,   62,     81}, /* kobold      */ { 56, 58,  60, 101,  112,    124,   56,  58,  60, 101,  112,    124}, /* orc         */ { 52, 55,  57,  73,   86,     96,   54,  57,  59,  84,  100,    111}, /* goblin      */ { 60, 66,  70, 124,  165,    197,   60,  66,  70, 124,  165,    197}, /* halforc     */ { 72, 109, 168,1885, 6721, 23958,   72, 109, 168,1885, 6721,  23958}, /* golem       */ { 4,  10,  50,   0,    1,     80,    3,  10,  46,   0,    1,     60}, /* faerie      */ { 30, 189,1200, 17, 4529,1145969,   33, 208,1320,  23, 6029,1525285}, /* dragon      */ { 36, 212,1250, 32, 6562,1342795,   39, 233,1375,  42, 8735,1787261}, /* dragonkin   */ { 6,  77,1000,   0,  143, 308294,    6,  81,1049,   0,  165, 356889}, /* reptile     */ { 4,  61, 950,   0,   19,  71605,    4,  64, 997,   0,   22,  82892}, /* snake       */ { 1,  13, 180,   0,    0,   2309,    1,  14, 198,   0,    1,   3073}, /* insect      */ { 1,  15, 240,   0,    1,   6137,    1,  16, 251,   0,    1,   7104}, /* arachnid    */ { 4,  37, 360,   0,   28,  24353,    4,  41, 396,   0,   37,  32414}, /* fish        */ { 4,  18,  84,   0,    2,    278,    4,  19,  88,   0,    3,    322}, /* bird        */ { 60, 62,  66, 900, 1150,   1300,   60,  62,  66, 875, 1100,   1250}, /* horse       */ { 12, 36, 108,   1,   33,    913,   12,  36, 108,   1,   33,    913}, /* primate     */ { 60, 69,  78, 112,  171,    247,   60,  69,  78, 112,  171,    247}, /* humanoid    */ { 2,  10,  55,   0,    1,    265,    2,  11,  57,   0,    2,    307}, /* animal      */ { 36, 160, 720, 17, 1587, 142029,   36, 160, 720,  17, 1587, 142029}, /* tree        */ { 30, 69, 160,  50,  626,   7718,   30,  69, 160,  50,  626,   7718}, /* herbivore   */ { 18, 41,  96,   7,   95,   1182,   17,  39,  91,   6,   82,   1013}, /* carnivore   */ { 0,   0,   0,   0,    0,      0,    0,   0,   0,   0,    0,      0}, /* parasite    */ { 60, 69,  78, 118,  180,    260,   62,  72,  81, 137,  208,    301}, /* reptoid     */ { 58, 67,  72, 112,  173,    214,   60,  70,  75, 129,  200,    248}, /* kuo_toa     */ { 71, 75,  87, 234,  276,    431,   71,  75,  87, 234,  276,    431}, /* hyb. human */ { 50, 55, 105, 223,  297,   2068,   47,  52,  99, 191,  254,   1773}, /* centaur     */ { 48, 119, 300, 15,  236,   3699,   50, 125, 314,  17,  274,   4282}, /* naga        */ { 71, 75,  87, 205,  242,    378,   71,  75,  87, 205,  242,    378}, /* hum. other */ { 30, 54, 100,  56,  343,   2087,   30,  54, 100,  56,  343,   2087}, /* kirin       */ {132, 143, 156,1307, 1679,  2158,  132, 143, 156,1307, 1679,   2158}, /* effreeti    */ {114, 125, 138, 748, 997,   1327,  114, 125, 138, 748,  997,   1327}, /* djinni      */ { 14, 70,  96,  57, 7122,  18370,   14,  70,  96,  57, 7122,  18370}, /* beholder    */ { 25, 50, 100,  50,  500,   2300,   25,  50, 100,  50,  500,   2300}, /* bear        */ { 62, 71,  80, 400,  500,    600,   62,  71,  80, 400,  500,    600}, /* manscorpion */ { 4,  37, 360,   0,   28,  24353,    4,  41, 396,   0,   37,  32414}, /* ixzan       */ { 92, 100, 110, 800, 1000,  1200,   92, 102, 110, 800, 1000,   1200}  /* Umberhulk   */ };

/* before messing with this table, keep the following in mind:

1. If the average of the 1st 8 stats is too high, the race will be too powerful, unless there is a racial liability that balances this (lower than average hits, etc). 2. If the average of the 1st 8 stats is too low, the race will be too weak, again, unless there is a     racial advantage that balances this (troll regen, demigod-like ogre strength, amazing halfing dex,      etc). 3. These numbers are percents, ie. 100 is 100% or 1.0x, 250 is 250% or 2.5x. 4. unsure how Power, Karma and Luck will be implimented, so they default to 100. 5. This table affects stats at runtime, a change here, is immediately reflected in player/mob abilities. 6. The values I set when writing the new system were guesses, plain and simple, so they are most likely going to need tweaking. JAB */

/* races must be listed in numerical order here */ const struct stat_data stat_factor[LAST_RACE + 1] = { /* Str Dex Agi Con Pow Int Wis Cha  Kar Luc       race      avg of 1st 8 */ {100,100,100,100, 100,100,100,100, 100,100}, /* none      (100) */

{100,100,100,100, 100,100,100,100, 100,100}, /* human     (100) */ {130, 95,100,130, 100, 85,100, 95, 100,100}, /* barbarian (100) */ { 90,110,125, 95, 100,150, 90, 85, 100,100}, /* drow      (104) */ /* lesser hits balances */ { 85,115,130, 85, 100,150,100,110, 100,100}, /* elf       (104) */ /* lesser hits balances */ {130,100, 95,130, 100, 90,100, 85, 100,100}, /* dwarf     (100) */ {150,100, 95,135, 100, 90,100, 85, 100,100}, /* duergar   (100) */ { 75,155,110, 90, 100, 90, 80,110, 100,100}, /* halfling  ( 98) */ /* dex and cuteness balance */ { 75,110,120,100, 100,125, 90, 80, 100,100}, /* gnome     (103) */ /* lesser hits/str balances */ {210, 80, 75,150, 100, 60, 60, 50, 100,100}, /* ogre      ( 91) */ /* massive strength balances */ {135, 95,115,140, 100, 65, 70, 50, 100,100}, /* troll     ( 90) */ /* hit regen from hell balances */ { 95,100,105, 95, 100,105,100,105, 100,100}, /* halfelf   (101) */ /* ostracism balances */ { 60,110, 80, 80, 140,175,110, 50, 100,100}, /* Illithid  (101) */ /* low str and con balances the massive int and power */ { 95,100,125, 95, 100,125,150, 90, 100,100}, /* yuan-ti   (100) */ {100,100,100,100, 100,100,100,100, 100,100}, /* lich            */ /* potential new player races, due */ {210, 60, 75,150, 100, 60, 60, 50, 100,100}, /* myconid   ( 91) */ /* massive strength balances */ {100,100,100,100, 100,100,100,100, 100,100}, /* porc      (100) */ /* Human Equivalent             */ {100,100,100,100, 100,100,100,100, 100,100}, /* none17          */ /* It helps Immensely if all the player races are */ {100,100,100,100, 100,100,100,100, 100,100}, /* none18          */ /* Contiguous which is why I moved Illithids. */

{200,200,200,200, 100,100, 1,100, 100,100},  /* Possessed       */ { 40, 15,130, 80, 100, 25, 15,100, 100,100}, /* Raptor          */ {125, 90,120,150, 100,110,120,100, 100,100}, /* High Undead     */ {105, 25,110, 90, 100, 40, 30,110, 100,100}, /* Canine          */ {120, 35,150, 90, 100, 50, 30,110, 100,100}, /* Feline          */ {230,160,160,160, 100,180,180,160, 100,100}, /* Angel           */ {110, 90,110, 90, 100,120,120, 90, 100,100}, /* Githyanki       */ {150, 10, 10,110, 100, 30, 30, 90, 100,100}, /* Sessile         */ { 25, 25,300, 60, 100,120,120, 30, 100,100}, /* Spirit          */ {135, 95,125,115, 100, 65, 65, 90, 100,100}, /* Animal Hybrid   */ { 25, 15, 20,150, 100, 10, 10, 10, 100,100}, /* Slime           */ { 65,150,250,130, 70, 90, 80,100, 100,100},  /* Fire Elemental  */ { 65,150,500,130, 70, 90, 80,100, 100,100},  /* Air Elemental   */ {150, 80,100,140, 70, 90, 80,100, 100,100},  /* Water Elemental */ {250, 80, 65,150, 70, 90, 80,100, 100,100},  /* Earth Elemental */ {220,150,150,180, 100,170,130,150, 100,100}, /* Demon           */ {220,150,150,150, 100,170,170,150, 100,100}, /* Devil           */ {110, 70, 70,120, 100, 70, 80, 50, 100,100}, /* Undead          */ {160,125,130,150, 100,110,125,120, 100,100}, /* Vampire         */ { 15, 25,300, 60, 100,100,100,100, 100,100}, /* Ghost           */ {135,110,110,110, 100,100,100,100, 100,100}, /* Lycanthrope     */ {350, 60, 60,150, 100, 80,110,100, 100,100}, /* Giant           */ { 65,115,115, 95, 100, 85, 80, 80, 100,100}, /* Kobold          */ { 80,100,100,100, 100, 90, 90, 80, 100,100}, /* Orc             */ { 70,105,110, 90, 100, 85, 90, 80, 100,100}, /* Goblin          */ { 90,100,100,105, 100, 95, 95, 90, 100,100}, /* Half Orc        */ {275, 35, 40,400, 100, 5,  5,100, 100,100},  /* Golem           */ { 25,130,160, 65, 100,100, 90,100, 100,100}, /* Faerie          */ {450, 60,110,190, 100,165,150,100, 100,100}, /* Dragon          */ {340, 90,105,175, 100,110,110,100, 100,100}, /* Dragonkin       */ {145,100,120,120, 100, 5, 10,100, 100,100},  /* Reptile         */ {120, 15,130,120, 100, 5, 10,100, 100,100},  /* Snake           */ {200, 15,150,100, 100, 5, 10,100, 100,100},  /* Insect          */ {225, 15,150,100, 100, 5, 10,100, 100,100},  /* Arachnid        */ { 25, 15,130,100, 100, 5, 10,100, 100,100},  /* Fish            */ { 20, 15,140, 80, 100, 10, 10,100, 100,100}, /* Bird            */ {250, 15,120,100, 100, 10, 10,100, 100,100}, /* Horse           */ {190, 90,100,115, 100, 40, 10,100, 100,100}, /* Primate         */ {100,100,100,100, 100,100,100,100, 100,100}, /* Humanoid        */ {120, 15,110,120, 100, 5, 10,100, 100,100},  /* Animal          */ {170, 15, 5,350, 100,  0, 10,100, 100,100},  /* Tree            */ {100, 15,110,100, 100, 5, 10,100, 100,100},  /* Herbivore       */ {140, 15,120,100, 100, 10, 10,100, 100,100}, /* Carnivore       */ { 5,  5,100, 10, 100,  0, 10,100, 100,100},  /* Parasite        */ {110, 90,110,120, 100, 70, 60, 90, 100,100}, /* Reptoid         */ {110, 85,100,100, 100, 80,100, 85, 100,100}, /* Kuo Toa         */ {125,105,105,125, 100, 85, 85, 70, 100,100}, /* Human Hybrid    */ {230, 90,115,100, 100,100,100,100, 100,100}, /* Centaur         */ {125, 10,110,120, 100,100,100, 80, 100,100}, /* Naga            */ {145, 65, 85,145, 100, 65, 35, 50, 100,100}, /* Humanoid Other  */ {200, 30,180,140, 100,175,175,160, 100,100}, /* Kirin           */ {210, 70, 75,150, 100,100,110,100, 100,100}, /* Effreeti        */ {190, 80,135,120, 100,150,110,100, 100,100}, /* Djinni          */ { 70, 70, 50,120, 100,130,130,100, 100,100}, /* Beholder        */ {260, 20,120,150, 100, 40, 10,100, 100,100}, /* Bear            */ {200,125, 65,130, 100,110, 65, 50, 100,100}, /* Manscorpion     */ { 70, 95,130,100, 100,150,110,100, 100,100}, /* Ixzan           */ {300,130,120,200, 100, 90,110,100, 100,100}  /* Umberhulk       */ };

/* races must be listed in numerical order here */ const struct trait_data racial_traits[LAST_RACE + 1] = { /* humanoid/length/lvl-sze/talk/fly/swim/hands/heat/immaterial/stunproof/infra/ultra/hitroll */ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1},  /* none            */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 6},  /* human           */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 6},  /* barbarian       */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 7},  /* drow            */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 7},  /* elf             */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 6},  /* dwarf           */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 6},  /* duergar         */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 7},  /* halfling        */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 6},  /* gnome           */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 6},  /* ogre            */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 6},  /* troll           */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 6},  /* halfelf         */ { 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 4},  /* illithid        */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 6},  /* yuan-ti         */ { 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 6},  /* lich            */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 6},  /* myconid         */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 6},  /* porc            */ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1},  /* none17          */ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1},  /* none18          */ { 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 14}, /* Possessed       */ { 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13}, /* Raptor          */ { 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 8},  /* High Undead     */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 9},  /* Canine          */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 10}, /* Feline          */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 14}, /* Angel           */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 8},  /* Githyanki       */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 11}, /* Sessile         */ { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 14}, /* Spirit          */ { 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 8},  /* Animal Hybrid   */ { 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 6},  /* Slime           */ { 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 14}, /* Fire Elemental  */ { 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 14}, /* Air Elemental   */ { 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 10}, /* Water Elemental */ { 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 10}, /* Earth Elemental */ { 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 14}, /* Demon           */ { 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 14}, /* Devil           */ { 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 5},  /* Undead          */ { 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 12}, /* Vampire         */ { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 12}, /* Ghost           */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 9},  /* Lycanthrope     */ { 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 7},  /* Giant           */ { 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 7},  /* Kobold          */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 7},  /* Orc             */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 7},  /* Goblin          */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 7},  /* Half Orc        */ { 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 13}, /* Golem           */ { 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 5},  /* Faerie          */ { 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 13}, /* Dragon          */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 13}, /* Dragonkin       */ { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 12}, /* Reptile         */ { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13}, /* Snake           */ { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 12}, /* Insect          */ { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 12}, /* Arachnid        */ { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5},  /* Fish            */ { 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 2},  /* Bird            */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 4},  /* Horse           */ { 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 6},  /* Primate         */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 6},  /* Humanoid        */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 6},  /* Animal          */ { 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 4},  /* Tree            */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 3},  /* Herbivore       */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 12}, /* Carnivore       */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},  /* Parasite        */ { 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 8},  /* Reptoid         */ { 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 7},  /* Kuo-Toa         */ { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 6},  /* Human Hybrid    */ { 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 12}, /* Centaur         */ { 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 11}, /* Naga            */ { 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7},  /* Humanoid Other  */ { 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 13}, /* Kirin           */ { 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 11}, /* Efreeti         */ { 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 8},  /* Djinni          */ { 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 2},  /* Beholder        */ { 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 8},  /* Bear            */ { 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 12}, /* Manscorpion     */ { 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5},  /* Ixzan           */ { 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 13}  /* Umberhulk       */ };

const struct race_lookup shop_bigot_table[] = { {BIGOT_HUMAN,       "PH"}, {BIGOT_BARBARIAN,   "PB"}, {BIGOT_DROW,        "PL"}, {BIGOT_GREY,        "PE"}, {BIGOT_MOUNTAIN,    "PM"}, {BIGOT_DUERGAR,     "PD"}, {BIGOT_HALFLING,    "PF"}, {BIGOT_GNOME,       "PG"}, {BIGOT_OGRE,        "PO"}, {BIGOT_TROLL,       "PT"}, {BIGOT_HALFELF,     "P2"}, {BIGOT_ILLITHID,    "PI"}, {BIGOT_YUANTI,      "PY"}, {BIGOT_WARRIOR,     "CA"}, {BIGOT_RANGER,      "CB"}, {BIGOT_BERSERKER,   "CC"}, {BIGOT_PALADIN,     "CD"}, {BIGOT_ANTIPALADIN, "CE"}, {BIGOT_CLERIC,      "CF"}, {BIGOT_MONK,        "CG"}, {BIGOT_DRUID,       "CH"}, {BIGOT_SHAMAN,      "CI"}, {BIGOT_SORCERER,    "CJ"}, {BIGOT_NECROMANCER, "CK"}, {BIGOT_CONJURER,    "CL"}, {BIGOT_THIEF,       "CM"}, {BIGOT_ASSASSIN,    "CN"}, {BIGOT_MERCENARY,   "CO"}, {BIGOT_BARD,        "CP"}, {BIGOT_PSIONICIST,  "CQ"}, {BIGOT_LICHCLASS,   "CR"}, {BIGOT_INVOKER,     "CS"}, {BIGOT_ENCHANTER,   "CT"}, {BIGOT_ILLUSIONIST, "CU"}, {BIGOT_ELEMENTALIST, "CZ"}, {BIGOT_DIRERAIDER,  "CV"},

{BIGOT_GOODS, "GOODS"}, {BIGOT_EVILS, "EVILS"}, {BIGOT_NPC,  "NPC"}, {BIGOT_OWN,  "OWN"}, {BIGOT_PORC, "PR"}, {BIGOT_ALIEN, "ALIEN"}, {BIGOT_ALL,  "ALL"},

};

/* races must be listed in numerical order here */ /* base age, base moves, base mana, max mana, hp_bonus */ const struct racial_data_type racial_data[PC_RACES] = { { 17, 90, 50, 100,  0},  /* none       */ { 17, 90, 50, 500,  0},  /* human      */ { 17, 95, 45,  80,  1},  /* barbarian  */ {110, 100, 60, 120, -1}, /* drow       */ {120, 100, 60, 500, -1}, /* grey       */ { 75, 85, 45, 500,  1},  /* mountain   */ { 70, 85, 45,  95,  1},  /* duergar    */ { 20, 75, 50, 500,  0},  /* halfling   */ { 90, 80, 55, 115,  0},  /* gnome      */ { 12, 105, 35, 75,  2},  /* ogre       */ { 10, 110, 35, 75,  2},  /* troll      */ { 30, 95, 55, 500,  0},  /* half-elf   */ { 40, 70, 75, 600, -1},  /* mindflayer */ { 20, 96, 75, 300,  0},  /* yuan-ti    */ { 50, 80, 75, 200,  0},  /* lich       */ { 12, 105, 35, 75,  1},  /* myconid    */ { 17, 90, 50, 500,  0},  /* orc        */ };

/* adding new classes, these entries are minimum exp need for the level 0-51 */

/* classes must be listed in numerical order here */ const int exp_table[TOTALCLASS][52] = { /* None */ {0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0},

/* ALL tables have been adjusted 10% downward 1-45 and 10% upward from 46-50 as of 9/24/01. --DMB */ /* Warrior Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

/* Ranger Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

/* Berserker Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

/* Paladin Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

/* Anti-Paladin Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

/* Cleric Table (Priest Experience Tables) */ {0,     1, 3500, 6000, 16000, 30000, /* Level 5 */ 50000, 80000, 130000, 190000, 250000, /* Level 10 */ 350000, 475000, 625000, 800000, 1000000, /* Level 15 */ 1300000, 1700000, 2200000, 2950000, 4000000,  /* Level 20 */ 5000000, 6250000, 7750000, 9750000, 12000000, /* Level 25 */ 14000000, 16250000, 18750000, 21250000, 24000000, /* Level 30 */ 26400000, 28800000, 31200000, 33600000, 36000000, /* Level 35 */ 39000000, 44000000, 50000000, 60000000, 72000000, /* Level 40 */ 84000000, 99000000, 114000000, 129000000, 144000000,  /* Level 45 */ 164000000, 189000000, 219000000, 251000000, 288000000, /* Level 50 */ 325000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 5400, 14400, 27000, /* Level 5 */ 45000, 72000, 117000, 171000, 225000, /* Level 10 */ 315000, 427500, 562500, 720000, 900000, /* Level 15 */ 1170000, 1530000, 1980000, 2655000, 3600000,  /* Level 20 */ 4500000, 5625000, 6975000, 8775000, 10800000, /* Level 25 */ 12600000, 14625000, 16875000, 19125000, 21600000, /* Level 30 */ 23760000, 25920000, 28080000, 30240000, 32400000, /* Level 35 */ 35100000, 39600000, 45000000, 54000000, 64800000, /* Level 40 */ 75600000, 89100000, 102600000, 116100000, 129600000,  /* Level 45 */ 151600000, 179100000, 212100000, 247300000, 288000000, /* Level 50 */ 328700000},

/* Monk Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Druid Table (Priest Experience Tables) */ {0,     1, 3500, 6000, 16000, 30000, /* Level 5 */ 50000, 80000, 130000, 190000, 250000, /* Level 10 */ 350000, 475000, 625000, 800000, 1000000, /* Level 15 */ 1300000, 1700000, 2200000, 2950000, 4000000,  /* Level 20 */ 5000000, 6250000, 7750000, 9750000, 12000000, /* Level 25 */ 14000000, 16250000, 18750000, 21250000, 24000000, /* Level 30 */ 26400000, 28800000, 31200000, 33600000, 36000000, /* Level 35 */ 39000000, 44000000, 50000000, 60000000, 72000000, /* Level 40 */ 84000000, 99000000, 114000000, 129000000, 144000000,  /* Level 45 */ 164000000, 189000000, 219000000, 251000000, 288000000, /* Level 50 */ 325000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 5400, 14400, 27000, /* Level 5 */ 45000, 72000, 117000, 171000, 225000, /* Level 10 */ 315000, 427500, 562500, 720000, 900000, /* Level 15 */ 1170000, 1530000, 1980000, 2655000, 3600000,  /* Level 20 */ 4500000, 5625000, 6975000, 8775000, 10800000, /* Level 25 */ 12600000, 14625000, 16875000, 19125000, 21600000, /* Level 30 */ 23760000, 25920000, 28080000, 30240000, 32400000, /* Level 35 */ 35100000, 39600000, 45000000, 54000000, 64800000, /* Level 40 */ 75600000, 89100000, 102600000, 116100000, 129600000,  /* Level 45 */ 151600000, 179100000, 212100000, 247300000, 288000000, /* Level 50 */ 328700000},

/* Shaman Table (Priest Experience Tables) */ {0,     1, 3500, 6000, 16000, 30000, /* Level 5 */ 50000, 80000, 130000, 190000, 250000, /* Level 10 */ 350000, 475000, 625000, 800000, 1000000, /* Level 15 */ 1300000, 1700000, 2200000, 2950000, 4000000,  /* Level 20 */ 5000000, 6250000, 7750000, 9750000, 12000000, /* Level 25 */ 14000000, 16250000, 18750000, 21250000, 24000000, /* Level 30 */ 26400000, 28800000, 31200000, 33600000, 36000000, /* Level 35 */ 39000000, 44000000, 50000000, 60000000, 72000000, /* Level 40 */ 84000000, 99000000, 114000000, 129000000, 144000000,  /* Level 45 */ 164000000, 189000000, 219000000, 251000000, 288000000, /* Level 50 */ 325000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 5400, 14400, 27000, /* Level 5 */ 45000, 72000, 117000, 171000, 225000, /* Level 10 */ 315000, 427500, 562500, 720000, 900000, /* Level 15 */ 1170000, 1530000, 1980000, 2655000, 3600000,  /* Level 20 */ 4500000, 5625000, 6975000, 8775000, 10800000, /* Level 25 */ 12600000, 14625000, 16875000, 19125000, 21600000, /* Level 30 */ 23760000, 25920000, 28080000, 30240000, 32400000, /* Level 35 */ 35100000, 39600000, 45000000, 54000000, 64800000, /* Level 40 */ 75600000, 89100000, 102600000, 116100000, 129600000,  /* Level 45 */ 151600000, 179100000, 212100000, 247300000, 288000000, /* Level 50 */ 328700000},

/* Sorcerer Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Necromancer Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Conjurer Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Thief Table (Rogue Experience Tables) */ {0,     1, 3000, 6250, 12500, 25000, /* Level 5 */ 50000, 80000, 120000, 160000, 200000, /* Level 10 */ 270000, 340000, 480000, 640000, 800000, /* Level 15 */ 980000, 1300000, 1800000, 2500000, 3200000, /* Level 20 */ 4000000, 5000000, 6500000, 8000000, 9600000,  /* Level 25 */ 11200000, 13000000, 14800000, 16800000, 18800000, /* Level 30 */ 20800000, 22800000, 24800000, 26800000, 30000000, /* Level 35 */ 35000000, 40000000, 45000000, 51300000, 57600000, /* Level 40 */ 67500000, 77500000, 89500000, 102350000, 115200000, /* Level 45 */ 130000000, 155000000, 180000000, 205000000, 230400000, /* Level 50 */ 255800000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 5625, 11250, 22500, /* Level 5 */ 45000, 72000, 108000, 144000, 180000,       /* Level 10 */ 243000, 306000, 432000, 576000, 720000,     /* Level 15 */ 882000, 1170000, 1620000, 2250000, 2880000, /* Level 20 */ 3600000, 4500000, 5850000, 7200000, 8640000,        /* Level 25 */ 10080000, 11700000, 13320000, 15120000, 16920000,   /* Level 30 */ 18720000, 20520000, 22320000, 24120000, 27000000,   /* Level 35 */ 31500000, 36000000, 40500000, 46170000, 51840000,   /* Level 40 */ 60750000, 69750000, 80550000, 92115000, 103680000, /* Level 45 */ 119960000, 147460000, 174960000, 202460000, 230400000,      /* Level 50 */ 258340000},

/* Assassin Table (Rogue Experience Tables) */ {0,     1, 3000, 6250, 12500, 25000, /* Level 5 */ 50000, 80000, 120000, 160000, 200000, /* Level 10 */ 270000, 340000, 480000, 640000, 800000, /* Level 15 */ 980000, 1300000, 1800000, 2500000, 3200000, /* Level 20 */ 4000000, 5000000, 6500000, 8000000, 9600000,  /* Level 25 */ 11200000, 13000000, 14800000, 16800000, 18800000, /* Level 30 */ 20800000, 22800000, 24800000, 26800000, 30000000, /* Level 35 */ 35000000, 40000000, 45000000, 51300000, 57600000, /* Level 40 */ 67500000, 77500000, 89500000, 102350000, 115200000, /* Level 45 */ 130000000, 155000000, 180000000, 205000000, 230400000, /* Level 50 */ 255800000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 5625, 11250, 22500, /* Level 5 */ 45000, 72000, 108000, 144000, 180000,       /* Level 10 */ 243000, 306000, 432000, 576000, 720000,     /* Level 15 */ 882000, 1170000, 1620000, 2250000, 2880000, /* Level 20 */ 3600000, 4500000, 5850000, 7200000, 8640000,        /* Level 25 */ 10080000, 11700000, 13320000, 15120000, 16920000,   /* Level 30 */ 18720000, 20520000, 22320000, 24120000, 27000000,   /* Level 35 */ 31500000, 36000000, 40500000, 46170000, 51840000,   /* Level 40 */ 60750000, 69750000, 80550000, 92115000, 103680000, /* Level 45 */ 119960000, 147460000, 174960000, 202460000, 230400000,      /* Level 50 */ 258340000},

/* Mercenary Table (Rogue Experience Tables) */ {0,     1, 3000, 6250, 12500, 25000, /* Level 5 */ 50000, 80000, 120000, 160000, 200000, /* Level 10 */ 270000, 340000, 480000, 640000, 800000, /* Level 15 */ 980000, 1300000, 1800000, 2500000, 3200000, /* Level 20 */ 4000000, 5000000, 6500000, 8000000, 9600000,  /* Level 25 */ 11200000, 13000000, 14800000, 16800000, 18800000, /* Level 30 */ 20800000, 22800000, 24800000, 26800000, 30000000, /* Level 35 */ 35000000, 40000000, 45000000, 51300000, 57600000, /* Level 40 */ 67500000, 77500000, 89500000, 102350000, 115200000, /* Level 45 */ 130000000, 155000000, 180000000, 205000000, 230400000, /* Level 50 */ 255800000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 5625, 11250, 22500, /* Level 5 */ 45000, 72000, 108000, 144000, 180000,       /* Level 10 */ 243000, 306000, 432000, 576000, 720000,     /* Level 15 */ 882000, 1170000, 1620000, 2250000, 2880000, /* Level 20 */ 3600000, 4500000, 5850000, 7200000, 8640000,        /* Level 25 */ 10080000, 11700000, 13320000, 15120000, 16920000,   /* Level 30 */ 18720000, 20520000, 22320000, 24120000, 27000000,   /* Level 35 */ 31500000, 36000000, 40500000, 46170000, 51840000,   /* Level 40 */ 60750000, 69750000, 80550000, 92115000, 103680000, /* Level 45 */ 119960000, 147460000, 174960000, 202460000, 230400000,      /* Level 50 */ 258340000},

/* Bard Table (Priest Experience Tables) */ {0,     1, 3500, 6000, 16000, 30000, /* Level 5 */ 50000, 80000, 130000, 190000, 250000, /* Level 10 */ 350000, 475000, 625000, 800000, 1000000, /* Level 15 */ 1300000, 1700000, 2200000, 2950000, 4000000,  /* Level 20 */ 5000000, 6250000, 7750000, 9750000, 12000000, /* Level 25 */ 14000000, 16250000, 18750000, 21250000, 24000000, /* Level 30 */ 26400000, 28800000, 31200000, 33600000, 36000000, /* Level 35 */ 39000000, 44000000, 50000000, 60000000, 72000000, /* Level 40 */ 84000000, 99000000, 114000000, 129000000, 144000000,  /* Level 45 */ 164000000, 189000000, 219000000, 251000000, 288000000, /* Level 50 */ 325000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 5400, 14400, 27000, /* Level 5 */ 45000, 72000, 117000, 171000, 225000, /* Level 10 */ 315000, 427500, 562500, 720000, 900000, /* Level 15 */ 1170000, 1530000, 1980000, 2655000, 3600000,  /* Level 20 */ 4500000, 5625000, 6975000, 8775000, 10800000, /* Level 25 */ 12600000, 14625000, 16875000, 19125000, 21600000, /* Level 30 */ 23760000, 25920000, 28080000, 30240000, 32400000, /* Level 35 */ 35100000, 39600000, 45000000, 54000000, 64800000, /* Level 40 */ 75600000, 89100000, 102600000, 116100000, 129600000,  /* Level 45 */ 151600000, 179100000, 212100000, 247300000, 288000000, /* Level 50 */ 328700000},

/* Psionicist Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Lich Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Enchanter Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Invoker Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Illusionist Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000, /* Level 5 */ 50000, 85000, 135000, 205000, 275000, /* Level 10 */ 375000, 510000, 675000, 875000, 1100000, /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,  /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000, /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000, /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000, /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000, /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Battlechanter Table (Priest Experience Tables) */ {0,     1, 3500, 6000, 16000, 30000, /* Level 5 */ 50000, 80000, 130000, 190000, 250000, /* Level 10 */ 350000, 475000, 625000, 800000, 1000000, /* Level 15 */ 1300000, 1700000, 2200000, 2950000, 4000000,  /* Level 20 */ 5000000, 6250000, 7750000, 9750000, 12000000, /* Level 25 */ 14000000, 16250000, 18750000, 21250000, 24000000, /* Level 30 */ 26400000, 28800000, 31200000, 33600000, 36000000, /* Level 35 */ 39000000, 44000000, 50000000, 60000000, 72000000, /* Level 40 */ 84000000, 99000000, 114000000, 129000000, 144000000,  /* Level 45 */ 164000000, 189000000, 219000000, 251000000, 288000000, /* Level 50 */ 325000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 5400, 14400, 27000, /* Level 5 */ 45000, 72000, 117000, 171000, 225000, /* Level 10 */ 315000, 427500, 562500, 720000, 900000, /* Level 15 */ 1170000, 1530000, 1980000, 2655000, 3600000,  /* Level 20 */ 4500000, 5625000, 6975000, 8775000, 10800000, /* Level 25 */ 12600000, 14625000, 16875000, 19125000, 21600000, /* Level 30 */ 23760000, 25920000, 28080000, 30240000, 32400000, /* Level 35 */ 35100000, 39600000, 45000000, 54000000, 64800000, /* Level 40 */ 75600000, 89100000, 102600000, 116100000, 129600000,  /* Level 45 */ 151600000, 179100000, 212100000, 247300000, 288000000, /* Level 50 */ 328700000},

/* Rogue Table (Rogue Experience Tables) */ {0,     1, 3000, 6250, 12500, 25000, /* Level 5 */ 50000, 80000, 120000, 160000, 200000,       /* Level 10 */ 270000, 340000, 480000, 640000, 800000,     /* Level 15 */ 980000, 1300000, 1800000, 2500000, 3200000, /* Level 20 */ 4000000, 5000000, 6500000, 8000000, 9600000,        /* Level 25 */ 11200000, 13000000, 14800000, 16800000, 18800000,   /* Level 30 */ 20800000, 22800000, 24800000, 26800000, 30000000,   /* Level 35 */ 35000000, 40000000, 45000000, 51300000, 57600000,   /* Level 40 */ 67500000, 77500000, 89500000, 102350000, 115200000, /* Level 45 */ 130000000, 155000000, 180000000, 205000000, 230400000,      /* Level 50 */ 255800000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 5625, 11250, 22500, /* Level 5 */ 45000, 72000, 108000, 144000, 180000,       /* Level 10 */ 243000, 306000, 432000, 576000, 720000,     /* Level 15 */ 882000, 1170000, 1620000, 2250000, 2880000, /* Level 20 */ 3600000, 4500000, 5850000, 7200000, 8640000,        /* Level 25 */ 10080000, 11700000, 13320000, 15120000, 16920000,   /* Level 30 */ 18720000, 20520000, 22320000, 24120000, 27000000,   /* Level 35 */ 31500000, 36000000, 40500000, 46170000, 51840000,   /* Level 40 */ 60750000, 69750000, 80550000, 92115000, 103680000, /* Level 45 */ 119960000, 147460000, 174960000, 202460000, 230400000,      /* Level 50 */ 258340000},

/* Elementalist Table (Mage Experience Tables) */ {0,     1, 3500, 7000, 18000, 30000,                           /* Level 5 */ 50000, 85000, 135000, 205000, 275000,                 /* Level 10 */ 375000, 510000, 675000, 875000, 1100000,              /* Level 15 */ 1400000, 1900000, 2600000, 3400000, 4400000,          /* Level 20 */ 5650000, 7150000, 8900000, 10900000, 13200000,        /* Level 25 */ 15500000, 18000000, 20600000, 23400000, 25400000,     /* Level 30 */ 28200000, 31000000, 33800000, 36700000, 39600000,     /* Level 35 */ 43600000, 48600000, 56100000, 66000000, 79000000,     /* Level 40 */ 92000000, 107000000, 122000000, 139000000, 158000000, /* Level 45 */ 178000000, 203000000, 233000000, 270000000, 316000000, /* Level 50 */ 362000000},
 * 1) if 0
 * 1) endif

{0,     1, 3150, 6300, 16200, 27000, /* Level 5 */ 45000, 76500, 121500, 184500, 247500, /* Level 10 */ 337500, 459000, 607500, 787500, 990000, /* Level 15 */ 1260000, 1710000, 2340000, 3060000, 3960000,  /* Level 20 */ 5085000, 6435000, 8010000, 9810000, 11880000, /* Level 25 */ 13950000, 16200000, 18540000, 21060000, 22860000, /* Level 30 */ 25380000, 27900000, 30420000, 33030000, 35640000, /* Level 35 */ 39240000, 43740000, 50490000, 59400000, 71100000, /* Level 40 */ 82800000, 96300000, 109800000, 125100000, 142200000, /* Level 45 */ 164200000, 191700000, 224700000, 265400000, 316000000, /* Level 50 */ 366600000},

/* Dire Raider Table (Fighter Experience Tables) */ {0,     1, 3000, 9000, 17000, 27500, /* Level 5 */ 55000, 85000, 125000, 175000, 225000, /* Level 10 */ 300000, 400000, 525000, 700000, 900000, /* Level 15 */ 1200000, 1700000, 2200000, 2900000, 3600000,  /* Level 20 */ 4600000, 5600000, 6900000, 8800000, 10800000, /* Level 25 */ 12800000, 14800000, 17000000, 19200000, 21000000, /* Level 30 */ 23400000, 25800000, 28200000, 30600000, 34000000, /* Level 35 */ 38000000, 43000000, 49000000, 56500000, 64800000, /* Level 40 */ 75000000, 87000000, 99000000, 114000000, 130000000, /* Level 45 */ 150000000, 175000000, 200000000, 230000000, 260000000, /* Level 50 */ 290000000},
 * 1) if 0
 * 1) endif

{0,     1, 2700, 8100, 15300, 24750, /* Level 5 */ 49500, 76500, 112500, 157500, 202500, /* Level 10 */ 270000, 360000, 472500, 630000, 810000, /* Level 15 */ 1080000, 1530000, 1980000, 2610000, 3240000,  /* Level 20 */ 4140000, 5040000, 6210000, 7920000, 9720000, /* Level 25 */ 11520000, 13320000, 15300000, 17280000, 18900000, /* Level 30 */ 21060000, 23220000, 25380000, 27540000, 30600000, /* Level 35 */ 34200000, 38700000, 44100000, 50850000, 58320000, /* Level 40 */ 67500000, 78300000, 89100000, 102600000, 117000000, /* Level 45 */ 139000000, 166500000, 193000000, 226000000, 260000000, /* Level 50 */ 293000000},

};

/* classes must be listed in numerical order here */

const char *class_types[] = { "None", "Warrior", "Ranger", "Berserker", "Paladin", "Anti-Paladin", "Cleric", "Monk", "Druid", "Shaman", "Sorcerer", "Necromancer", "Conjurer", "Thief", "Assassin", "Mercenary", "Bard", "Psionicist", "Lich", "Enchanter", "Invoker", "Illusionist", "Battlechanter", "Rogue", "Elementalist", "DireRaider", "\n" };

/* *   SAM 7-94, Minimum stats required to choose a class, player must *     get a value greater or equal to the value in this table. *     7-31-94: lowered mins for fighter, cleric, thief, conjurer, *     shaman by 1 temporarily. *     2-6-95: converted to new stats, note that these figures are for the *     stats unmodified by race. *   EAK 4-27-98: converted to new mins per class. */

/* classes must be listed in numerical order here */ const int min_stats_for_class[TOTALCLASS][8] = { /* S,  D,  A,  C, P,  I,  W,  Ch  */ { 0, 0,  0,  0, 0,  0,  0,  0},  /* (none) */ {75, 65, 65, 75, 0, 0,  0,  0},  /* warrior */ {65, 75, 65, 75, 0, 0, 50,  0},  /* ranger */ {101,101,101,101,101,101,101,101},/* berserker */ {65, 65, 75, 75, 0, 40, 50, 0},  /* paladin */ {65, 65, 75, 75, 0, 40, 50, 0},  /* anti-paladin */ {50, 0,  0, 50, 0, 50, 90,  0},  /* cleric */ {65, 60, 75, 75, 0, 0, 40,  0},  /* monk */ {50, 0,  0, 50, 0, 50, 90,  0},  /* druid */ {50, 0,  0, 50, 0, 50, 90,  0},  /* shaman */ {50, 40, 0, 50, 0, 90,  0,  0},  /* sorcerer */ {50, 40, 0, 50, 0, 90,  0,  0},  /* necromancer */ {50, 40, 0, 50,75, 90,  0,  0},  /* conjurer */ {40, 85, 65, 40, 0, 65, 40, 0},  /* thief */ {40, 75, 60, 40, 0, 70, 0,  0},  /* assassin */ {55, 50, 40, 55, 0, 40, 40, 0},  /* mercenary */ {50, 75, 50, 50, 0, 70, 0, 80},  /* bard */ {50, 40, 40, 50,90, 90, 65, 0},  /* psionicist */ {60, 0, 20, 40, 0, 85, 30,  0},  /* lich */ {50, 40, 0, 50, 0, 90,  0,  0},  /* enchanter */ {50, 40, 0, 50, 0, 90,  0,  0},  /* invoker */ {50, 40, 0, 50, 0, 90,  0,  0},  /* illusionist */ {50, 75, 50, 50, 0, 40, 70, 80}, /* battlechanter */ {65, 75, 75, 65, 0, 0,  0,  0},  /* rogue */ {50, 40, 0, 50, 0, 90,  0,  0},  /* elementalist */ {65, 75, 65, 75, 0, 0, 50,  0}  /* dire raider */ };

/* *     SAM 7-94, Initial alignments of players. Use encoding to *     specify evil, neutral, good, or players choice for each race/class * *     Encoding:       -1 = evil (-1000) *                      0 = neutral (0) *                      1 = good (+1000) *                      2 = choice (any) *                      3 = choice (good/neutral) *                      4 = choice (neutral/evil) *                      5 = not a legal race/class combo */

/* races must be listed in numerical order here */ const int class_table[PC_RACES][TOTALCLASS] = { /* - Wa Ra Be Pa Ap Cl Mo Dr Sh So Ne Co Th As Me Ba Ps Li En In Il Bc Ro El DR = Class */ {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},  /* None      */ {5, 2, 1, 5, 1,-1, 2, 0, 0, 5, 5,-1, 2, 5, 5, 2, 0, 5, 5, 2, 2, 2, 5, 4, 2, 5},  /* Human     */ {5, 3, 5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},  /* Barbarian */ {5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5, 5, 5,-1,-1, 5, 5,-1, 5, 5},  /* Drow      */ {5, 1, 1, 5, 5, 5, 1, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 1, 1, 5, 5, 0, 1, 5},  /* Elf       */ {5, 1, 5, 1, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 1, 0, 5, 5, 5, 5, 5, 5, 0, 5, 5},  /* Dwarf     */ {5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5,-1, 5, 5,-1, 5, 5, 5, 5, 5, 5, 5,-1,-1, 5},  /* Duergar   */ {5, 1, 5, 5, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 1, 1, 5, 5, 0, 5, 5},  /* Halfling  */ {5, 1, 5, 5, 5, 5, 1, 5, 5, 5, 5, 5, 1, 5, 5, 5, 5, 5, 5, 1, 1, 1, 5, 0, 3, 5},  /* Gnome     */ {5,-1, 5,-1, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},  /* Ogre      */ {5,-1, 5,-1, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},  /* Troll     */ {5, 5, 1, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5},  /* Half-elf  */ {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5, 5, 5, 5},  /* Illithid  */ {5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5,-1,-1, 5, 5, 5, 5, 5, 5,-1,-1,-1, 5,-1,-1, 5},  /* Yuan-Ti   */ {5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5,-1,-1, 5, 5, 5, 5, 5, 5,-1,-1,-1, 5,-1, 5, 5},  /* Lich      */ {5,-1, 5, 5, 5, 5,-1, 5, 5, 5, 5,-1,-1, 5, 5, 5, 5, 5, 5,-1,-1,-1, 5,-1, 5, 5},  /* Myconid   */ {5,-1, 5, 5, 5, 5, 5, 5, 5,-1, 5, 5, 5, 5, 5, 5,5, 5, 5, 5, 5, 5, -1,-1, 5,-1}   /* Orc       */

};

/* This is the data used for determining class choice, the only thing stored in the player file is a short int and the following tables are used to determine what the choice for that class is JTC */


 * 1) define MAX_CLASSES
 * 2) define MAX_CLASS_CHOICES 32 /* MAX number of choices for EACH class */

/* The is done much like command interp. */

const char *CCstrings[] = { "NULL",         /* 0 */ "wolf" "bear", "boar", "elk", "eagle", "crow", "lion", "tiger",             /* Rerserved for Shamans */ "stallion", "snake",             /* 10 */ "",  "",   "",   "",   "",   "",   "worg", "vulture", "crocodile", "serpent",             /* 20 */ "scorpion", "hyena", "jackal", "spider", "viper", "bat", "raven", "",  "",   "",              /* 30 */   "",   "",              /* End of Shaman Totems */ };

/* To add a class choice add the number -- one more than the last number in class choice strings -- to the appropriate place in this array and add the string to the end of classchoice strings. JTC */

/* The mob vs obj check for shamans totem spec_proc requires the 1st 32 choices be reserved for shamans, so use numbers > 32 for other classes JTC Mar 17, 97 */

const sh_int classchoices[MAX_CLASSES][MAX_CLASS_CHOICES] = { /* #define CLASS_NONE           0 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_WARRIOR         1 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_RANGER          2 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_BERSERKER       3 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_PALADIN         4 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_ANTIPALADIN     5 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_CLERIC          6 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_MONK            7 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_DRUID           8 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_SHAMAN          9 */ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0},  /* #define CLASS_SORCERER       10 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_NECROMANCER    11 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_CONJURER       12 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_THIEF          13 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_ASSASSIN       14 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_MERCENARY      15 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_BARD           16 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_PSIONICIST     17 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_LICH           18 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_ENCHANTER      19 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_INVOKER        20 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  /* #define CLASS_ILLUSIONIST    21 */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} };

/* Removed Menzo from here for now, to make room for Hyssk. - Shev */

const int hometown[] = { 0,         /* Gods */ 3001,      /* Waterdeep */ 10666,     /* Griffon's Nest (Uthgar) */ 35100,     /* Hyssk */ 8001,      /* Leuthilspar */ 6523,      /* Mithril Hall */ 34346,     /* Gloomhaven */ 16182,     /* Beluir */ 66001,     /* Ashremite */ 15296,     /* Faange */ 11703,     /* Ghore */ 46015,     /* Calimport */ 7255,      /* Bloodstone */ 96400,     /* Ixarkon */ 91104,     /* Baldur's Gate */ 81130,     /* Zhentil Keep (Removed) (LEAVE THIS IN.  -D2) */ 20953,     /* Viperstongue */ 21780,     /* Dobluth Kyor */ 94700      /* Bloodtusk */ };

/* *     WAD Vaprak 4/22/98 *     Alignment allowed to start in hometown. Place a 1 in the *     appropriate column if the alignment is allowed to start *     within the city. */ const int align_hometowns[][4] = { /* -  E  N  G      Alignments */ {0, 0, 0, 0}, /* None */ {0, 1, 1, 1}, /* Waterdeep (Miax) */ {0, 1, 1, 1}, /* Griffon's Nest (Uthgar) */ {0, 1, 0, 0}, /* Hyssk -- (Merrshaulk) */ {0, 1, 1, 1}, /* Leuthilspar (Cython) */ {0, 1, 1, 1}, /* Mithril Hall (Grimtooth) */ {0, 1, 0, 0}, /* Gloomhaven (Cyric) */ {0, 1, 1, 1}, /* Beluir (Shadowy) */ {0, 1, 1, 1}, /* Ashremite Village */ {0, 1, 0, 0}, /* Faang -- (Tyr) */ {0, 1, 0, 0}, /* Ghore -- (Tyr) */ {0, 1, 1, 1}, /* Calimport -- (Cyric) */ {1, 1, 0, 0}, /* Bloodstone -- (Grolantor) */ {0, 1, 0, 0}, /* Ixarkon */ {0, 1, 1, 1}, /* Baldur's Gate -- (Shevarash) */ {0, 0, 0, 0}, /* Zhentil Keep -- (LEAVE THIS IN. --D2) */ {0, 1, 1, 1}, /* Viperstongue -- (Shevarash) */ {0, 1, 0, 0}, /* Dobluth Kyor -- (Shevarash)*/ {0, 1, 0, 0}, /* Bloodtusk */ };

/* *     SAM 7-94, the names of our hometowns. This really not *     used by anything, just used to print out on char stats. */ const char *hometown_names[] = { "None", "Waterdeep", "Griffon's Nest", "Hyssk", "Leuthilspar", "Mithril Hall", "Gloomhaven", "Beluir", "Ashrumite Village", "Faange", "Ghore", "Calimport", "Bloodstone", "Ixarkon", "Baldur's Gate", "Zhentil Keep", /* LEAVE THIS IN. --D2 */ "Viperstongue", "Dobluth Kyor", "Bloodtusk", "\n" };

/* * use a 1 in the corresponding race/town slot to specify which races may start in which town. * Note that Calimport is uncompleted so no one starts there, and that Menzoberranzan and Grantor City * are also not in the game, so drow and duergar start in Faang or Ghore. JAB */ /* Removed Menzo for now, to make way for Hyssk. - Shev*/ /* Myconid --> S (Shroom)  Orc --> P (Porc), orcs temporarily starting in Gloomhaven   - Kel*/ const int avail_hometowns[][PC_RACES] = { /* - H  B  D  G  M  D  H  G  O  T  H  I  Y  L  S  P      Races */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* None */ {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, /* Waterdeep (Miax) */ {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Griffon's Nest (Uthgar) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, /* Hyssk -- (Merrshaulk) */ {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, /* Leuthilspar (Cython) */ {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Mithril Hall (Grimtooth) */ {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Gloomhaven (Cyric) */ {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Beluir (Shadowy) */ {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, /* Ashremite Village -- (O.Cyric) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, /* Faang -- (Tyr) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, /* Ghore -- (Tyr) */ {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, /* Calimport -- (Cyric) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Bloodstone -- (Grolantor) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, /* Ixarkon */ {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, /* Baldur's Gate -- (Shevarash) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Zhentil Keep -- (LEAVE THIS IN. --D2) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Viperstongue -- (Shevarash) */ {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* Dobluth Kyor -- (Shevarash) */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} /* Bloodtusk */ };

/* *     SAM 7-94 *     Guilds in each city (virtual room number) for each class. *     The "NONE" entry is used as the default entering location *     in the case a character is not assigned a guild. You should *     set that too the temple equivalent (rm 3001 in waterdeep) of *      your city */ const int guild_locations[][TOTALCLASS] = { /* NONE    WA    RA    BE    PA    AN    CL    MO    DR    SH    SO    NE    CO    TH    AS    ME    BA    PS   LI   EC   IV   IL  MY   RO   EL */ /* None */ {  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  -1,   -1,   -1,   -1,   -1,   -1,   -1, -1, -1,      -1, -1, -1, -1, -1},   /* Waterdeep */ { 3001, 3061, 5542, 3061, 5505,  -1, 3073, 5524, 5568, 3073, 3044, -1, 3044, 3289, 2955, 5511, 5537,   -1,   -1, 3044,      5581, 5583, -1, 2955, 3044, -1},   /* Griffon's Nest */ {10666,10696,  -1,   -1,   -1,   -1,   -1,   -1,   -1,10698,   -1,   -1,10691,   -1,   -1,10719,   -1,   -1,   -1, -1, -1,      -1, -1, -1, -1, -1},   /* Hyssk */ {35100,35319,  -1,   -1,   -1,   -1,35302,   -1,   -1,   -1,35353,35362,35348,35331,35341,   -1,   -1,   -1,35363, 35353,      34495, 34494, -1, 35341, 35348, -1},   /* Leuthilspar */ { 8001, 8018, 8307,  -1,   -1,   -1, 8072,   -1, 8139,   -1, 8115,   -1,   -1, 8201,   -1, 8320, 8320,   -1,   -1, 8115,      8115, -1, -1, 8201, 8115, -1},   /* Mithril Hall */ { 6520, 6550,  -1, 6733,   -1,   -1, 6532,   -1,   -1,   -1,   -1,   -1, 6752, 6575, 6744, 6745,46951,   -1,   -1, -1, -1,      -1, -1, 6575, -1, -1},   /* Gloomhaven */ {34364,34435,  -1,   -1,   -1, -1,34418,   -1,   -1,34421,   -1,   -1,34372,34433,34427,34452,   -1,   -1,   -1, -1, -1,      -1, -1, 34427, 34372, -1},   /* Beluir */ {16182,16000,  -1,   -1,   -1,   -1,16061,   -1,   -1,16355,16044, -1,   -1,16421,   -1,16421,46953,   -1,   -1, 16044,      16044, -1, -1, 16421, -1, -1},   /* Ashrumite */ {66001,66107,  -1,   -1,   -1,   -1,66113,   -1,   -1,66131,66103, -1,66103,66106,   -1,   -1,   -1,   -1,   -1, 66103,      66103, 66142, -1, 66106, 66103, -1},   /* Faang */ {15296,15339,  -1,   -1,   -1,   -1,   -1,   -1,   -1,15317,   -1,   -1,   -1,   -1,   -1,15663,   -1,   -1,   -1, -1, -1,      -1, -1, -1, -1, -1},   /* Ghore */ {11703,11610,  -1,   -1,   -1,   -1,   -1,   -1,   -1,11638,   -1,   -1,   -1,   -1,   -1,11626,   -1,   -1,   -1, -1, -1,      -1, -1, -1, -1, -1},   /* Calimport */ {46015,46259,  -1,   -1,   -1,   -1,46062,46298,46071,46069,46058, -1,46057,46241,46241,46248,46440,   -1,   -1, 46058,      46058, -1, -1, 46241, 46057, -1},   /* Bloodstone */ { 7255, 7678,  -1,   -1,   -1, 7678, 7822,22507,   -1, 7822, 7850,7887, 7850, 7869, 7841,   -1,   -1,   -1,   -1, 7850,      7850, -1, -1, 7841, 7850, -1},   /* Ixarkon */ {96503,  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,96503,   -1, -1, -1,      -1, -1, -1, -1, -1},   /* Balder's Gate */ {91104,91462,  -1,   -1,   -1,91695,91707,91726,91730,91714,91713,91723,91713,91647,91648,91717,91895,   -1,   -1, 91713,      91713, -1, -1, 91648, 91713, -1},   /* Zhentil Keep -- LEAVE THIS IN --D2 */ {  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  -1,      -1,   -1,   -1,   -1,   -1,   -1, -1, -1, -1, -1, -1, -1, -1},   /* Viperstongue */ {20953,20958,  -1,   -1,   -1,20958,20965,   -1,   -1,20965,20963,20963,20963,20956,20956,20956,20957,   -1,   -1, 20963,      20963, -1, -1, 20956, -1, -1},   /* Dobluth Kyor  */ {21780,21800,  -1,   -1,   -1,   -1,21869,   -1,   -1,   -1,   -1,21806,   -1      ,21868,21868,   -1,   -1,   -1,   -1, 21806, 21806, -1, -1, 21868, -1,-1},   /* Bloodtusk */ {94900,94953, -1, -1, -1, -1, -1, -1, -1, 94933, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 94961, 94948, -1, 94953}, };

/* Note: If changing languages, do change those at structs.h as well.. If adding any, change MAX_TONGUE or whatnotitwas too */

const char *language_names[] = { "common",    /*  1 */ "dwarven",   /*  2 */ "elven",     /*  3 */ "halfling",  /*  4 */ "gnome",     /*  5 */ "barbarian", /*  6 */ "duergar",   /*  7 */ "ogre",      /*  8 */ "troll",     /*  9 */ "drow",      /* 10 */ "god",       /* 11 */ "\n" };

/*  over 100 values are the part below 100 + (int_of_char / the number of   hundreds.

(don't you love when I'm easily understandable? -Torm) No, its very annoying. --MIAX As if he's EVER understandable. *snort* - CRM */

/* races must be listed in numerical order here */ const int language_base[][TONGUE_GOD] = { /* 0   1    2    3    4    5    6    7    8    9   10 */   { 1, 190, 201, 201, 201, 201, 201, 201, 201, 201, 201}, /*  1 HUMAN     */ { 6, 50, 201, 201, 201, 201, 190,   0,   0,   0,   0}, /*  2 BARBARIAN */ {10,  0,   0,   0,   0,   0,   0, 201, 201, 201, 190}, /*  3 DROW      */ { 3, 10, 201, 190, 201, 201, 201,   0,   0,   0,   0}, /*  4 GREY      */ { 2, 10, 190, 201, 201, 201, 201,   0,   0,   0,   0}, /*  5 MOUNTAIN  */ { 7,  0,   0,   0,   0,   0,   0, 190,  10,  10,  10}, /*  6 DUERGAR   */ { 4, 80,  80,  80,  80,  80,  80,   0,   0,   0,   0}, /*  7 HALFLING  */ { 5, 20,  50,  30, 200, 190,  10,   0,   0,   0,   0}, /*  8 GNOME     */ { 8,  0,   0,   0,   0,   0,   0,  40, 190,  80,  40}, /*  9 OGRE      */ { 9,  0,   0,   0,   0,   0,   0,  40,  80, 190,  40}, /* 10 TROLL     */ { 3, 50, 201, 190, 201, 201, 201,   0,   0,   0,   0}, /* 11 HALFELF   */ { 0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0}, /* 12 MINDFLAYER*/ { 1, 190,  0,   0,   0,   0,   0,   0,   0,   0,   0}, /* 13 YUAN_TI   */ { 0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0}, /* 14 LICH      */ { 0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0}, /* 15 MYCONOID  */ { 0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0}  /* 16 ORC       */ };

const char *innate_strings[] = { "levitate", "darkness", "faeriefire", "invisibility", "strength", "doorbash", "outdoor sneak", "social steal", "bodyslam", "summon mount", "anti-good", "anti-evil", "infravision", "snakebite", "tailsweep", "befriend reptile", "scaleskin", "vipermind", "forage", "danger sense", "interference shield", "underdark sneak", "shapechange", "Summon Horde", "enlarge", "speak with plants", "tame", "woodcarving", "hamstring", "\n" };

int innate_cmd_flag[] = { 1,  1,   1,   1,   1,   1,   0,   0,   0,   1,   0,   1,   0,   0,   0,   1,   1,   1,   1,   1,   1,   0,   1,   1,   1,   1,   1,   1 };

/* races must be listed in numerical order here, then classes in numerical order */ int innate_abilities[] = { /* human */ 0,  /* barbarian */ INNATE_BODYSLAM, /* drow */ INNATE_LEVITATE + INNATE_DARKNESS + INNATE_FAERIE_FIRE + INNATE_UD_WLD_SNEAK, /* grey elf */ INNATE_OUTDOOR_SNEAK, /* mountain dwarf */ 0,  /* duergar dwarf */ INNATE_INVIS + INNATE_STRENGTH + INNATE_ENLARGE + INNATE_UD_WLD_SNEAK, /* halfling */ INNATE_HAMSTRING, /* INNATE_SOCIAL_STEAL, */ /* gnome */ 0,  /* ogre */ INNATE_DOORBASH + INNATE_BODYSLAM, /* troll */ INNATE_BODYSLAM, /* halfelf */ 0,  /* mindflayer */ INNATE_LEVITATE, /* yuan-ti */ INNATE_SCALE_SKIN + INNATE_VIPER_MIND + INNATE_BEFRIENDREPTILE + INNATE_INFRAVISION + INNATE_SNAKEBITE + INNATE_TAILSWEEP, /* lich race */ INNATE_INFRAVISION, /* myconid race */ 0,  /* Orc Race  */ INNATE_SUMMON_HORDE, /* WARRIOR     */ 0,  /* RANGER   */ INNATE_OUTDOOR_SNEAK + INNATE_FORAGE + INNATE_SPEAK_WITH_PLANTS + INNATE_TAME_MOUNT + INNATE_WOODCARVING, /* BERSERKER    */ 0,  /* PALADIN */ INNATE_SUMMON_MOUNT + INNATE_ANTI_EVIL, /* ANTIPALADIN     */ INNATE_SUMMON_MOUNT + INNATE_ANTI_GOOD, /* CLERIC       */ 0,  /* MONK       */ 0,  /* DRUID      */ INNATE_SHAPECHANGE + INNATE_SPEAK_WITH_PLANTS, /* SHAMAN   */ 0,  /* SORCERER */ 0,  /* NECROMANCER    */ 0,  /* CONJURER       */ 0,  /* THIEF    */ 0,  /* ASSASSIN   */ 0,  /* MERCENARY        */ 0,  /* BARD  */ 0,  /* PSIONICIST */ 0,  /* LICH */ INNATE_INFRAVISION, /* ENCHANTER */ 0,  /* INVOKER */ 0,  /* ILLUSIONIST */ 0,  /* BATTLECHANTER CLASS */ 0,  /* ROGUE */ 0,  /* ELEMENTALIST */ 0,  /* DIRE RAIDER */ INNATE_SUMMON_MOUNT + INNATE_OUTDOOR_SNEAK + INNATE_SPEAK_WITH_PLANTS + INNATE_WOODCARVING };

/* Default max magic resistance for mobs - DA 2/27/01 */ const int racial_mods[][2] = { /* nasty mobs have nasty magic resistance. */  {RACE_F_ELEMENTAL, 20}, {RACE_A_ELEMENTAL, 20}, {RACE_W_ELEMENTAL, 20}, {RACE_E_ELEMENTAL, 20}, {RACE_DEMON, 70}, {RACE_DEVIL, 70}, {RACE_ANGEL, 70}, {RACE_UNDEAD, 10}, {RACE_DRAGON, 60}, {0, 0} };