1. Yes, GDCC's C front is capable of doing anything you can do in ACS, though not always as succinctly. If using C for map scripts, it is important to be aware that to have multiple bytecode files not interfere with each other you will need to take extra steps during compiling or write the code in a special way.
2. Sadly, no. Compiling C++ is something I would very much like to do, and should at least be theoretically possible, but it is not going to happen in the foreseeable future.
3. For line specials and builtin functions (both special instruction and callfunc based), there is extension syntax for declaring bindings. The <ACS_ZDoom.h> header includes such bindings, prefixed with ACS_ to avoid name conflicts. For HudMessage and other printing capabilities specifically, one will generally use the __nprintf function (declared in <stdio.h>) which writes to the native print buffer. Additionally, printf and other writes to either stdout or stderr will act like Log calls when a linefeed is written.
Code: Select all
// Print(s: "A number: ", d: var, s: "!");
ACS_BeginPrint();
__nprintf("A number: %d!", var);
ACS_EndPrint(); // Or ACS_EndLog for Log().
// HudMessage(s: "A"; HUDMSG_PLAIN, msgid, 0, x, y, 0);
ACS_BeginHudMessage();
__nprintf("A");
ACS_MoreHudMessage();
ACS_OptHudMessage(HUDMSG_PLAIN, msgid, 0, x, y, 0);
ACS_EndHudMessage(); // Extra parameters would be given to this function call.
For somewhat more elaborate usage examples, you can look at
DUHeresy.
And because it was apparently omitted from the first post during some rewrite, the official IRC channel (for those of you nerdy enough to use IRC (you know who you are)) is #else#if on irc.esper.net.