On Sun, Mar 10, 2019 at 02:15:29PM -0700, Darrell Root wrote:
> I’m making good progress on my MacOS/Swift netrek client. It’s
> playable! I’ve even gotten a couple kills. I’m hoping to release
> an alpha version Friday March 15th. “Beware the ides of March”.
> I’ve attached a screenshot at the bottom.
Looks good. Ships inbound to Draconis ought to be cloaked; please add
the code to hide them somehow.
Team colours are unconventional; we would normally use a red or orange
colour for Romulan team, and a yellow colour for Federation. This
would make is easier for people to move to another client and fit
existing documentation. Most clients allow the colours to be
customised.
> I’m having trouble understanding the CP_MESSAGE format. At first it
> looks simple:
>
> struct mesg_cpacket { /* CP_MESSAGE py-struct "!bBBx80s" #1 */
> char type;
> char group;
> char indiv; /* does this break anything? -da */
> char pad1;
> char mesg[MSG_LEN];
> };
>
> I captured a packet trace of a distress call to the Rom team with 4
> in the group (MTEAM?) and 2 in the indiv (TEAM=ROM?) fields. But
> I’m having trouble sending messages with the MacTrek client so I
> don’t have a full set of packet traces to work with.
Run another client. MacTrek did not mature.
> Other client headers below but let me ask a couple specific questions:
>
> 1) If I want to send a message to ALL, what do I put in group/indiv?
Deriving from source code;
MALL in group.
zero in indiv.
https://github.com/quozl/gytha/blob/master/gytha/__init__.py#L2266
https://github.com/quozl/netrek-client-cow/blob/master/smessage.c#L221
> 2) If I want to send a message to TEAM ROM, what do I put in
> group/indiv (I think group=4 (MTEAM) and indiv=2 (ROM)).
Deriving from source code;
MTEAM in group.
ROM in indiv.
https://github.com/quozl/gytha/blob/master/gytha/__init__.py#L2270
https://github.com/quozl/netrek-client-cow/blob/master/smessage.c#L227
> 3) If I want to send a message to individual player #3 what do I put
> in the group/indiv fields?
Deriving from source code;
MINDIV in group.
ship number in indiv.
https://github.com/quozl/gytha/blob/master/gytha/__init__.py#L2290
https://github.com/quozl/netrek-client-cow/blob/master/smessage.c#L248
> 4) At startup, client is supposed to send the following message:
> CP_MESSAGE (MINDIV|MCONFIG, self, "@clientname clientversion")
> MINDIV is 0x02
> MCONFIG is 0x04
> So I guess 0x06 goes in the group field. What is the “self” that
> (presumably) goes in the indiv field? Is that my PlayerID (0
> through 31)?
p_no
https://github.com/quozl/netrek-client-cow/blob/master/dmessage.c#L278
But it probably does not matter, as the server does not check it;
https://github.com/quozl/netrek-server/blob/master/ntserv/socket.c#L1704
https://github.com/quozl/netrek-server/blob/master/ntserv/socket.c#L1953
> Darrell
> -----------
>
> Looking at the existing source code I’m finding a bunch of different things to put in the group and indiv fields (although I may be getting CP_MESSAGE and SP_MESSAGE mixed up).
>
> The team flags are as follows:
>
> IND=0x0
> FED=0x1
> ROM=0x2
> KLI=0x4
> ORI=0x8
>
> Below is the message header source I’ve dug up.
>
> #define MVALID 0x01
> #define MGOD 0x10
> #define MMOO 0x12
>
> #ifdef TOOLS
> #define MTOOLS 0x14
> #endif
>
> /* order flags by importance (0x100 - 0x400) */
> /* restructuring of message flags to squeeze them all into 1 byte - jmn */
> /* hopefully quasi-back-compatible: MVALID, MINDIV, MTEAM, MALL, MGOD use up
> * 5 bits. this leaves us 3 bits. since the server only checks for those
> * flags when deciding message related things and since each of the above
> * cases only has 1 flag on at a time we can overlap the meanings of the
> * flags */
>
> #define MINDIV 0x02
> /* these go with MINDIV flag */
>
> #ifdef STDBG
> #define MDBG 0x20
> #endif
>
> #define MCONFIG 0x40 /* config messages from * *
> * server */
> #define MDIST 0x60 /* flag distress type * *
> * messages properly */
> #ifdef MULTILINE_MACROS
> #define MMACRO 0x80
> #endif
>
> #define MTEAM 0x04
> /* these go with MTEAM flag */
> #define MTAKE 0x20
> #define MDEST 0x40
> #define MBOMB 0x60
> #define MCOUP1 0x80
> #define MCOUP2 0xA0
> #define MDISTR 0xC0 /* flag distress type
> * messages */
> #define MALL 0x08
> /* these go with MALL flag */
> #define MGENO 0x20 /* MGENO is not used in INL
> * here */
> #define MCONQ 0x20 /* not enought bits to
> * distinguish MCONQ/MGENO :-( */
> #define MKILLA 0x40
> #define MKILLP 0x60
> #define MKILL 0x80
> #define MLEAVE 0xA0
> #define MJOIN 0xC0
> #define MGHOST 0xE0
> /* MMASK not used in INL server */
>
> #define MWHOMSK 0x1f /* mask with this to find
> * who msg to */
> #define MWHATMSK 0xe0 /* mask with this to find
> * what message about */
> _______________________________________________
> netrek-dev mailing list
> netrek-dev at us.netrek.org
> http://mailman.us.netrek.org/mailman/listinfo/netrek-dev
--
James Cameron
http://quozl.netrek.org/