No announcement yet.

Project Update #11 - Character Creation Screen - Jun. 11th 2016

  • Filter
  • Time
  • Show
Clear All
new posts

  • Project Update #11 - Character Creation Screen - Jun. 11th 2016

    Hello everyone.

    As you can see, the forums are pretty quiet. This is because most of the chatter has moved to the Discord. I'm pretty active in the #psforever-code channel trying to dump my thoughts and current progress. Hop on if you want to chat regarding development.

    I don't have any real general announcements beyond the good news that the login server is completed enough for me to move on to the world server.

    Development Progress
    tl;dr - We can now login and create characters.

    We've hit some new milestones in the server development. We are now able to keep the PlanetSide client from disconnecting after a few minutes. This was fixed by figuring out the "Unknown{7,8}" packet pair. I don't know what this does, but I handle it enough to keep things from breaking.

    The next challenge was to handle logins to the PlanetSide world server. This required more reverse engineering and head scratching to get right. Using the GameCapture tool and previous captures, I was able to figure out the "magic" packets required for the client to enter in to the character creation screen. It's not 100%, but see below for a screenshot showing me at the character select.

    From here I began to handle some important character creation packets. This included character selection (hitting the "play" button), character deletion, and new character creation. I have now handled all of these packets just enough to allow the client to not fault.

    My immediate next goal is to figure out the scary "ObjectCreateMessage". This is a scary packet because of how complicated it is.
    I would consider this a "God" packet because it's responsible for so much. It is sent by the PlanetSide game server for EVERY game object that is created on the client. This includes your avatar, every inventory item, every terminal, every weapon, every vehicle, etc. It's "polymorphic" in that there are different ways of decoding it depending on what game object it represents! I have to make sense of this soup before I can start making my server create object on the server. The coolest part about this packet is once I understand it, I can spawn in any type of object on command. This means even strange objects or custom weapons!

    Once I figure out this packet, I want to get the client to enter a map. It's not currently working because I believe I'm missing some key packets (such as the avatar creation packet. you need to spawn in to something...).

    Initial efforts of getting past the server selection screen


    ========*========*========*========*========*===== ===*========*========*========*========*========

    A hacked up character creation screen. It's faked because I was just replaying packets to get the client to create some characters.


    ========*========*========*========*========*===== ===*========*========*========*========*========

    The furthest I've gotten so far. The client just hangs here.


    Development Log
    Here is the log of commits since my last status update. Lots of progress has been made! In total there were 45 commits with a total change of 58 files changed, 4074 insertions(+), 1586 deletions(-). Most of the development has been getting the critical world and login server packets reverse engineered and coded up. This takes a lot of time, but each packet adds new functionality.

    You can see the full commit log on the project Github.

    78ace06 2016-06-04 - Packet: ObjectCreateMessage
    c83132f 2016-06-04 - Improve packet CharacterInfoMessage and char select
    7af6f64 2016-06-04 - Rebump scodec-akka due to fix
    63311e4 2016-06-04 - Fix old EmpireNeed name to PlanetSideEmpire
    9f66602 2016-06-04 - Packet: ActionResultMessage
    f6d8479 2016-06-04 - Packet: CharacterCreateRequestMessage
    c18ec5c 2016-06-04 - Work around scodec-akka bug and remove old UDP packet
    8b8194c 2016-06-04 - Packet: CharacterRequestMessage naming from RE
    8ba34fe 2016-06-03 - Fix missing decoder in GamePacketOpcode
    d4c414d 2016-06-03 - Packet: CharacterInfoMessage
    50fb65a 2016-06-03 - Version bump scodec and specs2
    372a88b 2016-06-03 - Packet: Improve sizeCodec for MultiPacketEx
    7b82491 2016-06-03 - Packet: MultiPacketEx, CharacterRequestMessage
    9a0ef28 2016-05-19 - Improve session router name for log output purposes
    eb03372 2016-05-19 - Enable WorldSession to get to login screen using replay
    5ed40e7 2016-05-19 - Fix LoginMessage and ConnectToWorldReqMsg token
    f1fae83 2016-05-19 - Fixed enumeration bounds check bug
    362e923 2016-05-19 - Reorganize control packet opcodes and add defaults
    e8031f0 2016-05-19 - Packet: KeepAliveMessage and add all game packet opcodes
    6b02d2f 2016-05-17 - Add doc to ConnectToWorldMessage about hostname
    d27bd79 2016-05-17 - Made some hacks to get to 100% on the World login
    3c07cc4 2016-05-14 - Correctly respond to ConnectToWorldRequestMessage
    b210df9 2016-05-14 - Packet: ConnectToWorldRequestMessage
    034dadc 2016-05-14 - Packet: ConnectToWorldMessage and fix VNL test
    43a4031 2016-05-14 - Fix bad ServerType encoding and change server type
    aa0b895 2016-05-14 - Discovered name for Unknown3 (ConnectToWorldRequestMessage)
    11298c1 2016-05-14 - Stub out ControlSync to prevent client from leaving
    6ea1d15 2016-05-14 - Packet: Unknown{7,8} -> ControlSync{,Resp}
    4d52d65 2016-05-13 - Add fault tolerance to SessionRouter and it's children
    10f54b7 2016-05-05 - Remove scroller and parametize UDP listener
    cdf240c 2016-05-04 - Handle meta packet and return ack. server scroller
    c7f70e3 2016-05-04 - Finish coding for SlottedMetaPacket and wrote test
    ff4ea79 2016-05-03 - Organize packets in to their own packages
    e41d0ac 2016-05-03 - Fix broken organization name in build.sbt
    df1d222 2016-05-03 - Refactor package naming scheme and line endings (CRLF)
    14e48d4 2016-05-03 - Improve copyright script perf and perserve LE
    83da72e 2016-05-03 - Refactor all packet definitions out of PSPacket
    f81d67f 2016-05-02 - Fix missing MDC Actor tell on session creation
    e0ac823 2016-05-02 - Add GPLv3 licensing information
    67e79e3 2016-05-01 - Make UdbListener listen on the host address (public)
    bc87042 2016-05-01 - Fix line endings and add PSForever copyright
    e299abb 2016-05-01 - Add SLF4J MDC session logging
    2fc78f4 2016-05-01 - Add banner screenshot to
    1318ebd 2016-05-01 - New SLF4J logger log4s. ANSI colors
    36d9f51 2016-04-30 - Revert change to LoginMessage tokenPath