]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host_cmd.c
corrected call to Image_HasAlpha to be Image_CheckAlpha
[xonotic/darkplaces.git] / host_cmd.c
index bd209df64949f1b82b94af9a16a3633772156cb4..f2737124f97d6926cddb0ac4cc097afff20a3cf5 100644 (file)
@@ -24,7 +24,7 @@ int current_skill;
 char sv_spawnmap[MAX_QPATH];
 char sv_loadgame[MAX_OSPATH];
 
-dfunction_t *ED_FindFunction (char *name);
+mfunction_t *ED_FindFunction (char *name);
 
 /*
 ==================
@@ -379,7 +379,7 @@ Host_Savegame_f
 void Host_Savegame_f (void)
 {
        char    name[256];
-       QFile   *f;
+       qfile_t *f;
        int             i;
        char    comment[SAVEGAME_COMMENT_LENGTH+1];
 
@@ -425,34 +425,35 @@ void Host_Savegame_f (void)
                }
        }
 
-       sprintf (name, "%s/%s", com_gamedir, Cmd_Argv(1));
-       COM_DefaultExtension (name, ".sav");
+       strncpy (name, Cmd_Argv(1), sizeof (name) - 1);
+       name[sizeof (name) - 1] = '\0';
+       FS_DefaultExtension (name, ".sav");
 
        Con_Printf ("Saving game to %s...\n", name);
-       f = Qopen (name, "w");
+       f = FS_Open (name, "w", false);
        if (!f)
        {
                Con_Printf ("ERROR: couldn't open.\n");
                return;
        }
 
-       Qprintf (f, "%i\n", SAVEGAME_VERSION);
+       FS_Printf (f, "%i\n", SAVEGAME_VERSION);
        Host_SavegameComment (comment);
-       Qprintf (f, "%s\n", comment);
+       FS_Printf (f, "%s\n", comment);
        for (i=0 ; i<NUM_SPAWN_PARMS ; i++)
-               Qprintf (f, "%f\n", svs.clients->spawn_parms[i]);
-       Qprintf (f, "%d\n", current_skill);
-       Qprintf (f, "%s\n", sv.name);
-       Qprintf (f, "%f\n",sv.time);
+               FS_Printf (f, "%f\n", svs.clients->spawn_parms[i]);
+       FS_Printf (f, "%d\n", current_skill);
+       FS_Printf (f, "%s\n", sv.name);
+       FS_Printf (f, "%f\n",sv.time);
 
 // write the light styles
 
        for (i=0 ; i<MAX_LIGHTSTYLES ; i++)
        {
                if (sv.lightstyles[i])
-                       Qprintf (f, "%s\n", sv.lightstyles[i]);
+                       FS_Printf (f, "%s\n", sv.lightstyles[i]);
                else
-                       Qprintf (f,"m\n");
+                       FS_Printf (f,"m\n");
        }
 
 
@@ -460,9 +461,9 @@ void Host_Savegame_f (void)
        for (i=0 ; i<sv.num_edicts ; i++)
        {
                ED_Write (f, EDICT_NUM(i));
-               Qflush (f);
+               FS_Flush (f);
        }
-       Qclose (f);
+       FS_Close (f);
        Con_Printf ("done.\n");
 }
 
@@ -485,15 +486,15 @@ void Host_Loadgame_f (void)
                return;
        }
 
-       sprintf (sv_loadgame, "%s/%s", com_gamedir, Cmd_Argv(1));
-       COM_DefaultExtension (sv_loadgame, ".sav");
+       strcpy (sv_loadgame, Cmd_Argv(1));
+       FS_DefaultExtension (sv_loadgame, ".sav");
 
        Con_Printf ("Loading game from %s...\n", sv_loadgame);
 }
 
 void Host_PerformLoadGame(char *name)
 {
-       QFile *f;
+       qfile_t *f;
        char mapname[MAX_QPATH];
        float time, tfloat;
        char buf[32768];
@@ -507,39 +508,39 @@ void Host_PerformLoadGame(char *name)
 
        cls.demonum = -1;               // stop demo loop in case this fails
 
-       f = Qopen (name, "rz");
+       f = FS_Open (name, "r", false);
        if (!f)
        {
                Con_Printf ("ERROR: couldn't open.\n");
                return;
        }
 
-       str = Qgetline (f);
+       str = FS_Getline (f);
        sscanf (str, "%i\n", &version);
        if (version != SAVEGAME_VERSION)
        {
-               Qclose (f);
+               FS_Close (f);
                Con_Printf ("Savegame is version %i, not %i\n", version, SAVEGAME_VERSION);
                return;
        }
 
        SCR_BeginLoadingPlaque ();
 
-       str = Qgetline (f);
+       str = FS_Getline (f);
        for (i = 0;i < NUM_SPAWN_PARMS;i++)
        {
-               str = Qgetline (f);
+               str = FS_Getline (f);
                sscanf (str, "%f\n", &spawn_parms[i]);
        }
 // this silliness is so we can load 1.06 save files, which have float skill values
-       str = Qgetline (f);
+       str = FS_Getline (f);
        sscanf (str, "%f\n", &tfloat);
        current_skill = (int)(tfloat + 0.1);
        Cvar_SetValue ("skill", (float)current_skill);
 
-       strcpy (mapname, Qgetline (f));
+       strcpy (mapname, FS_Getline (f));
 
-       str = Qgetline (f);
+       str = FS_Getline (f);
        sscanf (str, "%f\n",&time);
 
        CL_Disconnect_f ();
@@ -557,7 +558,7 @@ void Host_PerformLoadGame(char *name)
 
        for (i = 0;i < MAX_LIGHTSTYLES;i++)
        {
-               str = Qgetline (f);
+               str = FS_Getline (f);
                sv.lightstyles[i] = Mem_Alloc(edictstring_mempool, strlen(str)+1);
                strcpy (sv.lightstyles[i], str);
        }
@@ -565,11 +566,11 @@ void Host_PerformLoadGame(char *name)
 // load the edicts out of the savegame file
        // -1 is the globals
        entnum = -1;
-       while (!Qeof(f))
+       while (!FS_Eof (f))
        {
                for (i = 0;i < (int)sizeof(buf) - 1;i++)
                {
-                       r = Qgetc (f);
+                       r = FS_Getc (f);
                        if (r == EOF || !r)
                                break;
                        buf[i] = r;
@@ -601,11 +602,11 @@ void Host_PerformLoadGame(char *name)
                        // parse an edict
                        ent = EDICT_NUM(entnum);
                        memset (ent->v, 0, progs->entityfields * 4);
-                       ent->free = false;
+                       ent->e->free = false;
                        ED_ParseEdict (start, ent);
 
                        // link it into the bsp tree
-                       if (!ent->free)
+                       if (!ent->e->free)
                                SV_LinkEdict (ent, false);
                }
 
@@ -615,7 +616,7 @@ void Host_PerformLoadGame(char *name)
        sv.num_edicts = entnum;
        sv.time = time;
 
-       Qclose (f);
+       FS_Close (f);
 
        for (i = 0;i < NUM_SPAWN_PARMS;i++)
                svs.clients->spawn_parms[i] = spawn_parms[i];
@@ -664,7 +665,7 @@ void Host_Name_f (void)
                if (strcmp(host_client->name, newName) != 0)
                        Con_Printf ("%s renamed to %s\n", host_client->name, newName);
        strcpy (host_client->name, newName);
-       host_client->edict->v->netname = host_client->name - pr_strings;
+       sv_player->v->netname = PR_SetString(host_client->name);
 
 // send notification to all clients
 
@@ -821,7 +822,7 @@ void Host_Tell_f(void)
        {
                if (!client->active || !client->spawned)
                        continue;
-               if (Q_strcasecmp(client->name, Cmd_Argv(1)))
+               if (strcasecmp(client->name, Cmd_Argv(1)))
                        continue;
                host_client = client;
                SV_ClientPrintf("%s", text);
@@ -840,7 +841,7 @@ void Host_Color_f(void)
 {
        int             top, bottom;
        int             playercolor;
-       dfunction_t *f;
+       mfunction_t *f;
        func_t  SV_ChangeTeam;
 
        if (Cmd_Argc() == 1)
@@ -882,13 +883,13 @@ void Host_Color_f(void)
                Con_DPrintf("Calling SV_ChangeTeam\n");
                pr_global_struct->time = sv.time;
                pr_globals[OFS_PARM0] = playercolor;
-               pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
+               pr_global_struct->self = EDICT_TO_PROG(sv_player);
                PR_ExecuteProgram (SV_ChangeTeam, "");
        }
        else
        {
                host_client->colors = playercolor;
-               host_client->edict->v->team = bottom + 1;
+               sv_player->v->team = bottom + 1;
 
                // send notification to all clients
                MSG_WriteByte (&sv.reliable_datagram, svc_updatecolors);
@@ -917,7 +918,7 @@ void Host_Kill_f (void)
        }
 
        pr_global_struct->time = sv.time;
-       pr_global_struct->self = EDICT_TO_PROG(sv_player);
+       pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
        PR_ExecuteProgram (pr_global_struct->ClientKill, "QC function ClientKill is missing");
 }
 
@@ -943,11 +944,11 @@ void Host_Pause_f (void)
 
                if (sv.paused)
                {
-                       SV_BroadcastPrintf ("%s paused the game\n", pr_strings + sv_player->v->netname);
+                       SV_BroadcastPrintf ("%s paused the game\n", PR_GetString(sv_player->v->netname));
                }
                else
                {
-                       SV_BroadcastPrintf ("%s unpaused the game\n",pr_strings + sv_player->v->netname);
+                       SV_BroadcastPrintf ("%s unpaused the game\n", PR_GetString(sv_player->v->netname));
                }
 
        // send notification to all clients
@@ -995,7 +996,7 @@ void Host_Spawn_f (void)
        client_t        *client;
        edict_t *ent;
        func_t RestoreGame;
-       dfunction_t *f;
+       mfunction_t *f;
 
        if (cmd_source == src_command)
        {
@@ -1013,6 +1014,8 @@ void Host_Spawn_f (void)
 // send all current names, colors, and frag counts
        SZ_Clear (&host_client->message);
 
+       ent = sv_player;
+
 // run the entrance script
        if (sv.loadgame)
        {
@@ -1033,13 +1036,11 @@ void Host_Spawn_f (void)
        {
                eval_t *val;
                // set up the edict
-               ent = host_client->edict;
-
-               memset (ent->v, 0, progs->entityfields * 4);
+               ED_ClearEdict(ent);
                ent->v->colormap = NUM_FOR_EDICT(ent);
                ent->v->team = (host_client->colors & 15) + 1;
-               ent->v->netname = host_client->name - pr_strings;
-               if ((val = GETEDICTFIELDVALUE(host_client->edict, eval_pmodel)))
+               ent->v->netname = PR_SetString(host_client->name);
+               if ((val = GETEDICTFIELDVALUE(ent, eval_pmodel)))
                        val->_float = host_client->pmodel;
 
                // copy spawn parms out of the client_t
@@ -1109,7 +1110,6 @@ void Host_Spawn_f (void)
 // in a state where it is expecting the client to correct the angle
 // and it won't happen if the game was just loaded, so you wind up
 // with a permanent head tilt
-       ent = EDICT_NUM( 1 + (host_client - svs.clients) );
        MSG_WriteByte (&host_client->message, svc_setangle);
        for (i=0 ; i < 2 ; i++)
                MSG_WriteAngle (&host_client->message, ent->v->angles[i] );
@@ -1185,7 +1185,7 @@ void Host_Kick_f (void)
                {
                        if (!host_client->active)
                                continue;
-                       if (Q_strcasecmp(host_client->name, Cmd_Argv(1)) == 0)
+                       if (strcasecmp(host_client->name, Cmd_Argv(1)) == 0)
                                break;
                }
        }
@@ -1224,7 +1224,7 @@ void Host_Kick_f (void)
                        SV_ClientPrintf ("Kicked by %s: %s\n", who, message);
                else
                        SV_ClientPrintf ("Kicked by %s\n", who);
-               SV_DropClient (false);
+               SV_DropClient (false); // kicked
        }
 
        host_client = save;
@@ -1403,7 +1403,7 @@ edict_t   *FindViewthing (void)
        for (i=0 ; i<sv.num_edicts ; i++)
        {
                e = EDICT_NUM(i);
-               if ( !strcmp (pr_strings + e->v->classname, "viewthing") )
+               if (!strcmp (PR_GetString(e->v->classname), "viewthing"))
                        return e;
        }
        Con_Printf ("No viewthing on map\n");