void listquests(bool completed, g3d_gui &g) { for(rpgquest *q = quests; q; q = q->next) if(q->completed==completed) { defformatstring(info)("%s: %s", q->npc, q->questline); g.text(info, 0xAAAAAA, "info"); } }
void renderscoreboard(g3d_gui &g, bool firstpass) { const ENetAddress *address = connectedpeer(); if(showservinfo && address) { string hostname; if(enet_address_get_host_ip(address, hostname, sizeof(hostname)) >= 0) { if(servinfo[0]) g.titlef("%.25s", 0xFFFF80, NULL, servinfo); else g.titlef("%s:%d", 0xFFFF80, NULL, hostname, address->port); } } g.pushlist(0); g.text(server::modename(gamemode), 0xFFFF80); g.separator(); const char *mname = getclientmap(); g.text(mname[0] ? mname : "[new map]", 0xFFFF80); if(m_timed && mname[0] && (maplimit >= 0 || intermission)) { g.separator(); if(intermission) g.text("intermission", 0xFFFF80); else { int secs = max(maplimit-lastmillis, 0)/1000, mins = secs/60; secs %= 60; g.pushlist(); g.strut(mins >= 10 ? 4.5f : 3.5f); g.textf("%d:%02d", 0xFFFF80, NULL, mins, secs); g.poplist(); } } if(paused || ispaused()) { g.separator(); g.text("paused", 0xFFFF80); } g.poplist(); g.separator(); int numgroups = groupplayers(); loopk(numgroups) { if((k%2)==0) g.pushlist(); // horizontal scoregroup &sg = *groups[k]; int bgcolor = sg.team && m_teammode ? (isteam(player1->team, sg.team) ? 0x3030C0 : 0xC03030) : 0, fgcolor = 0xFFFF80; g.pushlist(); // vertical g.pushlist(); // horizontal #define loopscoregroup(o, b) \ loopv(sg.players) \ { \ fpsent *o = sg.players[i]; \ b; \ } g.pushlist(); if(sg.team && m_teammode) { g.pushlist(); g.background(bgcolor, numgroups>1 ? 3 : 5); g.strut(1); g.poplist(); } g.text("", 0, " "); loopscoregroup(o, { if(o==player1 && highlightscore && (multiplayer(false) || demoplayback || players.length() > 1)) { g.pushlist(); g.background(0x808080, numgroups>1 ? 3 : 5); } const playermodelinfo &mdl = getplayermodelinfo(o); const char *icon = sg.team && m_teammode ? (isteam(player1->team, sg.team) ? mdl.blueicon : mdl.redicon) : mdl.ffaicon; g.text("", 0, icon); if(o==player1 && highlightscore && (multiplayer(false) || demoplayback || players.length() > 1)) g.poplist(); }); g.poplist(); if(sg.team && m_teammode) { g.pushlist(); // vertical if(sg.score>=10000) g.textf("%s: WIN", fgcolor, NULL, sg.team); else g.textf("%s: %d", fgcolor, NULL, sg.team, sg.score); g.pushlist(); // horizontal } if(!cmode || !cmode->hidefrags()) { g.pushlist(); g.strut(7); g.text("frags", fgcolor); loopscoregroup(o, g.textf("%d", 0xFFFFDD, NULL, o->frags)); g.poplist(); } if(multiplayer(false) || demoplayback) { if(showpj) { g.pushlist(); g.strut(6); g.text("pj", fgcolor); loopscoregroup(o, { if(o->state==CS_LAGGED) g.text("LAG", 0xFFFFDD); else g.textf("%d", 0xFFFFDD, NULL, o->plag); }); g.poplist(); } if(showping) { g.pushlist(); g.text("ping", fgcolor); g.strut(6); loopscoregroup(o, { fpsent *p = o->ownernum >= 0 ? getclient(o->ownernum) : o; if(!p) p = o; if(!showpj && p->state==CS_LAGGED) g.text("LAG", 0xFFFFDD); else g.textf("%d", 0xFFFFDD, NULL, p->ping); }); g.poplist(); }