diff --git a/gts/pokemondpds_web.ashx.cs b/gts/pokemondpds_web.ashx.cs
index f0e06a60..38e2cfb0 100644
--- a/gts/pokemondpds_web.ashx.cs
+++ b/gts/pokemondpds_web.ashx.cs
@@ -126,10 +126,9 @@ namespace PkmnFoundations.GTS
// todo: keep VIPs in database
response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4);
// VIPs.
- foreach (var id in VIPIds)
+ foreach (var vip in VIPs)
{
- response.Write(BitConverter.GetBytes(id), 0, 4);
- response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4);
+ response.Write(vip.Save(), 0, vip.Size);
}
}
break;
@@ -263,10 +262,27 @@ namespace PkmnFoundations.GTS
///
/// The list of "VIPs".
///
- /// Being a VIP in a lobby just gives you a golden trainer card, and upgrades your 'Touch Toy' to the highest
- /// level right away. So far we've just been giving this to the developers who signed up for it.
+ /// Being a VIP gives you the following benefits:
+ ///
+ /// 1. Your Tap Toy is immediately upgraded to level 3.
+ /// 2. You get a gold trainer card, instead of a blue trainer card.
+ /// 3. You get a special color on the list of people in a lobby.
+ /// 4. You get a special color name on the footprint board.
+ /// 5. Some other mini games have a special color for your name.
+ ///
+ /// VIPs can also have custom "passphrases" that show when you bump
+ /// into them. These are generated from the standard word list you
+ /// could choose in any word box. These will show when you bump into
+ /// a user.
///
- private static int[] VIPIds = new int[] { 600403373, 601315647, 601988829 };
+ private static VipRecord[] VIPs = new VipRecord[] {
+ new VipRecord(600403373, 0, 0, 0, 0),
+ new VipRecord(601315647, 0, 0, 0, 0),
+ new VipRecord(601988829, 0, 0, 0, 0),
+ new VipRecord(602778198, 4, 4, 4, 4), // "STEEL STEEL STEEL STEEL"
+ // Etchy -- for finding vips in the first place.
+ new VipRecord(602778716, 0, 0, 0, 0)
+ };
///
/// A static questionnaire, who's id is not above 1k so it doesn't load the custom question text.
diff --git a/library/Wfc/VipRecord.cs b/library/Wfc/VipRecord.cs
new file mode 100644
index 00000000..084ddfe9
--- /dev/null
+++ b/library/Wfc/VipRecord.cs
@@ -0,0 +1,76 @@
+using PkmnFoundations.Support;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace PkmnFoundations.Wfc
+{
+ public class VipRecord : BinarySerializableBase
+ {
+ public VipRecord()
+ {
+ Pid = 0;
+ WordPartA = 0;
+ WordPartB = 0;
+ WordPartC = 0;
+ WordPartD = 0;
+ }
+
+ public VipRecord(uint pid)
+ {
+ Pid = pid;
+ WordPartA = 0;
+ WordPartB = 0;
+ WordPartC = 0;
+ WordPartD = 0;
+ }
+
+ public VipRecord(uint pid, byte wordA, byte wordB, byte wordC, byte wordD)
+ {
+ Pid = pid;
+ WordPartA = wordA;
+ WordPartB = wordB;
+ WordPartC = wordC;
+ WordPartD = wordD;
+ }
+
+ public VipRecord(byte[] data)
+ {
+ Load(data);
+ }
+
+ public uint Pid; // Profile id of the user who is a VIP.
+ public byte WordPartA; // D + A creates first word, A + B creates second word.
+ public byte WordPartB; // A + B creates second word, B + C creates third word.
+ public byte WordPartC; // B + C creates third word, C + D creates fourth word.
+ public byte WordPartD; // D + A creates first word, C + D creates fourth word.
+
+ protected override void Load(BinaryReader reader)
+ {
+ Pid = reader.ReadUInt32();
+ WordPartA = reader.ReadByte();
+ WordPartB = reader.ReadByte();
+ WordPartC = reader.ReadByte();
+ WordPartD = reader.ReadByte();
+ }
+
+ protected override void Save(BinaryWriter writer)
+ {
+ writer.Write(Pid);
+ writer.Write(WordPartA);
+ writer.Write(WordPartB);
+ writer.Write(WordPartC);
+ writer.Write(WordPartD);
+ }
+
+ public override int Size
+ {
+ get
+ {
+ return 8;
+ }
+ }
+ }
+}