9150e85442
# Conflicts: # src/Client.cc # src/IPStackSimulator.cc # src/ReceiveCommands.cc # src/ReceiveSubcommands.cc # src/SendCommands.cc # src/ServerState.cc # src/ServerState.hh
1408 lines
86 KiB
JSON
1408 lines
86 KiB
JSON
{
|
|
// Configuration file for newserv.
|
|
|
|
// This file is standard JSON with C-style comments. Some other extensions to the JSON standard are also supported;
|
|
// notably, integers may be specified in hexadecimal using the 0x prefix. If you use a text editor that auto-formats
|
|
// JSON on save, it may be confused by this file's format. Make sure it doesn't automatically turn hex integers into
|
|
// strings, for example.
|
|
|
|
// If you're just setting up a newserv instance for your personal use, you probably only need to change LocalAddress.
|
|
// Set LocalAddress to your machine's local IPv4 address (usually something like 10.0.x.x or 192.168.x.x). In PSO's
|
|
// network configuration, set the DNS server address to the same address you entered in LocalAddress in this file.
|
|
|
|
// If you also want people to be able to connect to your newserv instance from the Internet, you'll need to set
|
|
// ExternalAddress to your public-facing IPv4 address (you can find this by visiting e.g. whatismyip.com). You'll
|
|
// also need to set up port forwarding on your router for all the TCP ports listed in PortConfiguration (9000, 9001,
|
|
// etc.), as well as UDP port 53. Players from outside your network can then connect to your server by entering your
|
|
// public address as their DNS server address in PSO's network configuration.
|
|
|
|
// Server's name (maximum 16 characters). This appears in the upper-right corner of the screen while in lobbies.
|
|
"ServerName": "newserv",
|
|
|
|
// User to run the server as. If present, newserv will attempt to switch to this user's permissions after loading its
|
|
// configuration and opening listening sockets. The special value $SUDO_USER causes newserv to look up the desired
|
|
// username in the $SUDO_USER environment variable instead. This option has no effect on Windows.
|
|
// "User": "$SUDO_USER",
|
|
|
|
// Number of threads to use for CPU-intensive work. This value must be at least 1, and should generally not be more
|
|
// than the number of CPUs in the system.
|
|
"WorkerThreads": 1,
|
|
|
|
// Address to connect local clients to (IP address or interface name). This is the address that newserv will expect
|
|
// clients on the same network as the server to connect to.
|
|
"LocalAddress": "en0",
|
|
// Address to connect external clients to (IP address or interface name). This is the address that newserv will
|
|
// expect clients not on the same network as the server to connect to. If you're running newserv behind a NAT (this
|
|
// applies to most home networks), this should be your router's public-facing IP address.
|
|
"ExternalAddress": "10.0.1.5",
|
|
|
|
// Port to listen for DNS queries on. To disable the DNS server, comment this out or set it to zero. By default, the
|
|
// DNS server listens on all interfaces, but you can specify an interface by replacing this with a list of
|
|
// [interface_addr_or_name, port].
|
|
"DNSServerPort": 53,
|
|
|
|
// Ports to listen for game connections on.
|
|
"PortConfiguration": {
|
|
// Format of entries in this dictionary:
|
|
// name: [port, version, behavior]
|
|
|
|
// port is normally just an integer (which will cause the server to listen on that port on all interfaces), but you
|
|
// can also replace the integer with a 2-list of [address, port] to listen in a specific port. For example:
|
|
// "xb": [["en0", 9500], "xb", "login_server"],
|
|
|
|
// Various versions of PSO hardcode these ports in the clients. Don't change these unless you don't want to support
|
|
// certain versions of PSO.
|
|
// Note: The pc_console_detect behavior is used for separating PSO PC and DC/GC clients that connect on the same
|
|
// port. On these ports, newserv sends a single command that PC and DC/GC clients parse in different ways, leading
|
|
// them to connect to either the console-login port or the pc-login port (both of which must be defined below if
|
|
// pc_console_detect is used). If you want to support only PC, you can change the pc_console_detect behavior for
|
|
// these ports to game_server. If you don't want to support PC, you can do the same, but also change the version
|
|
// from pc to gc.
|
|
// Note: It is not an error that no ports appear here with "dc" in their definitions. DC clients use the same ports
|
|
// as GC clients, and newserv can tell them apart at the time they connect.
|
|
"gc-jp10": [9000, "gc", "game_server"],
|
|
"gc-jp11": [9001, "gc", "game_server"],
|
|
"gc-jp3te": [9002, "gc", "game_server"],
|
|
"gc-jp3": [9003, "gc", "game_server"],
|
|
"gc-us12t1": [9064, "gc", "game_server"],
|
|
"gc-us10": [9100, "pc", "pc_console_detect"],
|
|
"gc-us3": [9103, "gc", "game_server"],
|
|
"gc-eu10": [9200, "gc", "game_server"],
|
|
"gc-eu11": [9201, "gc", "game_server"],
|
|
"gc-eu3-50": [9202, "gc", "game_server"],
|
|
"gc-eu3-60a": [9203, "gc", "game_server"],
|
|
"gc-eu3-60b": [9204, "gc", "game_server"],
|
|
"pc": [9300, "pc", "game_server"],
|
|
"xb": [9500, "xb", "game_server"],
|
|
"pc-patch": [10000, "patch", "patch_server_pc"],
|
|
"bb-patch": [11000, "patch", "patch_server_bb"],
|
|
"bb-jp-patch": [11100, "patch", "patch_server_bb"],
|
|
"bb-jp": [11101, "bb", "game_server"],
|
|
"bb-patch-hg": [11200, "patch", "patch_server_bb"],
|
|
"bb-data1": [12000, "bb", "game_server"],
|
|
"bb-data2": [12001, "bb", "game_server"],
|
|
},
|
|
|
|
// Where to listen for IP and PPP stack clients. This exists to interface with PSO GC clients running in a local
|
|
// Dolphin emulator. See README.md for details on how to get PSO to connect via this interface. You can also add
|
|
// "address:port" strings to these lists to listen for tapserver connections on specific interfaces only.
|
|
// You can get Dolphin to connect locally by adding a port to this list and configuring Dolphin to connect to the
|
|
// same port. For example, you could set this to ["127.0.0.1:5059"] (which listens on port 5059 but only accepts
|
|
// connections from the local machine), and configure Dolphin's tapserver BBA to connect to 127.0.0.1:5059.
|
|
"IPStackListen": [5059],
|
|
"PPPStackListen": [5058],
|
|
|
|
// Where to listen for PPP clients. This exists to interface with PSO GC clients running on a Wii with Devolution,
|
|
// which emulates the modem adapter. The PPP stream can be forwarded directly to newserv on any port specified here
|
|
// without using pppd or another PPP server. When you start newserv, it will tell you the Devolution phone number you
|
|
// can use to connect.
|
|
"PPPRawListen": [5057],
|
|
|
|
// Where to listen for HTTP connections. The HTTP server is intended as a private interface to interact with newserv
|
|
// from e.g. an in-house Web portal or Discord bot. It would be unwise to expose any of these ports to the public
|
|
// Internet (hence why the default here is blank). The format of entries in this list is the same as for
|
|
// IPStackListen and PPPStackListen.
|
|
"HTTPListen": [],
|
|
|
|
// Banned IP address ranges. If a client whose remote IPv4 address is in any of these ranges connects to the server,
|
|
// they are immediately disconnected with no message. Entries in this list may be individiual IP addresses (e.g.
|
|
// "1.2.3.4") or CIDR ranges (e.g. "1.2.3.0/24"). This field takes effect immediately when `reload config` is run in
|
|
// the shell; any existing clients who are now banned are disconnected.
|
|
// Note that this setting does not apply to the HTTP server; it is not possible to ban IP ranges from the HTTP
|
|
// server. (It is also inadvisable to expose the HTTP server to the public Internet.)
|
|
"BannedIPV4Ranges": [],
|
|
|
|
// Other servers to support proxying to. If this is empty for any game version, the proxy server is disabled for that
|
|
// version. Entries in these dictionaries should be of the form "name": "address:port"; the names are used in the
|
|
// proxy server menu.
|
|
// Note that PSO GameCube Episodes 1&2 Trial Edition uses the DC's ProxyDestinations dictionary here. This is because
|
|
// other servers that support that version treat it as PSO DC v2.
|
|
"ProxyDestinations-DC": {
|
|
"Schtserv": "psobb.dyndns.org:9200",
|
|
"Sylverant": "sylverant.net:9200",
|
|
"EU/Ragol": "ragol.org:9200",
|
|
},
|
|
"ProxyDestinations-PC": {
|
|
"Schtserv": "psobb.dyndns.org:9100",
|
|
"Sylverant": "sylverant.net:9100",
|
|
"EU/Ragol": "ragol.org:9100",
|
|
},
|
|
"ProxyDestinations-GC": {
|
|
"Schtserv": "psobb.dyndns.org:9103",
|
|
"Sylverant": "sylverant.net:9103",
|
|
"EU/Ragol": "ragol.org:9103",
|
|
},
|
|
"ProxyDestinations-XB": {
|
|
"Schtserv": "psobb.dyndns.org:9500",
|
|
"Sylverant": "sylverant.net:9500",
|
|
"EU/Ragol": "ragol.org:9500",
|
|
},
|
|
// Proxy destination for patch server clients. If this is given, the internal patch server (for PC and BB) is
|
|
// bypassed, and any client that connects to the patch server is instead proxied to this destination.
|
|
// "ProxyDestination-Patch": "",
|
|
// Proxy destination for BB clients. If this is given, all BB clients that connect to newserv will be proxied to this
|
|
// destination.
|
|
// "ProxyDestination-BB": "",
|
|
|
|
// The server automatically pings clients if they haven't sent anything for a while to make sure they're still alive.
|
|
// This option specifies how long a client must be idle for the server to send a ping.
|
|
"ClientPingInterval": 30000000, // 30 seconds
|
|
// If a client doesn't send anything for this long, they will be disconnected. This should always be longer than
|
|
// ClientPingInterval, since an alive client should have a chance to respond to the server's ping.
|
|
"ClientIdleTimeout": 60000000, // 1 minute
|
|
|
|
// There is a proxy option that allows users to save copies of various game files on the server side. If you have
|
|
// external clients connecting to your server, you can disable this option to prevent clients from generating files
|
|
// on the server side which they will never be able to access.
|
|
"ProxyAllowSaveFiles": true,
|
|
|
|
// By default, the interactive shell runs if stdin is a terminal, and doesn't run if it's not. This option, if
|
|
// present, overrides that behavior.
|
|
// "RunInteractiveShell": false,
|
|
|
|
// Specify which kinds of logging you want to be enabled. This allows you to make the terminal more or less noisy
|
|
// when players are connected, so you can see only the log messages you care about. The log levels are, in decreasing
|
|
// order of verbosity, "DEBUG", "INFO", "WARNING", "ERROR", and "DISABLED".
|
|
"LogLevels": {
|
|
// Channel exceptions are messages about clients disconnecting unexpectedly, or other network-level events.
|
|
"ChannelExceptions": "INFO",
|
|
// Client messages describe events that are specific to a single client's connection or game state.
|
|
"Clients": "INFO",
|
|
// Command data messages show the raw data for all commands sent and received, on both the game server and proxy
|
|
// server. If stderr is a terminal, these messages are colored as well; green is for commands sent by the client,
|
|
// yellow is for commands sent by newserv, and red is for commands sent by the remote server in proxy sessions.
|
|
"CommandData": "INFO",
|
|
// Config messages describe server-wide events, and generally only occur during the startup procedure.
|
|
"Config": "INFO",
|
|
// DNS server messages describe erroneous queries that the DNS server does not respond to. Normal DNS queries do
|
|
// not generate any log messages.
|
|
"DNSServer": "INFO",
|
|
// Client function index messages are generated when building client functions, which only happens at startup time
|
|
// or when `reload functions` is used in the shell.
|
|
"ClientFunctionIndex": "INFO",
|
|
// IP stack simulator messages describe clients connecting and disconnecting via the IP stack interface, and errors
|
|
// that occur at the simulated network level within the simulator.
|
|
"IPStackSimulator": "INFO",
|
|
// Lobby messages describe creation and deletion of lobbies and games, as well as item tracking events within
|
|
// games. On Episode 3, debug messages during battles go to this stream as well; use "DEBUG" here to see them.
|
|
"Lobbies": "INFO",
|
|
// Patch file index messages describe finding and preloading the patch files for download to BB and PC clients.
|
|
"PatchFileIndex": "INFO",
|
|
// Player data messages describe the loading and saving of player and account data files.
|
|
"PlayerData": "INFO",
|
|
// Proxy server messages describe clients connecting and disconnecting from the proxy server, as well as events
|
|
// that occur in each session.
|
|
"ProxyServer": "INFO",
|
|
// Replay messages are generated when replaying a session log (usually during functional testing).
|
|
"Replay": "INFO",
|
|
// Game server messages describe clients connecting and disconnecting from the game server.
|
|
"GameServer": "INFO",
|
|
// Static game data messages describe the loading of any kind of game data.
|
|
"StaticGameData": "INFO",
|
|
},
|
|
// Some large commands (especially during the BB login sequence) can clutter up logs, so we hide these commands by
|
|
// default. If you're investigating or submitting a bug report that occurs on BB clients, set this to false to get a
|
|
// full session log before submitting your report.
|
|
"HideDownloadCommands": true,
|
|
// Some commands include user information such as passwords and access keys. By default, these are not shown in the
|
|
// log, but in certain debugging situations you may need to log them. Set this to false to show credentials in the
|
|
// command log.
|
|
"CensorCredentials": true,
|
|
|
|
// If this option is disabled, the server only allows users who have accounts on the server to connect. If this is
|
|
// enabled, all users will be allowed to connect even if they don't have accounts. When a user connects with an
|
|
// unregistered license (serial number and access key combination, or username and password combination on BB), a new
|
|
// account is created for them. Accounts are addressed by serial numbers; on BB, the new account's serial number is a
|
|
// hash of the username.
|
|
"AllowUnregisteredUsers": true,
|
|
|
|
// If this option is enabled and AllowUnregisteredUsers is enabled, the server will use temporary accounts for the
|
|
// prototype versions (DC NTE, DC 11/2000, GC NTE, and Ep3 NTE) instead of permanent accounts. In this case, you can
|
|
// still manually create permanent accounts for NTE players.
|
|
"UseTemporaryAccountsForPrototypes": true,
|
|
|
|
// If this option is enabled, PC NTE players will be allowed to connect. This is the only version of the game that
|
|
// does not have any way to identify the player (no serial number, username, etc.), so PC NTE players receive random
|
|
// Guild Card numbers every time they connect and cannot be banned by serial number or username.
|
|
"AllowPCNTE": true,
|
|
|
|
// If this is enabled, players can log in multiple times on the same account at the same time. If this is disabled,
|
|
// only one login is allowed per account at a time; when a new session is opened, any existing sessions on the same
|
|
// account are disconnected.
|
|
"AllowSameAccountConcurrentLogins": true,
|
|
"AllowSameAccountConcurrentLoginsAcrossClientSources": false,
|
|
|
|
// Whether to enable chat commands for all players. If this is true, all players will be able to use chat commands as
|
|
// normal; if this is false, only players with the ALWAYS_ENABLE_CHAT_COMMANDS account flag will be able to use chat
|
|
// commands.
|
|
"EnableChatCommands": true,
|
|
|
|
// Sentinel to use for chat commands. If this is given, chat commands are prefixed by this character instead of $.
|
|
// "ChatCommandSentinel": "/",
|
|
|
|
// Number of backup character slots for each account, accessible with the $savechar, $loadchar, and $checkchar
|
|
// commands. This can be any value, but it's recommended to use a small number such as 16.
|
|
"BackupCharacterSlots": 16,
|
|
|
|
// Information menu contents. Each entry is a list containing [title, short description, full contents]. In the short
|
|
// description and full contents, you can use PSO escape codes with the $ character (for example, $Cx for colors).
|
|
// You can show different information menus to V1/V2 clients and V3 clients; to do so, copy InformationMenuContents
|
|
// to InformationMenuContentsV1V2 and InformationMenuContentsV3 and edit them as needed. (If either the V1V2 or V3
|
|
// version of the information menu is not defined, this default version is used instead.)
|
|
"InformationMenuContents": [
|
|
["Lobby commands", "Show commands used\nin the lobby", "These commands can be used in the lobby.\n\n$C6%sli$C7: Show basic information about the lobby\n$C6%sarrow <color-id>$C7: Change your lobby arrow color\n$C6%sln [name]$C7: Change the lobby type (for you only)\n$C6%sexit$C7: Leave the current game or lobby\n$C6%spatch <name>$C7: Run a patch on your client\n\n$C8Episode 3 only:$C7\n$C6%ssong <song-id>$C7: Play a jukebox song"],
|
|
["Game commands", "Show commands used\nin games", "These commands can be used to customize games.\n\n$C8Before starting a game:$C7\n$C6%ssecid <section-id>$C7: Set your override section ID\n$C6%srand <seed>$C7: Set your override random seed\n\n$C8When in a game:$C7\n$C6%sli$C7: Show basic information about the game\n$C6%swhat$C7: Describe the nearest item on the ground\n$C6%smaxlevel <level>$C7: Set maximum level to join\n$C6%sminlevel <level>$C7: Set minimum level to join\n$C6%spassword [password]$C7: Lock or unlock the game"],
|
|
["Player commands", "Show commands used\nto edit player data", "These commands can be used to work with your player data.\n\n$C6%sbbchar <username> <password> <1-4>$C7: Convert your\n character to BB format\n$C6%sedit <stat> <value>$C7: Modify your character data"],
|
|
["Ep3 commands", "Show commands used\nin Episode 3 games", "These commands can be used in Episode 3 games.\n\n$C8Before battle begins:$C7\n$C6%sinftime$C7: Disable all battle time limits, regardless\n of limits set in battle rules\n$C6%sdefrange <min>-<max>$C7: Set the DEF dice range for\n the next battle\n\n$C8During battle:$C7\n$C6%sspec$C7: Allow or forbid spectators\n$C6%sstat <what>$C7: Show a live statistic\n$C6%ssurrender$C7: Immediately lose the current battle\n\n$C8In game after battle:$C7\n$C6%ssaverec <name>$C7: Save recording of the last battle"],
|
|
["Cheat commands", "Show commands used\nfor cheating", "These commands can be used to cheat.\n\n$C8In a game:$C7\n$C6%scheat$C7: Enable or disable cheat mode\n\n$C8When cheat mode is enabled:$C7\n$C6%sinfhp$C7 / $C6%sinftp$C7: Enable or disable infinite HP or TP\n$C6%swarpme <area-id>$C7: Warp yourself to the given area\n$C6%swarpall <area-id>$C7: Warp everyone to the given area\n$C6%snext$C7: Warp yourself to the next area\n$C6%sswa$C7: Enable or disable switch assist\n$C6%si <name>$C7 / $C6%si <hex>$C7: Create an item\n\n$C8Episode 3 only:$C7\n$C6%sunset <index>$C7: Remove one of your set cards from\n the field"],
|
|
["Admin commands", "Show commands used\nfor setting server\noptions", "These commands provide administration functions.\n\n$C6%sevent <event>$C7: Set the holiday in the current lobby\n$C6%sallevent <event>$C7: Set the holiday in all lobbies\n$C6%sann <message>$C7: Send an announcement message to\n all players\n$C6%sax <message>$C7: Send a message to the server\n$C6%ssilence <who>$C7: Silence or unsilence a player\n$C6%skick <who>$C7: Disconnect a player\n$C6%sban <who>$C7: Ban a player"],
|
|
["Debug commands", "Show commands used\nfor debugging", "These commands are used for debugging.\n\n$C6%sdebug$C7: Enable or disable debug messages\n$C6%scall <id>$C7: Call a quest function\n$C6%sgc$C7: Send your own Guild Card to yourself\n$C6%spersist$C7: Cause game to not close when last player\n leaves\n$C6%ssc <data>$C7: Send a command to yourself\n\n$C8Proxy only:$C7\n$C6%sss <data>$C7: Send a command to the remote server"],
|
|
["Using $i", "$C7Show how to use\nthe %si command", "The %si command is used to create items.\nUse it like this (for example):\n\n$C6%si Double Cannon +10 0/0/20/15/35$C7\n$C6%si Hell Pallasch$C7\n$C6%si Black Ring +5DEF$C7\n$C6%si Knight/Power++$C7\n$C6%si Sato 5/50/10.5/50 120% 200IQ$C7\n$C6%si Trimate x3$C7\n$C6%si 1000 Meseta$C7\n\nYou can also use a hex code instead of a name\n(this is the same as the Sato example above):\n\n$C6%si 023F7300F40188131A04881378C80000$C7"],
|
|
["Using $edit", "$C7Show how to use\nthe %sedit command", "%sedit is used in PSOBB to change character stats.\nUse one of the following subcommands:\n\n$C6%sedit ATP <value>$C7\n$C6%sedit MST <value>$C7\n$C6%sedit EVP <value>$C7\n$C6%sedit HP <value>$C7\n$C6%sedit DFP <value>$C7\n$C6%sedit ATA <value>$C7\n$C6%sedit LCK <value>$C7\n$C6%sedit MESETA <amount>$C7\n$C6%sedit EXP <amount>$C7\n$C6%sedit LEVEL <level>$C7\n$C6%sedit NAMECOLOR <color in hex, AARRGGBB format>$C7\n$C6%sedit SECID <section ID name>$C7\n$C6%sedit NAME <new character name>$C7\n$C6%sedit NPC <NPC name>$C7\n$C6%sedit TECH <technique name> <new technique level>$C7\n\nNPC names: none, ninja, rico, sonic, knuckles,\n flowen, elly\n\nTechnique names: foie, gifoie, rafoie, barta,\n gibarta, rabarta, zonde, gizonde, razonde,\n grants, deband, jellen, zalure, shifta, ryuker,\n resta, anti, reverser, megid, all"],
|
|
["Using $bbchar", "$C7Show how to use\nthe %sbbchar command", "%sbbchar is used to convert a character from an\nolder version of PSO to Blue Burst format and save\nit on this server. Use the command like this:\n\n$C6%sbbchar <username> <password> <slot>$C7\n\nIf the username and password are correct, the\ncharacter that you're currently playing as will be\nconverted to PSOBB format and saved under that\naccount, in the specified character slot (1-4)."],
|
|
["Text colors", "Show color values", "These values can be used to color text in\nsome situations with escape codes like %sC6.\nFor example, these can be used in the Info Board.\n\n$C0%sC0$C7 - Black $C1%sC1$C7 - Blue $C2%sC2$C7 - Green\n$C3%sC3$C7 - Cyan $C4%sC4$C7 - Red $C5%sC5$C7 - Purple\n$C6%sC6$C7 - Yellow $C7%sC7$C7 - White $C8%sC8$C7 - Pink\n$C9%sC9$C7 - Violet $CG%sCG$C7 - Orange Pulse\n\n$Ca%sCa$C7 - Orange (Episode 3 only)"],
|
|
["Arrow colors", "$C7Show lobby arrow\ncolor list", "Use these names with %sarrow.\n\n0 - no marker\n1 - red\n2 - blue\n3 - green\n4 - yellow\n5 - purple\n6 - cyan\n7 - orange\n8 - pink\n9 - white\n10 - white\n11 - white\n12 - black"],
|
|
["Event names", "$C7Show lobby event\nnames", "Use these names with %sevent and %sallevent.\n\nnone - no event\nxmas - Christmas event\nval - Valentine's Day\neaster - Easter Sunday event\nhallo - Halloween event\nsonic - Sonic Adventure DX event\nnewyear - New Year's event\nbval - White Day\nwedding - Wedding Day event\nspring - spring event\ns-spring - spring event with striped background\nsummer - summer event\ns-summer - summer event with striped background\nfall - fall event"],
|
|
["GC lobby types", "$C7Show lobby type\nlist for Episodes\nI & II", "Use these names with %sln on Episodes 1 & 2.\n$C6*$C7 indicates lobbies where players can't move.\n\nnormal - standard lobby\ninormal - under standard lobby $C6*$C7\nipc - under PC lobby $C6*$C7\niball - under soccer lobby $C6*$C7\ncave1 - Cave 1 $C6*$C7\ncave2u - Cave 2 Ultimate $C6*$C7\ndragon - Dragon stage (floor is black)\nderolle - De Rol Le stage (water/walls are gone)\nvolopt - Vol Opt stage\ndarkfalz - Dark Falz stage"],
|
|
["Ep3 lobby types", "$C7Show lobby type\nlist for Episode III", "Use these names with %sln on Episode 3.\n\nnormal - Standard lobby\nplanet - Blank Ragol lobby\nclouds - Blank sky lobby\ncave - Unguis Lapis (platform missing)\njungle - Nebula Montana 1 (Ep2 Jungle)\nforest2-1 - Lupus Silva 2 (Ep1 Forest 2)\nforest2-2 - Lupus Silva 1 (Ep1 Forest 2)\nwindpower - Molae Venti\noverview - Nebula Montana 2\nseaside - Tener Sinus (Ep2 Seaside)\nfons - Mortis Fons\ndmorgue - Destroyed Morgue (column missing)\ncaelum - Tower of Caelum (top)\ncyber - Cyber\nboss1 - Castor/Pollux map\nboss2 - Amplum Umbra map\ndolor - Dolor Odor\nravum - Ravum Aedes Sacra\nsky - Via Tubus (tube missing)\nmorgue - Morgue (column missing)"],
|
|
["Area list", "$C7Show stage code\nlist", "Use these names with %swarpme and %swarpall.\n$C2Green$C7 areas will be empty unless you are in a quest.\n$C6Yellow$C7 areas will not allow you to move.\n\n $C8Episode 1 / Episode 2 / Episode 4$C7\n0: Pioneer 2 / Pioneer 2 / Pioneer 2\n1: Forest 1 / Temple Alpha / Crater East\n2: Forest 2 / Temple Beta / Crater West\n3: Caves 1 / Spaceship Alpha / Crater South\n4: Caves 2 / Spaceship Beta / Crater North\n5: Caves 3 / CCA / Crater Interior\n6: Mines 1 / Jungle North / Desert 1\n7: Mines 2 / Jungle South / Desert 2\n8: Ruins 1 / Mountain / Desert 3\n9: Ruins 2 / Seaside / Saint-Milion\n10: Ruins 3 / Seabed Upper / $C6Test map$C7\n11: Dragon / Seabed Lower\n12: De Rol Le / Gal Gryphon\n13: Vol Opt / Olga Flow\n14: Dark Falz / Barba Ray\n15: $C2Lobby$C7 / Gol Dragon\n16: $C6Battle 1$C7 / $C6Seaside Night$C7\n17: $C6Battle 2$C7 / $C2Tower$C7"],
|
|
],
|
|
|
|
// Welcome message. If not blank, this message will be shown to PSO GC users upon first connecting. (If this is
|
|
// blank, they will be taken directly to the main menu instead.) The welcome message is never shown to PSO PC or PSO
|
|
// BB users, though the patch server message (below) can be used for a similar purpose.
|
|
"WelcomeMessage": "",
|
|
|
|
// Patch server message. If not blank, these messages will be shown to PSO PC and PSO BB users (respectively) when
|
|
// they connect to the patch server. Note that PSO PC displays the text in a Windows edit control instead of using
|
|
// PSO's normal text renderer, so linebreaks must be \r\n and color escapes do not work in PCPatchServerMessage.
|
|
"PCPatchServerMessage": "newserv patch server\r\n\r\nThis server is not affiliated with, sponsored by, or in any other way connected to SEGA or Sonic Team, and is owned and operated completely independently.",
|
|
"BBPatchServerMessage": "$C7newserv patch server\n\nThis server is not affiliated with, sponsored by, or in any\nother way connected to SEGA or Sonic Team, and is owned\nand operated completely independently.",
|
|
|
|
// Lobby search orders. When a player joins the lobby from the main menu, they are placed into the first lobby in the
|
|
// list that has empty spaces. In these lists, CARD lobbies C1-C5 are referenced as lobbies 16-20. The number of
|
|
// lobbies is hardcoded in the client and cannot be changed, so the server enforces these limits as well. Thus, the
|
|
// server will not add DCv1 players to lobbies above 10, for example, even if they are specified in these lists.
|
|
// Removing lobbies from these lists doesn't prevent players from joining those lobbies via the lobby teleporter.
|
|
"LobbySearchOrders": [
|
|
[], // PC patch server (unused)
|
|
[], // BB patch server (unused)
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], // DC NTE
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], // DC 11/2000 prototype
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], // DC V1
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // DC V2
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // PC NTE
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // PC
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // GC NTE
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // GC
|
|
[16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // GC Ep3 NTE
|
|
[16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // GC Ep3
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // Xbox
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // BB
|
|
],
|
|
"ClientCustomizationLobbySearchOrder": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
|
|
|
|
// Lobby holiday events. The event can be changed in each lobby independently with the $event command, or in all
|
|
// lobbies with the $allevent command. When a game is created, it inherits the holiday event from the lobby from
|
|
// which it was created.
|
|
// The values in this list can be strings like "xmas" (the names used here are the same as for the $event command),
|
|
// or an integer. There are always 20 lobbies; if a player can't be added to any public lobby, they are added to a
|
|
// dynamically-created private overflow lobby instead, which uses the event specified in MenuEvent below.
|
|
// The events are: "none", "xmas", "val", "easter", "hallo", "sonic", "newyear", "summer", "white", "wedding",
|
|
// "fall", "s-spring", "s-summer", and "spring".
|
|
"LobbyEvents": [
|
|
"none", // Lobby 1
|
|
"none", // Lobby 2
|
|
"none", // Lobby 3
|
|
"none", // Lobby 4
|
|
"none", // Lobby 5
|
|
"none", // Lobby 6
|
|
"none", // Lobby 7
|
|
"none", // Lobby 8
|
|
"none", // Lobby 9
|
|
"none", // Lobby 10 (or Lobby 0 on early versions)
|
|
"none", // Lobby 11 (DCv2 and later only)
|
|
"none", // Lobby 12 (DCv2 and later only)
|
|
"none", // Lobby 13 (DCv2 and later only)
|
|
"none", // Lobby 14 (DCv2 and later only)
|
|
"none", // Lobby 15 (DCv2 and later only)
|
|
"none", // Lobby C1 (Episode 3 only)
|
|
"none", // Lobby C2 (Episode 3 only)
|
|
"none", // Lobby C3 (Episode 3 only)
|
|
"none", // Lobby C4 (Episode 3 only)
|
|
"none", // Lobby C5 (Episode 3 only)
|
|
],
|
|
// Menu event. This is the holiday event the player sees at the main menu.
|
|
"MenuEvent": "none",
|
|
|
|
// Episode 3 menu song. If set, Episode 3 clients will hear this song when they are at the newserv main menu. Values:
|
|
// 0: "Let the winds blow - Theme of PSO Episode3 -"
|
|
// 1: "Gate"
|
|
// 2: "Tune"
|
|
// 3: "Code"
|
|
// 4: "NEW LIFES"
|
|
// 5: "RIDE ON"
|
|
// 6: "ADVICES"
|
|
// 7: "Morgue PART1"
|
|
// 8: "Unguis lapis"
|
|
// 9: "Via Tubus "
|
|
// 10: "Tower of Caelum"
|
|
// 11: "Mortis Fons"
|
|
// 12: "Lupus Silva PART1 from Mother earth of dishonesty"
|
|
// 13: "Lupus Silva PART2 from Mother earth of dishonesty"
|
|
// 14: "Molae Venti "
|
|
// 15: "Tener Sinus"
|
|
// 16: "The whole new world - PSO OPENING THEME -"
|
|
// 17: "World with me - PSO EP2 ENDING THEME -"
|
|
// 18: "Can still see the light - PSO ENDING THEME -"
|
|
// 19: "Day dawns"
|
|
// 20: "Nebula Montana PART1 from Jungle -A forest cage-"
|
|
// 21: "Nebula Montana PART2 from Jungle -A forest cage-"
|
|
// 22: "Morgue PART2"
|
|
// 23: "Dolor Odor"
|
|
// 24: "Ravum Aedes Sacra"
|
|
// 25: "IDOLA the strange fruits"
|
|
// 26: "Cyber"
|
|
// 27: "Special Relaxies"
|
|
// 28: "Let the winds blow -Remix Version-"
|
|
// 29: "Leavin flow"
|
|
// 30: "Rose Confession"
|
|
// 31: "Day light"
|
|
// 32: "Versus1 -Tricktrack-"
|
|
// 33: "Versus2 -A longing to ancient times-"
|
|
// 34: "Burning Hearts - Burning Ranger -"
|
|
// 35: "Wedding March - SAMBA de AMIGO -"
|
|
// 36: "VAMOS A CARNAVAL - SAMBA de AMIGO -"
|
|
// 37: "dreams dreams - Nights -"
|
|
// 38: "dreams dreams (kids ver) - Nights -"
|
|
// 39: "CHANT THIS CHARM - BILLY HATCHER -"
|
|
// 40: "Let Mom Sleep - Jet Grind Radio -"
|
|
// 41: "THE CONCEPT OF LOVE - Jet Grind Radio Future -"
|
|
// 42: "Where is smiley? - NEW ROOMMANIA -"
|
|
// 43: "Buggie Running Beeps 01 - Rez -"
|
|
// 44: "Skies of Arcadia Opening Theme - Skies of Arcadia -"
|
|
// 45: "Shinobi :boutan - Shinobi -"
|
|
// 46: "Tsuioku - Panzer Dragoon ZWEI -"
|
|
// 47: "Sona mi areru ec sancitu - AZEL Panzer Dragoon RPG -"
|
|
// 48: "ANU ORTA VENIYA - Panzer Dragoon ORTA -"
|
|
// 49: "LET'S GO AWAY - DAYTONA 53! -"
|
|
// 50: "MAIN THEME-SPACE HARRIER - SPACE HARRIER -"
|
|
// 51: "OPA-OPA! - Fantasy Zone -"
|
|
// "Episode3MenuSong": 0,
|
|
|
|
// If this is enabled, all players will have infinite Meseta, effectively making the jukebox and Pinz's Shop free.
|
|
// Otherwise, Meseta behaves as defined below. Meseta rewards are tied to a player's account and are stored
|
|
// server-side. Unlike other servers, newserv forbids overdrafting Meseta; if this option is disabled and a player
|
|
// spends Meseta they don't have, the player is disconnected.
|
|
"Episode3InfiniteMeseta": false,
|
|
// Meseta values for winning each tournament round. If a player defeats another player in round 1, for example, they
|
|
// will earn 400 Meseta; if they then defeat a COM in round 2, they will earn 200 more Meseta; if they defeat another
|
|
// player in round 3, they will earn an additional 600.
|
|
"Episode3DefeatPlayerMeseta": [400, 500, 600, 700, 800],
|
|
"Episode3DefeatCOMMeseta": [100, 200, 300, 400, 500],
|
|
// Winning the final round is worth this much extra Meseta.
|
|
"Episode3FinalRoundMesetaBonus": 300,
|
|
// If this option is enabled, the jukebox in Episode 3 lobbies does not deduct any Meseta when a song is played. The
|
|
// check for 100 or more meseta happens client-side, however, so even if this option is enabled, the client must
|
|
// either have 100 or more Meseta or use the "Jukebox is free" Action Replay code to be able to play songs. (In the
|
|
// Git repository, the code is in notes/ar-codes.txt.)
|
|
"Episode3JukeboxIsFree": false,
|
|
|
|
// Episode 3 battle behavior flags. When set to zero, battles behave as they did on the original Sega servers.
|
|
// Combinations of behaviors can be enabled by bitwise-OR'ing together the following values:
|
|
// 0x0001 => Disable deck verification entirely
|
|
// 0x0002 => Disable owned card count check during deck verification (this enables the use of the non-saveable Have
|
|
// All Cards Action Replay code, but retains all the other validity checks)
|
|
// 0x0004 => Allow cards with the D1 and D2 ranks to be used in battle
|
|
// 0x0008 => Disable overall and per-phase battle time limits, regardless of the values chosen during battle setup
|
|
// 0x0010 => Enable debug messages in Episode 3 games and battles
|
|
// 0x0040 => Enable recording (after battle, players can save the recording with the $saverec <filename> command)
|
|
// 0x0080 => Disable command masking during battles
|
|
// 0x0100 => Disable interference (COMs randomly coming to each other's rescue)
|
|
// 0x0200 => Allow interference even when neither player is a COM
|
|
"Episode3BehaviorFlags": 0x0042,
|
|
|
|
// Trap assist cards for each trap type in Episode 3 battles. These are the default values used offline, but you can
|
|
// change the trap types online here. Only assist cards may be used as trap cards.
|
|
"Episode3TrapCards": [
|
|
["Dice Fever", "Heavy Fog", "Muscular", "Immortality", "Snail Pace"], // Red
|
|
["Gold Rush", "Charity", "Requiem"], // Blue
|
|
["Powerless Rain", "Trash 1", "Empty Hand", "Skip Draw"], // Purple
|
|
["Brave Wind", "Homesick", "Fly"], // Green
|
|
["Dice+1", "Battle Royale", "Reverse Card", "Giant Garden", "Fix"], // Yellow
|
|
],
|
|
|
|
// Episode 3 EX result values. This allows you to set the amount of EX players will get for winning or losing online
|
|
// matches. Each set of numbers is a list of thresholds; the first number in each pair is the level difference
|
|
// threshold and the second is the amount of EX. The game scans each list for the entry whose threshold value is less
|
|
// than or equal to the level difference. For example, if player A's CLv is 70 and player B's CLv is 55, and the
|
|
// lists are set up like this:
|
|
// "Win": [[30, 40], [20, 30], [10, 20], ...],
|
|
// "Lose": [[0, 0], [-10, -5], [-20, -10], ...],
|
|
// ...then player A would get 20 EX for defeating player B (since the difference between their CLvs is 15, so the
|
|
// first two Win entries don't apply), and player B would lose 10 EX for losing to player A (again, since the first
|
|
// two Lose entries don't apply). If none of the thresholds apply, then the last entry's value is used regardless of
|
|
// its threshold. All lists here must contain 10 [threshold, value] pairs.
|
|
"Episode3EXResultValues": {
|
|
"Default": {
|
|
"Win": [[50, 100], [30, 80], [15, 70], [10, 55], [7, 45], [4, 35], [1, 25], [-1, 20], [-9, 15], [0, 10]],
|
|
"Lose": [[1, 0], [-2, 0], [-3, 0], [-4, 0], [-5, 0], [-6, 0], [-7, 0], [-10, -10], [-30, -10], [0, -15]],
|
|
},
|
|
"Tournament": {
|
|
"Win": [[60, 70], [40, 50], [25, 45], [20, 40], [13, 35], [8, 30], [5, 25], [2, 20], [-1, 15], [0, 10]],
|
|
"Lose": [[1, 0], [-1, 0], [-3, 0], [-5, 0], [-7, 0], [-10, 0], [-12, 0], [-15, 0], [-18, 0], [0, 0]],
|
|
},
|
|
"TournamentFinalMatch": {
|
|
"Win": [[40, 100], [25, 95], [20, 85], [15, 75], [10, 65], [8, 60], [5, 50], [2, 40], [-1, 30], [0, 20]],
|
|
"Lose": [[1, -5], [-1, -10], [-3, -15], [-7, -20], [-15, -20], [-20, -25], [-30, -30], [-40, -30], [-50, -34], [0, -40]],
|
|
},
|
|
},
|
|
|
|
// Episode 3 card auction configuration. CardAuctionPoints specifies how many points each player gets when they join
|
|
// an auction (this may be anywhere from 0 to 65535, but a somewhat-low number is generally good). CardAuctionSize
|
|
// specifies how many cards will be present in each auction; this can be an integer if auctions should always have
|
|
// the same number of cards, or it can be a list of [min count, max count] and the server will choose a random number
|
|
// of cards in that range for each auction. CardAuctionPool is a dictionary specifying the relative frequencies and
|
|
// costs of each card in the auction pool. Relative frequencies are 64-bit integers, but should generally be less
|
|
// than 0x0100000000000000 to avoid excessive bias. All relative frequencies must sum to a number less than
|
|
// 0x10000000000000000 (the limit of an unsigned 64-bit integer). When players enter an auction, the auctioned cards
|
|
// are drawn with replacement from the distribution specified here.
|
|
"CardAuctionPoints": 30,
|
|
"CardAuctionSize": [6, 8],
|
|
"CardAuctionPool": {
|
|
// "CardName": [RelativeFrequency, MinPrice]
|
|
"Beat +": [500, 4],
|
|
"Berserk +": [800, 7],
|
|
"Biboo": [500, 6],
|
|
"Chaos Bringer": [900, 3],
|
|
"Charity +": [800, 4],
|
|
"Counter +": [800, 9],
|
|
"Dark Flow": [600, 11],
|
|
"Dolmolm": [500, 8],
|
|
"Egg Rappy": [800, 2],
|
|
"Epsilon": [300, 7],
|
|
"Gather +": [800, 8],
|
|
"Gibbles +": [700, 6],
|
|
"Grants": [200, 4],
|
|
"Hallo Rappy +": [800, 3],
|
|
"Heart Of Poumn": [600, 5],
|
|
"Heaven Punisher": [500, 6],
|
|
"Lavis Cannon": [400, 7],
|
|
"Piety": [800, 5],
|
|
"Rag Rappy +": [800, 2],
|
|
"Rich +": [700, 2],
|
|
"Snail Pace": [900, 3],
|
|
"Striker of Chao": [500, 5],
|
|
"Thread +": [800, 8],
|
|
},
|
|
|
|
// Episode 3 lobby banners. Currently only images are supported. Image files are expected to be in .bmp, .ppm, .gvm,
|
|
// or .gvm.prs format, and should be placed in the system/ep3/banners directory. Images are subject to a lot of
|
|
// restrictions due to GC hardware limitations:
|
|
// - The image must be square.
|
|
// - The image dimensions must be a power of 2 (e.g. 128x128 or 256x256).
|
|
// - The image data must be no larger than 0x37000 bytes when encoded as a GVM file (newserv will do this encoding
|
|
// internally if it's not a .gvm or .gvm.prs file already).
|
|
// - The GVM file must compress to no larger than 0x3800 bytes.
|
|
// Banners are specified as lists of [type, where, filename]. type should be 1 for image files. where is a bit field
|
|
// specifying where in the lobby the banner should appear; the bits are:
|
|
// 00000001: South above-counter banner (facing away from teleporters)
|
|
// 00000002: West above-counter banner
|
|
// 00000004: North above-counter banner (facing toward jukebox)
|
|
// 00000008: East above-counter banner
|
|
// 00000010: Banner above west (left) teleporter
|
|
// 00000020: Banner above east (right) teleporter
|
|
// 00000040: Banner at south end of lobby (opposite the jukebox)
|
|
// 00000080: Immediately left of 00000040
|
|
// 00000100: Immediately right of 00000040
|
|
// 00000200: Same as 00000080, but further left and at a slight inward angle
|
|
// 00000400: Same as 00000100, but further right and at a slight inward angle
|
|
// 00000800: Banner at north end of lobby, above the jukebox
|
|
// 00001000: Immediately right of 00000800
|
|
// 00002000: Immediately left of 00000800
|
|
// 00004000: Same as 00001000, but further right and at a slight inward angle
|
|
// 00008000: Same as 00002000, but further left and at a slight inward angle
|
|
// 00010000: Banners at west AND east ends of lobby, next to battle tables
|
|
// 00020000: Immediately left of 00010000 (2 banners)
|
|
// 00040000: Immediately right of 00010000 (2 banners)
|
|
// 00080000: Banners on southwest AND southeast ends of the lobby
|
|
// 00100000: Banners on south-southwest AND south-southeast ends of the lobby
|
|
// 00200000: Floor banners in front of the counter (4 banners)
|
|
// 00400000: Banners on both small walls in front of the battle tables
|
|
// 00800000: On southern platform
|
|
// 01000000: In front of jukebox
|
|
// 02000000: In western battle table corner (next to 4-player tables)
|
|
// 04000000: In eastern battle table corner (next to 2-player tables)
|
|
// 08000000: In southeastern battle table corner (next to 2-player tables)
|
|
// 10000000: In southwestern battle table corner (next to 4-player tables)
|
|
// 20000000: Just north-northwest of the counter
|
|
// 40000000: In front of the small wall in front of the 2-player battle tables
|
|
// 80000000: Inside the lobby counter, facing southeast
|
|
// For example, to make the image system/ep3/banners/test-image.bmp appear in the lobby above both the left and right
|
|
// teleporters, you would set Episode3LobbyBanners like so:
|
|
// "Episode3LobbyBanners": [
|
|
// [1, 0x00000030, "test-image.bmp"],
|
|
// ],
|
|
"Episode3LobbyBanners": [],
|
|
|
|
// Quest category configuration. See README.md for information on how quest files should be named. This list
|
|
// specifies the quest category names and descriptions. (We don't use a map here because the category order specified
|
|
// here is the order that appears in the quest menu.)
|
|
"QuestCategories": [
|
|
// Each entry is [flags, directory_name, category_name, description]. These fields are:
|
|
// flags: a bit field containing the following bits:
|
|
// 0x001 - appears in normal mode
|
|
// 0x002 - appears in battle mode
|
|
// 0x004 - appears in challenge mode
|
|
// 0x008 - appears in solo mode (BB)
|
|
// 0x010 - appears at government counter (BB)
|
|
// 0x020 - appears in download quest menu
|
|
// 0x080 - hide quests that don't match the game's episode
|
|
// 0x100 - is Episode 2 Challenge category
|
|
// directory_name: the directory inside system/quests that contains quests for this category.
|
|
// category_name: what appears in the quest menu on the client.
|
|
// description: what appears in the category description window (may contain color escape codes like $C6).
|
|
[0x000, "hidden", "Hidden", "$E$C6Quests that do not\nappear in any menu"],
|
|
[0x081, "government-console-ep1", "Hero in Red", "$E$CG-Red Ring Rico-\n$C6Quests that follow\nthe Episode 1\nstoryline"],
|
|
[0x081, "government-console-ep2", "The Military's Hero", "$E$CG-Heathcliff Flowen-\n$C6Quests that follow\nthe Episode 2\nstoryline"],
|
|
[0x081, "retrieval", "Retrieval", "$E$C6Quests that involve\nretrieving an object"],
|
|
[0x081, "extermination", "Extermination", "$E$C6Quests that involve\ndestroying all\nmonsters"],
|
|
[0x081, "events", "Events", "$E$C6Quests that are part\nof an event"],
|
|
[0x081, "shops", "Shops", "$E$C6Quests that contain\nshops"],
|
|
[0x081, "vr", "Virtual Reality", "$E$C6Quests that are\ndone in a simulator"],
|
|
[0x081, "tower", "Control Tower", "$E$C6Quests that take\nplace at the Control\nTower"],
|
|
[0x081, "team", "Team", "$E$C6Quests for you\nand your team\nmembers."],
|
|
[0x002, "battle", "Battle", "$E$C6Battle mode rule\nsets"],
|
|
[0x004, "challenge-ep1", "Challenge (Episode 1)", "$E$C6Challenge mode\nquests in Episode 1"],
|
|
[0x004, "challenge-solo-ep1", "Solo Challenge (Episode 1)", "$E$C6Challenge mode\nquests in Episode 1\nthat you can solo"],
|
|
[0x104, "challenge-ep2", "Challenge (Episode 2)", "$E$C6Challenge mode\nquests in Episode 2"],
|
|
[0x104, "challenge-solo-ep2", "Solo Challenge (Episode 2)", "$E$C6Challenge mode\nquests in Episode 2\nthat you can solo"],
|
|
[0x088, "solo-story", "Story", "$E$C6Quests that follow\nthe story"],
|
|
[0x088, "solo-extra", "Solo", "$E$C6Quests that require\na single player"],
|
|
[0x010, "government-ep1", "Hero in Red", "$E$CG-Red Ring Rico-\n$C6Quests that follow\nthe Episode 1\nstoryline"],
|
|
[0x010, "government-ep2", "The Military's Hero", "$E$CG-Heathcliff Flowen-\n$C6Quests that follow\nthe Episode 2\nstoryline"],
|
|
[0x010, "government-ep4", "The Meteor Impact Incident", "$E$C6Quests that follow\nthe Episode 4\nstoryline"],
|
|
[0x020, "download", "Download", "$E$C6Quests to download\nto your Memory Card"],
|
|
],
|
|
|
|
// BB bank size. If you change either of these values, you must also add "BankSize" to BBRequiredPatches, and change
|
|
// the patch contents in system/client-functions/BlueBurstExclusive/BankSize.5___.patch.s to reflect the counts here.
|
|
"BBMaxBankItems": 200,
|
|
"BBMaxBankMeseta": 999999,
|
|
|
|
// Item stack limits. Note that changing these does not affect the client's behavior automatically - this only exists
|
|
// to allow the server to understand the behavior of clients that are already patched with different stack limits.
|
|
// If you want to use an unpatched BB client but still have custom stack limits, you can use the StackLimits runtime
|
|
// patch by editing system/client-functions/BlueBurstExclusive/StackLimits.5___.patch.s to match the BB stack limits
|
|
// and adding "StackLimits" to the BBRequiredPatches list.
|
|
// It's important that all players in the same game have the same stack limits, both on the client and server! So, if
|
|
// you change the BB stack limits, you must either prevent BB from playing with other versions (see
|
|
// CompatibilityGroups) or write an analogous patch for all other versions and add it to AutoPatches.
|
|
// The ToolLimits list is indexed by data1[1] (that is, the second byte of the item data); for items beyond the end
|
|
// of the list, the last entry's value is used.
|
|
"ItemStackLimits": [
|
|
{"MesetaLimit": 999999, "ToolLimits": [10]}, // DC NTE
|
|
{"MesetaLimit": 999999, "ToolLimits": [10]}, // DC 11/2000
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1]}, // DC V1
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1]}, // DC V2
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1]}, // PC NTE
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1]}, // PC
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // GC NTE
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // GC
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // GC Ep3 NTE
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // GC Ep3
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // XB
|
|
{"MesetaLimit": 999999, "ToolLimits": [10, 10, 1, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 99, 1]}, // BB
|
|
],
|
|
|
|
// Quest result item definitions for opcode F95E (used in Black Paper's Dangerous Deal 1 and 2). This list is indexed
|
|
// as [reward_type][difficulty]. Reward types 0, 1, 2, and 4 are used by vanilla PSOBB; other reward types can be
|
|
// specified when using the F95E quest opcode in custom quests. Rewards are chosen uniformly at random from the list
|
|
// corresponding to the reward location and difficulty level. All items in these lists must be hex item codes (1-16
|
|
// bytes); textual descriptions are not supported here.
|
|
"QuestF95EResultItems": [
|
|
[
|
|
// Black Paper's Deal Dorphon route
|
|
[
|
|
// Normal
|
|
0x00900000, // DB'S SABER 3062
|
|
0x00900200, // DB'S SABER 3069 Chris
|
|
0x00900800, // DB'S SABER 3077
|
|
0x01014E00, // OFFICER UNIFORM
|
|
0x01030700, // God/Mind
|
|
0x01034100, // God/Battle
|
|
0x03030000, // Sol Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x03180700, // Rappy's Beak
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Hard
|
|
0x00010500, // DB'S SABER (Ephinea)
|
|
0x00010600, // KALADBOLG (Ephinea)
|
|
0x002C0000, // ELYSION
|
|
0x00340000, // RED SWORD
|
|
0x00900000, // DB'S SABER 3062
|
|
0x00900100, // DB'S SABER 3067
|
|
0x00900200, // DB'S SABER 3069 Chris (Ephinea)
|
|
0x00900300, // DB'S SABER 3064
|
|
0x00900400, // DB'S SABER 3069 Torato
|
|
0x00900500, // DB'S SABER 3073
|
|
0x00900600, // DB'S SABER 3070
|
|
0x00900700, // DB'S SABER 3075
|
|
0x00900800, // DB'S SABER 3077 (Ephinea)
|
|
0x00B90000, // FLAMBERGE
|
|
0x01023500, // SECURE FEET
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Very Hard
|
|
0x00010700, // DURANDAL
|
|
0x00100100, // AGITO 1975 (real)
|
|
0x00100200, // AGITO 1983
|
|
0x00100300, // AGITO 2001
|
|
0x00100400, // AGITO 1991
|
|
0x00100500, // AGITO 1977
|
|
0x00100600, // AGITO 1980
|
|
0x00270000, // ANCIENT SABER
|
|
0x008A0100, // YASHA
|
|
0x00B60000, // GUREN
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Ultimate
|
|
0x00100100, // AGITO 1975 (real)
|
|
0x00100200, // AGITO 1983
|
|
0x00100300, // AGITO 2001
|
|
0x00100400, // AGITO 1991
|
|
0x00100500, // AGITO 1977
|
|
0x00100600, // AGITO 1980
|
|
0x00290000, // YAMIGARASU
|
|
0x008A0000, // SANGE
|
|
0x008A0200, // KAMUI
|
|
0x00B70000, // SHOUREN
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x04000000, // Meseta
|
|
],
|
|
], [
|
|
// Black Paper's Deal Rappy route
|
|
[
|
|
// Normal
|
|
0x01013400, // SMOKING PLATE
|
|
0x01022800, // TRIPOLIC SHIELD
|
|
0x01028B00, // BUNNY EARS
|
|
0x01030300, // God/Power
|
|
0x01030B00, // God/Arm
|
|
0x01032300, // Resist/Burning
|
|
0x01032600, // Resist/Blizzard
|
|
0x01032900, // Resist/Storm (Ephinea)
|
|
0x01032C00, // Resist/Holy
|
|
0x01032F00, // Resist/Devil (Ephinea)
|
|
0x03180700, // Rappy's Beak
|
|
0x04000000, // Meseta
|
|
|
|
], [
|
|
// Hard
|
|
0x01014000, // RED COAT
|
|
0x01021500, // INVISIBLE GUARD
|
|
0x01028A00, // YATA MIRROR
|
|
0x01028C00, // CAT EARS
|
|
0x01034200, // Cure/Poison
|
|
0x01034300, // Cure/Paralysis
|
|
0x01034400, // Cure/Slow
|
|
0x01034500, // Cure/Confuse
|
|
0x01034600, // Cure/Freeze
|
|
0x01034700, // Cure/Shock
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x03180700, // Rappy's Beak
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Very Hard
|
|
0x000A0400, // CLUB OF LACONIUM (Ephinea)
|
|
0x000A0600, // CLUB OF ZUMIURAN
|
|
0x000B0600, // ALIVE AQHU
|
|
0x00230000, // STING TIP
|
|
0x003A0000, // MADAM'S PARASOL
|
|
0x003B0000, // MADAM'S UMBRELLA
|
|
0x00500000, // WINDMILL
|
|
0x00550000, // RABBIT WAND
|
|
0x00CB0000, // TYRELL'S PARASOL
|
|
0x01022B00, // KASAMI BRACER
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030E0A00, // Book of HITOGATA (Ephinea)
|
|
0x03180700, // Rappy's Beak
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Ultimate
|
|
0x000A0500, // MACE OF ADAMAN
|
|
0x000A0600, // CLUB OF ZUMIURAN
|
|
0x000B0400, // BATTLE VERGE
|
|
0x00230000, // STING TIP (Ephinea)
|
|
0x00250000, // TECHNICAL CROZIER
|
|
0x003B0000, // MADAM'S UMBRELLA
|
|
0x00500000, // WINDMILL
|
|
0x00510000, // EVIL CURST
|
|
0x00560000, // PLANTAIN LEAF
|
|
0x01022900, // STANDSTILL SHIELD
|
|
0x01032000, // God/Ability
|
|
0x01033E00, // God/Technique
|
|
0x01035200, // DIVINE PROTECTION
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x03180700, // Rappy's Beak
|
|
0x04000000, // Meseta
|
|
],
|
|
], [
|
|
// Black Paper's Deal Zu route
|
|
[
|
|
// Normal
|
|
0x000E0100, // STAG CUTLERY
|
|
0x000E0200, // TWIN BRAND
|
|
0x002E0000, // METEOR CUDGEL
|
|
0x002F0000, // MONKEY KING BAR
|
|
0x005E0000, // TWIN BLAZE
|
|
0x00950000, // PARTISAN of LIGHTNING
|
|
0x009A0000, // DEMOLITION COMET
|
|
0x00B30000, // VIVIENNE
|
|
0x01013200, // ELECTRO FRAME
|
|
0x01031B00, // God/Body
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot (Ephinea)
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Hard
|
|
0x00090700, // FINAL IMPACT
|
|
0x00150000, // FLAME VISIT
|
|
0x004E0000, // PANZER FAUST
|
|
0x006D0000, // MASER BEAM
|
|
0x008B0000, // PHOTON LAUNCHER
|
|
0x008B0200, // RED SCORPIR
|
|
0x008D0000, // NUG2000-BAZOOKA
|
|
0x00C00000, // CANNON ROUGE
|
|
0x00D20000, // ANO BAZOOKA
|
|
0x01012E00, // FLAME GARMENT
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Very Hard
|
|
0x00050500, // SLICER OF ASSASSIN
|
|
0x00050600, // DISKA OF LIBERATOR
|
|
0x00050700, // DISKA OF BRAVEMAN
|
|
0x003F0000, // FLIGHT CUTTER
|
|
0x00400000, // FLIGHT FAN
|
|
0x00410000, // RED SLICER
|
|
0x00AA0000, // SLICER OF FANATIC
|
|
0x01014100, // THIRTEEN
|
|
0x01015100, // INFANTRY GEAR
|
|
0x01022300, // REGENE GEAR ADV.
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot (Ephinea)
|
|
0x04000000, // Meseta
|
|
], [
|
|
// Ultimate
|
|
0x00120000, // SPREAD NEEDLE
|
|
0x00130000, // HOLY RAY
|
|
0x00430000, // HANDGUN:MILLA
|
|
0x00450000, // FROZEN SHOOTER
|
|
0x00650000, // YASMINKOV 3000R
|
|
0x006B0000, // YASMINKOV 7000V
|
|
0x006C0000, // YASMINKOV 9000M
|
|
0x00990000, // ANGEL HARP
|
|
0x00AF0000, // OPHELIE SEIZE
|
|
0x00CD0000, // TANEGASHIMA
|
|
0x01035100, // SMARTLINK
|
|
0x03030000, // Sol Atomizer
|
|
0x03040000, // Moon Atomizer
|
|
0x03050000, // Star Atomizer
|
|
0x030F0000, // AddSlot
|
|
0x04000000, // Meseta
|
|
],
|
|
], [], [
|
|
// Black Paper's Dangerous Deal 2
|
|
[
|
|
// Normal
|
|
0x00070800, // RIANOV 303SNR
|
|
0x000D0300, // PHOENIX CLAW
|
|
0x00420100, // MASTER RAVEN (Ephinea)
|
|
0x00430100, // LAST SWAN
|
|
0x00BA0000, // YUNCHANG
|
|
0x00C90000, // DECALOG
|
|
0x01034800, // YASAKANI MAGATAMA
|
|
0x01035100, // SMARTLINK
|
|
0x03100000, // Photon Drop
|
|
], [
|
|
// Hard
|
|
0x00070800, // RIANOV 303SNR
|
|
0x000D0300, // PHOENIX CLAW
|
|
0x00420100, // MASTER RAVEN
|
|
0x00B40000, // KUSANAGI
|
|
0x00B70000, // SHOUREN
|
|
0x00BA0000, // YUNCHANG
|
|
0x00BB0000, // SNAKE SPIRE
|
|
0x00BC0000, // FLAPJACK FLAPPER
|
|
0x00C90000, // DECALOG
|
|
0x01013600, // BLACK HOUND CUIRASS
|
|
0x01028A00, // YATA MIRROR
|
|
0x01029900, // STINK SHIELD
|
|
0x01035100, // SMARTLINK
|
|
0x01035200, // DIVINE PROTECTION
|
|
0x01035B00, // Centurion/Ability
|
|
0x03100000, // Photon Drop
|
|
], [
|
|
// Very Hard
|
|
0x00070800, // RIANOV 303SNR
|
|
0x000D0300, // PHOENIX CLAW
|
|
0x00430100, // LAST SWAN
|
|
0x00B30000, // VIVIENNE
|
|
0x00B40000, // KUSANAGI
|
|
0x00B40000, // KUSANAGI
|
|
0x00B60000, // GUREN
|
|
0x00BA0000, // YUNCHANG (Ephinea)
|
|
0x00C90000, // DECALOG
|
|
0x01013600, // BLACK HOUND CUIRASS
|
|
0x01028500, // GRATIA
|
|
0x01028A00, // YATA MIRROR
|
|
0x01029900, // STINK SHIELD
|
|
0x01034800, // YASAKANI MAGATAMA
|
|
0x01035100, // SMARTLINK
|
|
0x01035200, // DIVINE PROTECTION
|
|
0x01035B00, // Centurion/Ability
|
|
0x03100000, // Photon Drop
|
|
], [
|
|
// Ultimate
|
|
0x00070800, // RIANOV 303SNR
|
|
0x000D0300, // PHOENIX CLAW
|
|
0x00430100, // LAST SWAN
|
|
0x00B30000, // VIVIENNE
|
|
0x00B40000, // KUSANAGI
|
|
0x00B60000, // GUREN
|
|
0x00B70000, // SHOUREN
|
|
0x00C90000, // DECALOG
|
|
0x01013600, // BLACK HOUND CUIRASS
|
|
0x01028500, // GRATIA
|
|
0x01028A00, // YATA MIRROR
|
|
0x01029900, // STINK SHIELD
|
|
0x01034800, // YASAKANI MAGATAMA
|
|
0x01035100, // SMARTLINK
|
|
0x01035200, // DIVINE PROTECTION
|
|
0x01035B00, // Centurion/Ability
|
|
0x03100000, // Photon Drop
|
|
],
|
|
],
|
|
],
|
|
// Results for quest opcode F95F (used in Gallon's Plan). This list is indexed by type (which is the third argument
|
|
// to the opcode). The entries here are [num_photon_tickets, item_hex].
|
|
"QuestF95FResultItems": [
|
|
[0, 0x00010000], // Unused
|
|
[10, 0x00D50000],
|
|
[15, 0x000A0700],
|
|
[20, 0x01015700],
|
|
],
|
|
|
|
// Result items for Coren (quest opcodes F960/F961). Indexed by prize_tier. When a prize is requested, the server
|
|
// chooses a random number and checks it against the tier's probability. If the check passes, one of the items for
|
|
// the current weekday is chosen uniformly at random and given to the player. If the check fails, the next lower tier
|
|
// is checked in a similar manner, but uses BaseProbability + ProbabilityUpgrade. If that check fails, the next lower
|
|
// tier is checked, with 2x ProbabilityUpgrade, and so on. If no tiers produce an item, one of the
|
|
// QuestF960FailureResultItems is given.
|
|
"QuestF960SuccessResultItems": [
|
|
{
|
|
"MesetaCost": 1000,
|
|
"BaseProbability": 0x0A3D70A3, // 4%
|
|
"ProbabilityUpgrade": 0x0A3D70A3, // 4%
|
|
"Sunday": [0x01030300, 0x01034200, 0x01034300, 0x01034400, 0x01034500, 0x01034600, 0x01034700, 0x03180000],
|
|
"Monday": [0x01028D00, 0x01030700, 0x01030B00, 0x01031F00, 0x01033500, 0x01033B00, 0x01034000, 0x01034400],
|
|
"Tuesday": [0x01031300, 0x01031B00, 0x01033B00, 0x01034200, 0x01034300, 0x01034600],
|
|
"Wednesday": [0x01030F00, 0x01031F00, 0x01033800, 0x01034000, 0x01034400, 0x03180000],
|
|
"Thursday": [0x01031700, 0x01031F00, 0x01033500, 0x01033E00, 0x01034700],
|
|
"Friday": [0x01031D00, 0x01033800, 0x01033B00, 0x01034000, 0x01034300, 0x01034400, 0x01034700, 0x03180000],
|
|
"Saturday": [0x01028D00, 0x01031F00, 0x01032000, 0x01033500, 0x01033B00, 0x01034200, 0x01034300, 0x01034600],
|
|
}, {
|
|
"MesetaCost": 10000,
|
|
"BaseProbability": 0x0A3D70A3, // 4%
|
|
"ProbabilityUpgrade": 0x0A3D70A3, // 4%
|
|
"Sunday": [0x00010600, 0x00010700, 0x00080500, 0x00080600, 0x00080700, 0x000D0000, 0x000D0100, 0x00100700, 0x00490000, 0x00010500, 0x01013700, 0x01034500, 0x01034400, 0x01034300, 0x01034600, 0x01034200, 0x03100200, 0x03180200, 0x03180700, 0x030B0000],
|
|
"Monday": [0x00020500, 0x00020600, 0x00020700, 0x00070800, 0x00080600, 0x000E0000, 0x00090500, 0x00090600, 0x00090700, 0x00560000, 0x00560100, 0x00010500, 0x01022600, 0x01034000, 0x01031F00],
|
|
"Tuesday": [0x00030600, 0x006D0000, 0x01022200, 0x01027B00, 0x03100200, 0x03180200, 0x03180700],
|
|
"Wednesday": [0x00040600, 0x00890000, 0x00890100, 0x00070800, 0x000B0400, 0x000B0500, 0x000B0600, 0x01021600, 0x01021800, 0x01021900, 0x01021E00, 0x01033800, 0x01031F00, 0x01030F00, 0x03100200, 0x03180700],
|
|
"Thursday": [0x00100700, 0x00050500, 0x00050600, 0x00050700, 0x00060500, 0x000B0400, 0x000C0400, 0x000C0500, 0x000C0600, 0x00200000, 0x008B0000, 0x01013700, 0x01014000, 0x01015300, 0x01022200, 0x01033500, 0x01034600, 0x030F0000, 0x03100200, 0x03180200, 0x030B0300, 0x030B0600],
|
|
"Friday": [0x00060500, 0x00060600, 0x00060700, 0x00070500, 0x00070800, 0x00080500, 0x000A0400, 0x00220000, 0x00230000, 0x00560100, 0x008C0000, 0x008C0100, 0x00490000, 0x01013100, 0x01013200, 0x01013300, 0x01013400, 0x01014000, 0x01033800, 0x01034700, 0x01034400, 0x01031D00, 0x03100200, 0x03180200, 0x030B0400],
|
|
"Saturday": [0x000E0000, 0x00260000, 0x00070600, 0x00070700, 0x00070800, 0x00270000, 0x01012700, 0x01034300, 0x01033900, 0x01033B00, 0x030B0000],
|
|
}, {
|
|
"MesetaCost": 100000,
|
|
"BaseProbability": 0x0A3D70A3, // 4%
|
|
"ProbabilityUpgrade": 0x0A3D70A3, // 4%
|
|
"Sunday": [0x00010500, 0x00270000, 0x002C0000, 0x00030500, 0x00030800, 0x00040800, 0x00100700, 0x000E0100, 0x000D0100, 0x000D0000, 0x00B60000, 0x00080600, 0x00080500, 0x00130000, 0x008B0100, 0x008B0200, 0x000A0400, 0x00930200, 0x00930900, 0x01012A00, 0x01021700, 0x01013A00, 0x01022B00, 0x01022900, 0x01023500, 0x01034900, 0x01034700, 0x01034300, 0x01034600, 0x01033200, 0x030F0000, 0x03100200],
|
|
"Monday": [0x00010500, 0x00010600, 0x002C0000, 0x002D0000, 0x00020700, 0x00020500, 0x00020600, 0x00340000, 0x00BA0000, 0x000E0000, 0x002E0000, 0x008A0200, 0x008A0000, 0x00080600, 0x00080700, 0x00090500, 0x00090600, 0x004E0000, 0x000C0700, 0x00920000, 0x008C0000, 0x01014C00, 0x01013800, 0x01028500, 0x01029200, 0x01022200, 0x01028800, 0x01034A00, 0x01035300, 0x01031F00, 0x01034400, 0x01030B00, 0x03100200, 0x030B0600],
|
|
"Tuesday": [0x00010500, 0x00030700, 0x00030600, 0x00030500, 0x00030800, 0x00040500, 0x00040800, 0x00050700, 0x00940000, 0x000D0300, 0x00890200, 0x000F0100, 0x000F0200, 0x000F0000, 0x00080500, 0x000A0500, 0x000A0400, 0x00930200, 0x008C0000, 0x00930500, 0x01014600, 0x01014000, 0x01021F00, 0x01028B00, 0x01028C00, 0x01034B00, 0x01033B00, 0x01034300, 0x01035100, 0x03100200, 0x030B0100],
|
|
"Wednesday": [0x00970000, 0x00030600, 0x00040600, 0x00040500, 0x00110100, 0x003E0000, 0x00940000, 0x000D0300, 0x006A0000, 0x00A30000, 0x006B0000, 0x006D0000, 0x00C00000, 0x00C30000, 0x000B0400, 0x000B0500, 0x01013700, 0x01021700, 0x01021800, 0x01021E00, 0x01021600, 0x01029200, 0x030F0000],
|
|
"Thursday": [0x00B90000, 0x00200000, 0x00040700, 0x00040800, 0x00050500, 0x00050600, 0x00050700, 0x003F0000, 0x00410000, 0x009A0000, 0x00690000, 0x000D0300, 0x00A30000, 0x00120000, 0x00130000, 0x00080500, 0x00140000, 0x00C00000, 0x00C50000, 0x00680000, 0x000C0400, 0x000C0500, 0x000C0600, 0x000C0700, 0x008C0000, 0x01012A00, 0x00930600, 0x01012900, 0x01013500, 0x01012B00, 0x01029900, 0x01033400, 0x01033300, 0x01034700, 0x01031700, 0x01031F00, 0x030F0000, 0x030B0300, 0x030B0400],
|
|
"Friday": [0x002D0000, 0x00200000, 0x00030800, 0x000D0300, 0x00060500, 0x00060700, 0x00AF0000, 0x00440000, 0x00070500, 0x00080600, 0x00090500, 0x006D0100, 0x008B0100, 0x00220000, 0x000C0400, 0x005B0000, 0x01012500, 0x01013200, 0x01013100, 0x01012400, 0x01014800, 0x01013800, 0x01013A00, 0x01033B00, 0x01033800, 0x01034000],
|
|
"Saturday": [0x00010600, 0x00B40000, 0x00060500, 0x00260000, 0x00070500, 0x00070600, 0x00070700, 0x00490000, 0x004C0000, 0x00500000, 0x00230000, 0x00220000, 0x00560000, 0x00560100, 0x000C0700, 0x00930600, 0x00930700, 0x01011E00, 0x01011F00, 0x01012400, 0x01011C00, 0x01012300, 0x01011B00, 0x01011D00, 0x01029200, 0x01033B00, 0x01034600, 0x01034200, 0x01032000, 0x03100200, 0x030F0000],
|
|
},
|
|
],
|
|
"QuestF960FailureResultItems": { // Items given when all tiers failed to give a prize
|
|
"Sunday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Monday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Tuesday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Wednesday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Thursday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Friday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
"Saturday": [0x03000000, 0x03000100, 0x03000200, 0x03010000, 0x03010100, 0x03010200, 0x03030000, 0x03040000, 0x03060000, 0x03060100, 0x03070000, 0x03080000],
|
|
},
|
|
|
|
// EXP multiplier for BB games. If this is not an integer, the client will display incorrect EXP values, unless you
|
|
// also add "ServerEXPDisplay" to BBRequiredPatches.
|
|
"BBGlobalEXPMultiplier": 1,
|
|
// EXP share multiplier for BB games. The logic for EXP computation is:
|
|
// - If the player lands the killing blow on an enemy they get full EXP (or multiplied by this value, if this value
|
|
// is greater than 1).
|
|
// - If the player tags an enemy but doesn't kill it, they get full EXP multiplied by 80% (or multiplied by this
|
|
// value, if this value is greater than 0.8). This applies even if the player is on a different floor when the
|
|
// enemy dies.
|
|
// - If the player is on the same floor as an enemy when it is killed but the player never attacked it, they get full
|
|
// EXP multiplied by this value (50% by default).
|
|
// - If the player is not on the same floor as an enemy when it is killed and never tagged it, they get no EXP.
|
|
// To disable EXP share in BB games, set this to zero. EXP share is always disabled during battle and challenge
|
|
// quests (but not in free-play battle mode).
|
|
"BBEXPShareMultiplier": 0.5,
|
|
// Drop rate multiplier for all server drop tables. This applies to server drop modes in all game versions. If you
|
|
// want to scale the drop rates for only some versions, use the --multiply option to the convert-rare-item-set action
|
|
// instead.
|
|
"ServerGlobalDropRateMultiplier": 1.0,
|
|
|
|
// Client functions listed here are always enabled as auto patches for BB clients. For example, you can add
|
|
// "StackLimits" here if you've edited the StackLimits patch and the ItemStackLimits field in this file, and want the
|
|
// limits to take effect on BB clients. If a client connects using a client version that isn't compatible with one of
|
|
// these patches, the client will be disconnected.
|
|
"BBRequiredPatches": [
|
|
// You will probably want to uncomment the following line if you want to use items that were unreleased on the
|
|
// original Sega servers.
|
|
// "ClearUnreleasedItemList",
|
|
],
|
|
// Client functions listed here are automatically sent to all clients. If a client connects using a client version
|
|
// that isn't compatible with some of these patches, the incompatible patches are skipped and the client is allowed
|
|
// to connect. This option applies to all PSO versions, not only BB.
|
|
"AutoPatches": [
|
|
// "AccurateKillCount",
|
|
],
|
|
|
|
// Whether to retain server drop tables when game leaders change. The client reloads its drop tables when the leader
|
|
// joins a game or returns to Pioneer 2; this leads to some edge cases that could be confusing for players, so
|
|
// newserv instead switches its server tables instantly to the new leader's section ID when the leader leaves the
|
|
// game. This option, if enabled, causes the server to instead use the game creator's section ID for the entire
|
|
// duration of the game. On versions other than BB, this only has an effect in server drop modes.
|
|
"UseGameCreatorSectionID": false,
|
|
|
|
// BB team reward definitions. Team rewards have the following fields:
|
|
// Key: Internal name of the reward. Must be unique across all rewards.
|
|
// Name: Reward name shown to the player.
|
|
// Description: Reward description shown to the player.
|
|
// Points: Cost in team points.
|
|
// PrerequisiteKeys: List of reward keys required to be purchased before this reward can be purchased.
|
|
// RewardFlag: Flag in the client's team rewards field. Not used for most rewards; only rewards that change client
|
|
// behavior need this.
|
|
// RewardItem: Item to be given to the team master when this reward is purchased. If the master's bank is full,
|
|
// item rewards do not appear in the purchase list.
|
|
// IsUnique: If false, the reward can be purchased multiple times (this only really makes sense for item rewards).
|
|
// If true or omitted, the reward can only be purchased once.
|
|
"TeamRewards": [
|
|
{
|
|
"Key": "TeamFlag",
|
|
"Name": "Team flag",
|
|
"Description": "Show a custom banner\nabove your team's\nplayers in the lobby",
|
|
"Points": 2500,
|
|
"RewardFlag": 0x00000001,
|
|
}, {
|
|
"Key": "DressingRoom",
|
|
"Name": "Dressing room",
|
|
"Description": "Unlock the ability to\nchange your character's\nappearance",
|
|
"Points": 3000,
|
|
"RewardFlag": 0x00000002,
|
|
}, {
|
|
"Key": "Members20Leaders3",
|
|
"Name": "20 team members",
|
|
"Description": "Increase your team's\nsize limit to 30 members\nand 3 leaders",
|
|
"Points": 1500,
|
|
"RewardFlag": 0x00000004,
|
|
}, {
|
|
"Key": "Members40Leaders5",
|
|
"Name": "40 team members",
|
|
"Description": "Increase your team's\nsize limit to 40 members\nand 5 leaders",
|
|
"Points": 4000,
|
|
"PrerequisiteKeys": ["Members20Leaders3"],
|
|
"RewardFlag": 0x00000008,
|
|
}, {
|
|
"Key": "Members70Leaders8",
|
|
"Name": "70 team members",
|
|
"Description": "Increase your team's\nsize limit to 70 members\nand 8 leaders",
|
|
"Points": 9000,
|
|
"PrerequisiteKeys": ["Members40Leaders5"],
|
|
"RewardFlag": 0x00000010,
|
|
}, {
|
|
"Key": "Members100Leaders10",
|
|
"Name": "100 team members",
|
|
"Description": "Increase your team's\nsize limit to 100 members\nand 10 leaders",
|
|
"Points": 18000,
|
|
"PrerequisiteKeys": ["Members70Leaders8"],
|
|
"RewardFlag": 0x00000020,
|
|
}, {
|
|
"Key": "PointOfDisasterQuest",
|
|
"Name": "Quest: Point of Disaster",
|
|
"Description": "Unlock the quest\nPoint of Disaster\nfor your team",
|
|
"Points": 1000,
|
|
}, {
|
|
"Key": "TheRobotsReckoningQuest",
|
|
"Name": "Quest: The Robots' Reckoning",
|
|
"Description": "Unlock the quest\nThe Robots' Reckoning\nfor your team",
|
|
"Points": 1000,
|
|
}, {
|
|
"Key": "CommanderBlade",
|
|
"Name": "Commander Blade",
|
|
"Description": "Create a Commander\nBlade weapon",
|
|
"IsUnique": false,
|
|
"Points": 8000,
|
|
"RewardItem": "00B200",
|
|
}, {
|
|
"Key": "UnionField",
|
|
"Name": "Union Field",
|
|
"Description": "Create a Union Field\narmor",
|
|
"IsUnique": false,
|
|
"Points": 100,
|
|
"RewardItem": "010155",
|
|
}, {
|
|
"Key": "UnionGuard",
|
|
"Name": "Union Guard",
|
|
"Description": "Create a Union Guard\nshield",
|
|
"IsUnique": false,
|
|
"Points": 100,
|
|
"RewardItem": "010295",
|
|
}, {
|
|
"Key": "Ticket500",
|
|
"Name": "Team Points Ticket 500",
|
|
"Description": "Create a 500-point ticket",
|
|
"IsUnique": false,
|
|
"Points": 500,
|
|
"RewardItem": "031900",
|
|
}, {
|
|
"Key": "Ticket1000",
|
|
"Name": "Team Points Ticket 1000",
|
|
"Description": "Create a 1000-point ticket",
|
|
"IsUnique": false,
|
|
"Points": 1000,
|
|
"RewardItem": "031901",
|
|
}, {
|
|
"Key": "Ticket5000",
|
|
"Name": "Team Points Ticket 5000",
|
|
"Description": "Create a 5000-point ticket",
|
|
"IsUnique": false,
|
|
"Points": 5000,
|
|
"RewardItem": "031902",
|
|
}, {
|
|
"Key": "Ticket10000",
|
|
"Name": "Team Points Ticket 10000",
|
|
"Description": "Create a 10000-point ticket",
|
|
"IsUnique": false,
|
|
"Points": 10000,
|
|
"RewardItem": "031903",
|
|
},
|
|
],
|
|
|
|
// Persistent game timeout. This is the amount of time a game set to be persistent (with the $persist command) will
|
|
// continue to exist with no players in it before being deleted. The value is in microseconds; the default value is
|
|
// 30 minutes. If this is set to zero or not specified, persistent games never expire; such a game can then only
|
|
// deleted by joining it, running $persist again, and leaving.
|
|
"PersistentGameIdleTimeout": 1800000000,
|
|
|
|
// Cheat mode behavior. There are three values:
|
|
// "Off": Cheat mode is disabled on the entire server. Cheat mode cannot be enabled in games, and the $cheat
|
|
// command does nothing. This also disables cheat options on the proxy server.
|
|
// "OffByDefault": Cheat mode is disabled on the entire server, but can be enabled in each game with the $cheat
|
|
// command. Cheat options are available on the proxy server.
|
|
// "OnByDefault": Cheat mode is enabled on the entire server, but can be disabled in each game with the $cheat
|
|
// command. Cheat options are available on the proxy server.
|
|
"CheatModeBehavior": "OnByDefault",
|
|
|
|
// Cheat mode behaviors. The keys present in this list determine what the server considers to be cheating. If you
|
|
// delete or comment out an item here, the server will allow that action even when cheat mode is off.
|
|
"CheatingBehaviors": [
|
|
"CreateItems", // Use of the $item command
|
|
"EditSectionID", // Use of $edit secid for characters past Level 1
|
|
"EditStats", // Use of $edit atp, etc.
|
|
"Ep3ReplaceAssist", // Use of $setassist
|
|
"Ep3UnsetFieldCharacter", // Use of $unset
|
|
"InfiniteHPTP", // Use of $infhp and $inftp
|
|
"FastKills", // Use of $fastkill
|
|
"InsufficientMinimumLevel", // Setting a $minlevel below the default
|
|
"OverrideRandomSeed", // Use of $rand
|
|
"OverrideSectionID", // Use of $secid
|
|
"OverrideVariations", // Use of $variations
|
|
"ProxyOverrideDrops", // Use of $dropmode on proxy server
|
|
// "ResetMaterials", // Use of $edit mat reset (by default, not cheating)
|
|
"Warp", // Use of $warp
|
|
],
|
|
|
|
// Default switch assist behavior. Players can always toggle switch assist with the $swa command; this only controls
|
|
// whether it's enabled by default for all players or not.
|
|
"EnableSwitchAssistByDefault": false,
|
|
|
|
// Whether to enable rare drop notifications by default. Players can toggle this behavior for themselves with the
|
|
// $itemnotifs command.
|
|
"RareNotificationsEnabledByDefaultV1V2": false,
|
|
"RareNotificationsEnabledByDefaultV3V4": false,
|
|
|
|
// If this is true, items generated in client drop mode can trigger rare drop notifications. By default, they can't.
|
|
"RareNotificationsEnabledForClientDrops": false,
|
|
|
|
// Items for which rare notifications should be broadcast to the game or entire server. These notifications occur
|
|
// when the item is picked up. They only are generated from items dropped by boxes and enemies; items dropped by
|
|
// players or created with the $item command do not cause notifications when picked up.
|
|
// Entries in these lists are primary identifiers, which are similar to the usual 3-byte item codes but are slightly
|
|
// more expressive. In summary, primary identifiers go like this:
|
|
// 0x00TTSS00 = weapon (T = type, S = subtype; subtype is 0 for ES weapons)
|
|
// 0x01TTSS00 = armor/shield/unit
|
|
// 0x02TT0000 = mag
|
|
// 0x03TTSS00 = tool item (except tech disks)
|
|
// 0x0302ZZLL = tech disk (Z = tech number, L = level - 1)
|
|
// 0x04000000 = meseta
|
|
// For example (you can check these in names-v4.json):
|
|
// 0x00020700 = DRAGON SLAYER (any stats)
|
|
// 0x01012A00 = DF FIELD (any stats)
|
|
// 0x020B0000 = Tapas (any level)
|
|
// 0x03010200 = Trifluid (any amount)
|
|
// 0x0302061D = Disk:Zonde Lv.30
|
|
// 0x04000000 = Meseta (any amount)
|
|
// As with most other places where you can specify items in this file, you can also put textual item descriptions in
|
|
// here (e.g. "DRAGON SLAYER"), but only data that would appear in the primary identifier will be used - that is, if
|
|
// you were to put something like "DRAGON SLAYER +5 5/0/0/5/0", the grind and bonuses would be ignored, and all
|
|
// DRAGON SLAYERs would result in notifications regardless of their stats. For textual descriptions, the items are
|
|
// parsed as they would be on BB, so certain V2-only items cannot be represented this way.
|
|
"NotifyGameForItemPrimaryIdentifiersV1V2": [],
|
|
"NotifyGameForItemPrimaryIdentifiersV3": [],
|
|
"NotifyGameForItemPrimaryIdentifiersV4": [],
|
|
"NotifyServerForItemPrimaryIdentifiersV1V2": [],
|
|
"NotifyServerForItemPrimaryIdentifiersV3": [],
|
|
"NotifyServerForItemPrimaryIdentifiersV4": [],
|
|
|
|
// Whether to notify the entire server when a player reaches the maximum level (100 on v1, 200 on other versions, or
|
|
// 999 on Episode 3).
|
|
"NotifyServerForMaxLevelAchieved": false,
|
|
|
|
// This setting allows the server to enable server patching for versions that don't natively support it. This is not
|
|
// enabled by default because it increases the loading time considerably - the player has to wait for the initial
|
|
// server connection, then wait for the quest to load, then wait for the client to leave the "game", before getting
|
|
// to the welcome message.
|
|
"EnableSendFunctionCallQuestNumbers": {
|
|
// "3OE2": 88530, // US Plus (v1.2) + customizations
|
|
// "3OJ5": 88531, // JP Plus (v1.5)
|
|
// "3SE0": 88532, // US Ep3
|
|
// "3SP0": 88533, // EU Ep3
|
|
},
|
|
|
|
// Whether to enable protected subcommands on GC and Xbox. This enables the infinite HP cheat to also automatically
|
|
// revive players and clear conditions like poison and freeze. (On v1 and v2, those functions are always enabled in
|
|
// infinite HP mode.)
|
|
"EnableV3V4ProtectedSubcommands": false,
|
|
|
|
// These flags specify which versions to allow to join games, depending on the version that created the game. Each
|
|
// entry here is a bit field specifying which versions can join. The bits are in the same order as specified here in
|
|
// the comments, starting from the right (so DC_NTE is the third bit from the right). By default, all non-prototype
|
|
// v1 and v2 versions can play with each other, and GC and Xbox can play with each other also.
|
|
// Note that there are some built-in restrictions. If a game is in the Ultimate difficulty level, for example, it
|
|
// will not be accessible to v1 players regardless of what's specified below. There are similar restrictions based on
|
|
// the game mode and episode number.
|
|
"CompatibilityGroups": [
|
|
0x0000, // PC_PATCH
|
|
0x0000, // BB_PATCH
|
|
0x0004, // DC_NTE compatible only with itself
|
|
0x0008, // DC_11_2000 compatible only with itself
|
|
0x00B0, // DC_V1 compatible with DC_V1, DC_V2, and PC_V2
|
|
0x00B0, // DC_V2 compatible with DC_V1, DC_V2, and PC_V2
|
|
0x0040, // PC_NTE compatible only with itself
|
|
0x00B0, // PC_V2 compatible with DC_V1, DC_V2, and PC_V2
|
|
0x0100, // GC_NTE compatible only with itself
|
|
0x1200, // GC_V3 compatible with GC_V3 and XB_V3
|
|
0x0400, // GC_EP3_NTE compatible only with itself
|
|
0x0800, // GC_EP3 compatible only with itself
|
|
0x1200, // XB_V3 compatible with GC_V3 and XB_V3
|
|
0x2000, // BB_V4 compatible only with itself
|
|
],
|
|
|
|
// This option causes the server to override name colors for all players based on which version of the game they're
|
|
// using. If this option is missing or commented out (the default), the server does not override any name colors.
|
|
// There must be 12 entries in this list, and colors are specified as ARGB32.
|
|
// "VersionNameColors": [
|
|
// 0xFFBBBBBB, // DC NTE
|
|
// 0xFF666666, // DC 11/2000
|
|
// 0xFFFFFFFF, // DC v1
|
|
// 0xFFFFAE35, // DC v2
|
|
// 0xFF875C1C, // PC NTE
|
|
// 0xFFFFAE35, // PC v2
|
|
// 0xFF663366, // GC NTE
|
|
// 0xFFFFBBFF, // GC
|
|
// 0xFF666600, // Ep3 NTE
|
|
// 0xFFDFF56E, // Ep3
|
|
// 0xFFBBFFBB, // Xbox
|
|
// 0xFF55FDE3, // BB (the official Episode 4 color is probably 0xFFC69141)
|
|
// ],
|
|
// "ClientCustomizationNameColor": 0xFFFFBBBB,
|
|
|
|
// These options control which item drop modes are used by default, and which can be chosen by the player. The
|
|
// AllowedDropModes fields are bit fields specifying which modes players can choose with the $dropmode command. See
|
|
// "Item tables and drop modes" in README.md for details on how each drop mode behaves. The mode bits are:
|
|
// DISABLED = 0x01
|
|
// CLIENT = 0x02
|
|
// SERVER_SHARED = 0x04
|
|
// SERVER_PRIVATE = 0x08
|
|
// SERVER_DUPLICATE = 0x10
|
|
// See README.md for more information on drop modes and item tables.
|
|
"AllowedDropModesV1V2Normal": 0x1F, // All modes
|
|
"AllowedDropModesV1V2Battle": 0x07, // SERVER_PRIVATE and SERVER_DUPLICATE not allowed
|
|
"AllowedDropModesV1V2Challenge": 0x07, // SERVER_PRIVATE and SERVER_DUPLICATE not allowed
|
|
"AllowedDropModesV3Normal": 0x1F, // All modes allowed
|
|
"AllowedDropModesV3Battle": 0x07, // SERVER_PRIVATE and SERVER_DUPLICATE not allowed
|
|
"AllowedDropModesV3Challenge": 0x07, // SERVER_PRIVATE and SERVER_DUPLICATE not allowed
|
|
"AllowedDropModesV4Normal": 0x1D, // CLIENT not allowed
|
|
"AllowedDropModesV4Challenge": 0x05, // CLIENT, SERVER_PRIVATE, and SERVER_DUPLICATE not allowed
|
|
"AllowedDropModesV4Battle": 0x05, // CLIENT, SERVER_PRIVATE, and SERVER_DUPLICATE not allowed
|
|
"DefaultDropModeV1V2Normal": "CLIENT",
|
|
"DefaultDropModeV1V2Battle": "CLIENT",
|
|
"DefaultDropModeV1V2Challenge": "CLIENT",
|
|
"DefaultDropModeV3Normal": "CLIENT",
|
|
"DefaultDropModeV3Battle": "CLIENT",
|
|
"DefaultDropModeV3Challenge": "CLIENT",
|
|
"DefaultDropModeV4Normal": "SERVER_SHARED",
|
|
"DefaultDropModeV4Battle": "SERVER_SHARED",
|
|
"DefaultDropModeV4Challenge": "SERVER_SHARED",
|
|
|
|
// Rare enemy rates for BB games. The default rates specified here match the original rates on the official servers.
|
|
// There is a hard limit of 16 rare enemies per room or quest, which you may run into if you increase these rates
|
|
// significantly.
|
|
// If no rates are specified for a difficulty, the previous difficulty's rates will be used. (In the default
|
|
// configuration, only Normal is specified, so all difficulties use the same rates.) If the Challenge set is not
|
|
// specified, the default rates are used for Challenge mode, which is 1/500 for all enemies.
|
|
// The Mericarand rate applies to Mericarol enemies whose arguments specify that they may be replaced with Mericus or
|
|
// Merikle. (Specifically, if uparam1 > 2, this is the case.) When a Mericarol is replaced, the enemy index is used
|
|
// to determine whether it will be a Mericus (even enemy index) or Merikle (odd enemy index).
|
|
"RareEnemyRates-Normal": {
|
|
// These are probabilities out of 0xFFFFFFFF - so 0 means that rare enemy will never appear, and 0xFFFFFFFF means
|
|
// it will always appear (until 16 rare enemies have been assigned).
|
|
"Hildeblue": 0x0083126E, // 1/500
|
|
"Rappy": 0x0083126E, // 1/500
|
|
"NarLily": 0x0083126E, // 1/500
|
|
"PouillySlime": 0x0083126E, // 1/500
|
|
"Mericarand": 0x33333333, // 1/5
|
|
"MerissaAA": 0x0083126E, // 1/500
|
|
"Pazuzu": 0x0083126E, // 1/500
|
|
"DorphonEclair": 0x0083126E, // 1/500
|
|
"Kondrieu": 0x1999999A, // 1/10
|
|
},
|
|
// "RareEnemyRates-Hard": {...},
|
|
// "RareEnemyRates-VeryHard": {...},
|
|
// "RareEnemyRates-Ultimate": {...},
|
|
// "RareEnemyRates-Challenge": {...},
|
|
|
|
// You can override the minimum character levels required to make games in each episode and difficulty level here.
|
|
"V1V2MinimumLevels": {
|
|
"Episode1": [1, 20, 40, 80],
|
|
},
|
|
"V3MinimumLevels": {
|
|
"Episode1": [1, 20, 40, 80],
|
|
"Episode2": [1, 20, 40, 80],
|
|
},
|
|
"BBMinimumLevels": {
|
|
"Episode1": [1, 20, 50, 90],
|
|
"Episode2": [1, 30, 60, 100],
|
|
"Episode4": [1, 40, 70, 110],
|
|
},
|
|
|
|
// Some quest flags should be changed when a game is started in order to fix certain in-game issues (noted in the
|
|
// comments in the default values below). These can be true, false, or expressions to make values conditional on
|
|
// other flags' values. For non-BB versions, you should generally only use true and false here, since the server
|
|
// doesn't have direct access to the client's quest flags from their save file.
|
|
// If you use an expression, the format is the same as the AvailableIf and EnabledIf fields in quest JSONs (see
|
|
// system/quests/retrieval/q058.json for details). Note that the expression is only evaluated at the time the game is
|
|
// created, and the player-specific tokens like CC_EpX_YY refer to the player who created the game.
|
|
// The UnlockAllAreas option is now gone; if you want the same behavior as if it were enabled, uncomment all the
|
|
// "area unlock" lines below. Note that some late PSOBB client versions (for example, the Tethealla client) open all
|
|
// areas by default, so the area unlock flags have no effect for them.
|
|
"QuestFlagRewritesV1V2": {
|
|
// "F_0017": true, // Ep1 area unlock (Caves)
|
|
// "F_0020": true, // Ep1 area unlock (Mines)
|
|
// "F_002A": true, // Ep1 area unlock (Ruins)
|
|
},
|
|
"QuestFlagRewritesV3": {
|
|
// "F_0017": true, // Ep1 area unlock (Caves)
|
|
// "F_0020": true, // Ep1 area unlock (Mines)
|
|
// "F_002A": true, // Ep1 area unlock (Ruins)
|
|
// "F_004C": true, // Ep2 area unlock (VR Spaceship)
|
|
// "F_004F": true, // Ep2 area unlock (CCA)
|
|
// "F_0052": true, // Ep2 area unlock (Seabed)
|
|
},
|
|
"QuestFlagRewritesV4": {
|
|
// "F_01F9": true, // Ep1 area unlock (Caves)
|
|
// "F_0201": true, // Ep1 area unlock (Mines)
|
|
// "F_0207": true, // Ep1 area unlock (Ruins)
|
|
// "F_021B": true, // Ep2 area unlock (VR Spaceship)
|
|
// "F_0225": true, // Ep2 area unlock (CCA)
|
|
// "F_022F": true, // Ep2 area unlock (Seabed)
|
|
// "F_02BD": true, // Ep4 area unlock (Crater West)
|
|
// "F_02BE": true, // Ep4 area unlock (Crater South)
|
|
// "F_02BF": true, // Ep4 area unlock (Crater North)
|
|
// "F_02C0": true, // Ep4 area unlock (Crater Interior)
|
|
// "F_02C1": true, // Ep4 area unlock (Desert)
|
|
"F_0046": false, // Ep2 CCA door lock fix
|
|
"F_0047": false, // Ep2 CCA door lock fix
|
|
"F_0048": false, // Ep2 CCA door lock fix
|
|
"F_004F": "F_0225", // Ep2 Elly appears in town = 6-5 cleared
|
|
"F_002C": "F_01F7", // Ep1 Forest monument state = 1-2 cleared
|
|
"F_002D": "F_01FD", // Ep1 Cave monument state = 2-2 cleared
|
|
"F_002E": "F_0209", // Ep1 Mine monument state = 4-1 cleared
|
|
"F_002F": "F_01F7 && F_01FD && F_0209", // All monuments state
|
|
},
|
|
|
|
// This setting defines fields that can be used with the $qfread command.
|
|
"QuestCounterFields": {
|
|
// Entries are [quest_counter_index, field_mask]. field_mask must contain exactly one contiguous sequence of one or
|
|
// more 1 bits. If there is exactly one bit set in the mask, it is reported as true or false; if there are multiple
|
|
// bits set, it is reported as a numeric value.
|
|
"betaluckycoins": [0x01, 0x003F8000], // Beta Lucky Coins
|
|
"garonbscore": [0x00, 0x0003FC00], // Garon button-mashing game score
|
|
"garonpoints": [0x00, 0x000003FF], // Garon points
|
|
"garontscore": [0x00, 0x03FC0000], // Garon timing game score
|
|
"killcount": [0x03, 0x003FFF00], // Kill count
|
|
"luckycoins": [0x0B, 0x000001FC], // Lucky Coins
|
|
"luckytickets1": [0x03, 0x000000FF], // Lucky Tickets
|
|
"luckytickets2": [0x06, 0x0FF00000], // Lucky Tickets
|
|
"luckytickets3": [0x0A, 0x7FC00000], // Lucky Tickets
|
|
"ma1v2points": [0x09, 0x00003FFF], // MA1v2 points
|
|
"ma2v2points": [0x09, 0x0FFFC000], // MA2v2 points
|
|
"ma4kills": [0x0E, 0x7FFFFFFF], // MA4 kills (Total)
|
|
"ma4killsc": [0x08, 0x7FFFFFFF], // MA4 kills (Crater)
|
|
"ma4killscd": [0x03, 0x7FFFFFFF], // MA4 kills (Central Dome)
|
|
"ma4killsgdv": [0x04, 0x7FFFFFFF], // MA4 kills (Gal Da Val)
|
|
"ma4tickets": [0x0F, 0x000000FF], // MA4 Tickets
|
|
"pgcandyid": [0x05, 0x00007FFF], // Principal's Gift: Random Candy ID
|
|
"rhpoints": [0x02, 0x003FC000], // Rappy's Holiday points
|
|
"songcount": [0x03, 0x07C00000], // Song count
|
|
"wrappingpapers": [0x0B, 0x1FF00000], // Wrapping Papers
|
|
},
|
|
}
|