NetDuke32: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
Line 98: Line 98:
=== Events ===
=== Events ===
NetDuke32 has some new CON events for some of its functionality.
NetDuke32 has some new CON events for some of its functionality.
*'''EVENT_DOQUAKE''' - THISACTOR = Player Sprite, RETURN = Earthquake Time. Called when the game applies the screen shake for earthquakes. Setting RETURN to 0 cancels the shake. Allows implementing your own screen shake by setting return to 0 and manipulating the camera(x/y/z/ang/horiz) variables.
*'''EVENT_BOTGETSPRITESCORE''' - THISACTOR = Current Sprite, RETURN = Score, Player = Current Bot. Called whenever a DukeBot tries to get the score/priority of a sprite in a map, higher RETURN values mean a higher score. Set RETURN to 0 to ignore the sprite entirely.
*'''EVENT_BOTGETSPRITESCORE''' - THISACTOR = Current Sprite, RETURN = Score, Player = Current Bot. Called whenever a DukeBot tries to get the score/priority of a sprite in a map, higher RETURN values mean a higher score. Set RETURN to 0 to ignore the sprite entirely.



Revision as of 20:50, 25 October 2022

About

NetDuke32 is a multiplayer-centric port based on EDuke32, developed by Jordon "StrikerTheHedgefox" Moss. Started late 2015 as a series of maintenance builds of EDuke32-OldMP, it has since branched out and evolved. NetDuke32 brings new features, QoL (Quality of Life) and netcode improvements, and tries to improve the overall multiplayer experience.

Features

(Page is a work in progress)

Documentation

NetDuke32 has a few exclusive DEF tokens, GameVars, and structure members to access a few of its features. They will be listed here.

NOTE: Since NetDuke32 is still very much an early work in progress, these may be subject to changes, deprecation, or outright removal.

DEF Tokens

  • addplayercolor <palnum> <name> - Adds a palswap to the list of selectable player colors for multiplayer.
Example: addplayercolor 17 "Green (Blue Skin)"
  • delplayercolor <palnum> - Deletes a palswap from the list of selectable player colors for multiplayer. A value of -1 deletes them all. (Make sure to define your own after!)
Example: delplayercolor 23 (Which would make "Yellow" un-selectable.)

CON Commands

  • interpolate <curVal> <oldVal> <return> - Returns the interpolated value between curVal and oldVal for the currently drawn frame, useful in EVENT_ANIMATESPRITES and other display events where you might want to interpolate custom coordinates, or inherit the interpolated coords of another sprite.
  • ldistvar <x1> <y1> <x2> <y2> <return> - Returns the distance between two arbitrary x/y coordinates.
  • distvar <x1> <y1> <z1> <x2> <y2> <z2> <return> - Returns the distance between two arbitrary x/y/z coordinates.

GameVars

  • predicting (Read-only) - Returns the processing state of NetDuke32's prediction system. Useful to prevent desynchronization or visual artifacts in certain scenarios; For example, trying to call spawn in player code that is normally predicted would result in a de-sync, but guarding it with ifvare predicting 0 will make sure it only happens during the canonical gamestate, preserving synchronization.
Values:
0 = Currently processing canonical gamestate.
1 = Currently predicting upcoming gamestate.
2 = Making corrections to any mispredictions.
  • numteams (Read-only) - Returns the number of currently defined teams for TDM.
Example: whilevarvarl TEMP numteams { addvar TEMP 1 } (Will loop while TEMP is less than numteams. Useful for things like displaying information for all teams, or setting an attribute for all.)
  • DMFLAGS - Gets or sets the current DMFlags. See UserDefs section for a list of flags.
Examples:
ifvarand DMFLAGS 4 { spawn LIZTROOP } (Will spawn a LIZTROOP if DMFLAG_RESPAWNMONSTERS is enabled.)
orvar DMFLAGS 256 (Will enable DMFLAG_NOPLAYERID)

Structure Members

UserDefs (get/setuserdef[].)

  • teampal <teamnum> - Team's palette number.
Example: getuserdef[].teampal 2 TEMP // Gets team's palswap.
  • teamfrags <teamnum> - Team's frag count.
Example: getuserdef[].teampal 2 TEMP // Gets team's frag count.
  • teamsuicides <teamnum> - Team's number of suicides.
Example: setuserdef[].teamsuicides 2 0 // Sets team's suicides to 0.
  • dmflags - A bitfield containing a series of gameplay-affecting flags, such as friendly fire, respawning items, whether or not FOV changes are allowed, etc.
Flags:
DMFLAG_FRIENDLYFIRE = 1
DMFLAG_NOMONSTERS = 2
DMFLAG_RESPAWNMONSTERS = 4
DMFLAG_RESPAWNITEMS = 8
DMFLAG_RESPAWNINVENTORY = 16
DMFLAG_MARKERS = 32
DMFLAG_NOEXITS = 64
DMFLAG_WEAPONSTAY = 128
DMFLAG_NOPLAYERID = 256
DMFLAG_NOFOVCHANGE = 512
DMFLAG_NOWEAPONICONS = 1024
DMFLAG_ALLOWVISIBILITYCHANGE = 2048
DMFLAG_NODMWEAPONSPAWNS = 4096
  • m_dmflags - Same as above, but contains the flags selected in the menu, before being confirmed and transferred to dmflags when starting a new map.

Player (get/setplayer[].)

  • lowsprite - The sprite the player is standing above, if applicable. (-1 if no sprite, >= 0 if there is one.)
  • highsprite - The sprite the player is standing underneath, if applicable. (-1 if no sprite, >= 0 if there is one.)
Examples:
getplayer[THISACTOR].on_ground TEMP
ifvare TEMP 1 // We're standing on something...
{
    getplayer[THISACTOR].lowsprite TEMP // Get sprite we're above
    ifvarn TEMP -1 // We're above something...
    {
        getactor[TEMP].picnum TEMP2 // Get picnum...
        ifvare TEMP2 SEENINE // We're standing on a SEENINE!
        {
            setactor[TEMP].htextra 9999 // It's unstable! It's gonna explode!
        }
    }
}

getplayer[THISACTOR].highsprite TEMP // Get sprite we're under.
ifvarn TEMP -1 // We're under something...
{
    getactor[TEMP].picnum TEMP2 // Get picnum...
    ifvare TEMP2 THWOMP // Oh no, it's a thwomp from mario! (implying a custom actor, here.)
    {
        setactorvar[TEMP].CRUSH_DUKE 1 // Signal to the thwomp to make a Duke Burger.
    }
}


Events

NetDuke32 has some new CON events for some of its functionality.

  • EVENT_DOQUAKE - THISACTOR = Player Sprite, RETURN = Earthquake Time. Called when the game applies the screen shake for earthquakes. Setting RETURN to 0 cancels the shake. Allows implementing your own screen shake by setting return to 0 and manipulating the camera(x/y/z/ang/horiz) variables.
  • EVENT_BOTGETSPRITESCORE - THISACTOR = Current Sprite, RETURN = Score, Player = Current Bot. Called whenever a DukeBot tries to get the score/priority of a sprite in a map, higher RETURN values mean a higher score. Set RETURN to 0 to ignore the sprite entirely.
  • EVENT_FRAGGED - THISACTOR = Sprite of fragged player, RETURN = Sprite of killing player, Player = ID of fragged player. Called whenever a player is killed. Setting RETURN to -1 cancels adding the frag to the score and displaying obituaries. If THISACTOR and RETURN are the same, they were killed by themselves, a hazard, or a monster. In this case, check player[THISACTOR].wackedbyactor to get the ID of the monster. This may be subject to change in the future because I'm not entirely happy with the implementation.

Compiling NetDuke32

The process of compiling NetDuke32 is identical to these articles, except in MinGW and Linux, you type make oldmp instead of make.