Update to ZDoom r2022:

- fixed: Auto-COMPAT_SHORTTEX for IWADs must be set per IWAD, not in general
  for Doom.
- added autodetection of Harmony's IWAD.
- Added SnailMan's updated language.ita file.
- Fixed: You should still be able to pick up ammo that has a max amount set
  at 0.
- Added a few NULL screen checks.


git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@655 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
Christoph Oelckers 2009-12-11 22:57:34 +00:00
parent ea05417c36
commit 359f75e98b
10 changed files with 245 additions and 25 deletions

View file

@ -1,3 +1,54 @@
December 11, 2009 (Changes by Graf Zahl)
- fixed: Auto-COMPAT_SHORTTEX for IWADs must be set per IWAD, not in general
for Doom.
- added autodetection of Harmony's IWAD.
- Added SnailMan's updated language.ita file.
December 11, 2009
- Fixed: You should still be able to pick up ammo that has a max amount set
at 0.
- Added a few NULL screen checks.
December 6, 2009 (Changes by Graf Zahl)
- added some code that prevents overlapping monsters from getting stuck in
each other. PIT_CheckThing will return true under the following contitions
now:
* It was called from P_Move
* The actor that is blocking the move already overlaps with the monster
that is being moved.
* the move will take the 2 actors further apart.
December 1, 2009
- Added another surface to receive a copy of the top back buffer immediately
before it is presented. This effectively produces a copy of the front
buffer without the performance penalty of GetFrontBufferData, so fullscreen
wipe preparation and screenshots are faster now. At lower resolutions,
always copying the backbuffer does incur a slight FPS hit, but it's
practically free at higher resolutions.
November 30, 2009
- The initial wipe screen is now kept in video memory. I had previously
assumed that since the wipes only run at 35 FPS, the time spent DMA'ing
it from system to video memory would be acceptable. Apparently I was wrong.
In particular, updating the same surface several times probably has to
synchronize between each one, making melt particularly slower than it
needs to be.
November 29, 2009 (Changes by Graf Zahl)
- fixed: Line_SetBlocking and Line_SetTextureScale were not in the list
of action specials used by DECORATE or MAPINFO.
- fixed: Teleport_NoStop was not in the line special function table.
November 28, 2009
- Fixed: The FPS meter cannot use I_MSTime(), because if the game is started
with +vid_fps 1, it can need the time before the timer is ready to start.
- Initialize TempRenderTexture and the back buffer to black upon creation.
- Fixed: Windowed mode always needs to draw to the temporary surface, even
when not gamma correcting, so that D3DFB::GetCurrentScreen() can read from
it.
- Use the spawned class's scale as default for ScriptedMarine instead of
DoomPlayer.
November 28, 2009 (Changes by Graf Zahl)
- fixed: Morph weapons weren't destroyed because the code checked for
them in the unmorphed player class.

View file

@ -1843,7 +1843,7 @@ static const char logbar[] = "\n<------------------------------->\n";
void C_MidPrint (FFont *font, const char *msg)
{
if (StatusBar == NULL)
if (StatusBar == NULL || screen == NULL)
return;
if (msg != NULL)

View file

@ -196,7 +196,7 @@ void CheckCompatibility(MapData *map)
FCompatValues *flags;
// When playing Doom IWAD levels force COMPAT_SHORTTEX.
if (Wads.GetLumpFile(map->lumpnum) == 1 && gameinfo.gametype == GAME_Doom && !(level.flags & LEVEL_HEXENFORMAT))
if (Wads.GetLumpFile(map->lumpnum) == 1 && (gameinfo.flags & GI_COMPATSHORTTEX) && !(level.flags & LEVEL_HEXENFORMAT))
{
ii_compatflags = COMPATF_SHORTTEX;
ib_compatflags = 0;

View file

@ -58,18 +58,18 @@ EIWADType gameiwad;
const IWADInfo IWADInfos[NUM_IWAD_TYPES] =
{
// banner text, autoname, fg color, bg color
{ "Final Doom: TNT - Evilution", "TNT", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/tnt.txt", GI_MAPxx },
{ "Final Doom: Plutonia Experiment", "Plutonia", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/plutonia.txt", GI_MAPxx },
{ "Final Doom: TNT - Evilution", "TNT", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/tnt.txt", GI_MAPxx | GI_COMPATSHORTTEX },
{ "Final Doom: Plutonia Experiment", "Plutonia", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/plutonia.txt", GI_MAPxx | GI_COMPATSHORTTEX },
{ "Hexen: Beyond Heretic", NULL, MAKERGB(240,240,240), MAKERGB(107,44,24), GAME_Hexen, "mapinfo/hexen.txt", GI_MAPxx },
{ "Hexen: Deathkings of the Dark Citadel", "HexenDK", MAKERGB(240,240,240), MAKERGB(139,68,9), GAME_Hexen, "mapinfo/hexen.txt", GI_MAPxx },
{ "Hexen: Demo Version", "HexenDemo",MAKERGB(240,240,240), MAKERGB(107,44,24), GAME_Hexen, "mapinfo/hexen.txt", GI_MAPxx | GI_SHAREWARE },
{ "DOOM 2: Hell on Earth", "Doom2", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom2.txt", GI_MAPxx },
{ "DOOM 2: Hell on Earth", "Doom2", MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom2.txt", GI_MAPxx | GI_COMPATSHORTTEX },
{ "Heretic Shareware", NULL, MAKERGB(252,252,0), MAKERGB(168,0,0), GAME_Heretic, "mapinfo/hereticsw.txt",GI_SHAREWARE },
{ "Heretic: Shadow of the Serpent Riders", NULL, MAKERGB(252,252,0), MAKERGB(168,0,0), GAME_Heretic, "mapinfo/heretic.txt", GI_MENUHACK_EXTENDED },
{ "Heretic", NULL, MAKERGB(252,252,0), MAKERGB(168,0,0), GAME_Heretic, "mapinfo/heretic.txt" },
{ "DOOM Shareware", NULL, MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom1.txt", GI_SHAREWARE },
{ "The Ultimate DOOM", "Doom1", MAKERGB(84,84,84), MAKERGB(168,168,168), GAME_Doom, "mapinfo/ultdoom.txt" },
{ "DOOM Registered", "Doom1", MAKERGB(84,84,84), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom1.txt" },
{ "DOOM Shareware", NULL, MAKERGB(168,0,0), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom1.txt", GI_SHAREWARE | GI_COMPATSHORTTEX },
{ "The Ultimate DOOM", "Doom1", MAKERGB(84,84,84), MAKERGB(168,168,168), GAME_Doom, "mapinfo/ultdoom.txt", GI_COMPATSHORTTEX },
{ "DOOM Registered", "Doom1", MAKERGB(84,84,84), MAKERGB(168,168,168), GAME_Doom, "mapinfo/doom1.txt", GI_COMPATSHORTTEX },
{ "Strife: Quest for the Sigil", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101), GAME_Strife, "mapinfo/strife.txt", GI_MAPxx },
{ "Strife: Teaser (Old Version)", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101), GAME_Strife, "mapinfo/strife.txt", GI_MAPxx | GI_SHAREWARE },
{ "Strife: Teaser (New Version)", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101), GAME_Strife, "mapinfo/strife.txt", GI_MAPxx | GI_SHAREWARE | GI_TEASER2 },
@ -81,6 +81,7 @@ const IWADInfo IWADInfos[NUM_IWAD_TYPES] =
{ "Chex(R) Quest", "Chex1", MAKERGB(255,255,0), MAKERGB(0,192,0), GAME_Chex, "mapinfo/chex.txt" },
{ "Chex(R) Quest 3", "Chex3", MAKERGB(255,255,0), MAKERGB(0,192,0), GAME_Chex, "mapinfo/chex3.txt" },
{ "Action Doom 2: Urban Brawl", "UrbanBrawl",MAKERGB(168,168,0), MAKERGB(168,0,0), GAME_Doom, "mapinfo/doom2.txt" },
{ "Harmony", "Harmony", MAKERGB(110,180,230), MAKERGB(69,79,126), GAME_Doom, "mapinfo/doom2.txt" },
//{ "ZDoom Engine", NULL, MAKERGB(168,0,0), MAKERGB(168,168,168) },
};
@ -111,6 +112,7 @@ static const char *IWADNames[] =
"chex.wad",
"chex3.wad",
"action2.wad",
"harm1.wad",
#ifdef unix
"DOOM2.WAD", // Also look for all-uppercase names
"PLUTONIA.WAD",
@ -134,6 +136,7 @@ static const char *IWADNames[] =
"CHEX.WAD",
"CHEX3.WAD",
"ACTION2.WAD",
"HARM1.WAD",
#endif
NULL
};
@ -169,6 +172,9 @@ static EIWADType ScanIWAD (const char *iwad)
"CYCLA1",
"FLMBA1",
"MAPINFO",
"0HAWK01",
"0CARA3",
"0NOSE1",
{ 'G','A','M','E','I','N','F','O' },
"E2M1","E2M2","E2M3","E2M4","E2M5","E2M6","E2M7","E2M8","E2M9",
"E3M1","E3M2","E3M3","E3M4","E3M5","E3M6","E3M7","E3M8","E3M9",
@ -199,6 +205,9 @@ static EIWADType ScanIWAD (const char *iwad)
Check_Cycla1,
Check_Flmba1,
Check_Mapinfo,
Check_Hawk,
Check_Car,
Check_Nose,
Check_Gameinfo,
Check_e2m1
};
@ -287,6 +296,10 @@ static EIWADType ScanIWAD (const char *iwad)
{
return IWAD_ActionDoom2;
}
else if (lumpsfound[Check_Hawk] && lumpsfound[Check_Car] && lumpsfound[Check_Nose])
{
return IWAD_Harmony;
}
else if (lumpsfound[Check_FreeDoom])
{
// Is there a 100% reliable way to tell FreeDoom and FreeDM

View file

@ -560,7 +560,7 @@ void D_Display ()
bool wipe;
bool hw2d;
if (nodrawers)
if (nodrawers || screen == NULL)
return; // for comparative timing / profiling
cycle_t cycles;

View file

@ -81,6 +81,7 @@ enum EIWADType
IWAD_ChexQuest,
IWAD_ChexQuest3,
IWAD_ActionDoom2,
IWAD_Harmony,
IWAD_Custom,
NUM_IWAD_TYPES

View file

@ -1190,7 +1190,7 @@ bool AInventory::TryPickup (AActor *&toucher)
ItemFlags &= ~IF_PICKUPGOOD;
GoAwayAndDie ();
}
else if (MaxAmount == 0)
else if (MaxAmount == 0 && !IsKindOf(RUNTIME_CLASS(AAmmo)))
{
// Special case: If an item's MaxAmount is 0, you can still pick it
// up if it is autoactivate-able.

View file

@ -42,6 +42,7 @@
#define GI_SHAREWARE 0x00000002
#define GI_MENUHACK_EXTENDED 0x00000004 // (Heretic)
#define GI_TEASER2 0x00000008 // Alternate version of the Strife Teaser
#define GI_COMPATSHORTTEX 0x00000010 // always force COMPAT_SHORTTEX for IWAD maps.
#include "gametype.h"

View file

@ -586,8 +586,41 @@ void gl_RenderModel(GLSprite * spr, int cm)
}
Matrix3x4 ModelToWorld;
Matrix3x4 LightTransform;
Matrix3x4 *mat;
// The light transform matrix only contains the inverse rotations and scalings
/*
LightTransform.MakeIdentity();
gl.Scalef(
1./FIXED2FLOAT(spr->actor->scaleX) * smf->xscale,
1./FIXED2FLOAT(spr->actor->scaleY) * smf->zscale, // y scale for a sprite means height, i.e. z in the world!
1./FIXED2FLOAT(spr->actor->scaleX) * smf->yscale);
// [BB] Workaround for the missing pitch information.
if ( (smf->flags & MDL_PITCHFROMMOMENTUM) )
{
const double x = static_cast<double>(spr->actor->velx);
const double y = static_cast<double>(spr->actor->vely);
const double z = static_cast<double>(spr->actor->velz);
// [BB] Calculate the pitch using spherical coordinates.
const double pitch = atan( z/sqrt(x*x+y*y) ) / M_PI * 180;
LightTransform.Rotate(0,0,1,-pitch);
}
if( smf->flags & MDL_ROTATING )
{
float offsetAngle = 0.;
const float time = smf->rotationSpeed*GetTimeFloat()/200.;
offsetAngle = ( (time - static_cast<int>(time)) *360. );
LightTransform.Rotate(smf->xrotate, smf->yrotate, smf->zrotate, -offsetAngle);
}
LightTransform.Rotate(0,1,0, ANGLE_TO_FLOAT(spr->actor->angle));
*/
if (gl_fogmode != 2)
{
// Model space => World space

View file

@ -31,6 +31,25 @@ QUITMSG12 = "senti amico, esci adesso\ne perdi il tuo body count!";
QUITMSG13 = "esci pure. quanto tornerai\nti aspettero' con un bastone.";
QUITMSG14 = "sei fortunato che non ti picchi\nper aver pensato di andartene.";
// Quit Strife messages
QUITMSG15 = "dove stai andando?!\ne la ribellione?";
QUITMSG16 = "macellus interruptus...\nche presa in giro!";
QUITMSG17 = "ma tu sei la speranza\n-- la mia unica possibilita'!!";
QUITMSG18 = "nessuno gira le spalle a Blackbird.";
QUITMSG19 = "pensavo tu fossi diverso...";
QUITMSG20 = "ma bravo! uccidi e scappi!";
QUITMSG21 = "puoi uscire...\nma non puoi nasconderti...";
QUITMSG22 = "eehi, che problema c'e'?\nla mamma ha detto che e' ora di cena?";
// Quit Chex messages
QUITMSG23 = "Non uscire ora, ci sono ancora\nflemoidi a piede libero!";
QUITMSG24 = "Non arrenderti -- i flemoidi\nci sopraffaranno!";
QUITMSG25 = "Non andartene ora.\nCi serve il tuo aiuto!";
QUITMSG26 = "Spero tu stia solo facendo un\nbreak per prendere un Chex(R) party mix.";
QUITMSG27 = "non uscire ora!\nCi serve il tuo aiuto!";
QUITMSG28 = "Non abbandonare la\nFederazione Intergalattica dei Cereali!";
QUITMSG29 = "Il vero guerriero Chex(R)\nnon si arrenderebbe cosi' in fretta!";
LOADNET = "non puoi caricare una partita durante un netgame!\n\npremi un tasto.";
QLOADNET = "non puoi fare un quickload durante un netgame!\n\npremi un tasto.";
QSAVESPOT = "non hai ancora scelto uno slot per il quicksave!\n\npremi un tasto.";
@ -91,6 +110,7 @@ PD_REDK = "Ti serve una chiave rossa per aprire questa porta";
PD_YELLOWK = "Ti serve una chiave gialla per aprire questa porta";
GGSAVED = "gioco salvato";
HUSTR_MSGU = "[Messaggio non inviato]";
PICKUP_PISTOL_DROPPED = "Raccolta una pistola.";
// Level names
HUSTR_E1M1 = "E1M1: Hangar";
@ -254,6 +274,8 @@ STSTR_BEHOLD = "inVuln, BerSerk, Invisib, Tuta anti-Rad, MAppa, o Amplif-Luce";
STSTR_BEHOLDX = "Power-up concesso/tolto";
STSTR_CHOPPERS = "Ora vai e segali tutti!";
STSTR_CLEV = "Cambio di livello...\n";
TXT_BUDDHAON = "Modalita' Buddha attivata";
TXT_BUDDHAOFF = "Modalita' Buddha disattivata";
E1TEXT =
"Una volta che hai eliminato i cattivi e\n"
@ -559,13 +581,15 @@ PD_BLUESO = "ti serve una chiave-teschio blu per attivare questo oggetto ";
PD_REDSO = "ti serve una chiave-teschio rossa per attivare questo oggetto ";
PD_YELLOWSO = "ti serve una chiave-teschio gialla per attivare questo oggetto ";
PD_ALLKEYS = "Ti servono tutte le chiavi";
// Gameflow messages
TXT_FRAGLIMIT = "Fraglimit raggiunto.";
TXT_TIMELIMIT = "Timelimit raggiunto.";
// Spree messages
SPREEKILLSELF = "%o stava bene finche' %g non si e' ucciso!";
SPREEKILLSELF = "%o stava andando bene finche' non si e' ucciso da solo!";
SPREEOVER = "La sequela di frag di %o e' stata terminata da %k";
SPREE5 = "%k e' preda di un momento omicida!";
SPREE10 = "%k sta facendo un massacro!";
@ -578,6 +602,10 @@ MULTI2 = "Frag doppio!";
MULTI3 = "Frag multiplo!";
MULTI4 = "Frag ultra!";
MULTI5 = "Frag DA PAURA!";
//MULTI2 = "Double kill!";
//MULTI3 = "Multi kill!";
//MULTI4 = "Ultra kill!";
//MULTI5 = "Monster kill!";
// Obituary strings
// First the self-kills, then the other-kills
@ -588,24 +616,24 @@ OB_EXIT = "%o ha provato a uscire.";
OB_WATER = "%o non sapeva nuotare.";
OB_SLIME = "%o e' mutato.";
OB_LAVA = "%o si e' sciolto.";
OB_BARREL = "%o e' esploso.";
OB_BARREL = "%o ha fatto bum.";
OB_SPLASH = "%o si e' trovato nel posto sbagliato.";
OB_R_SPLASH = "%o avrebbe dovuto allontanarsi.";
OB_ROCKET = "%o avrebbe dovuto allontanarsi.";
OB_KILLEDSELF = "%o ha ucciso se stesso.";
OB_STEALTHBABY = "%o pensava che %g avesse visto un arachnotron.";
OB_STEALTHVILE = "%o pensava che %g avesse visto un Arch-Vile.";
OB_STEALTHBARON = "%o pensava che %g avesse visto un Barone Infernale.";
OB_STEALTHCACO = "%o pensava che %g avesse visto un cacodemone.";
OB_STEALTHCHAINGUY = "%o pensava che %g avesse visto uno zombie commando.";
OB_STEALTHDEMON = "%o pensava che %g avesse visto un demone.";
OB_STEALTHKNIGHT = "%o pensava che %g avesse visto un Cavaliere Infernale.";
OB_STEALTHIMP = "%o pensava che %g avesse visto un imp.";
OB_STEALTHFATSO = "%o pensava che %g avesse visto un mancubo.";
OB_STEALTHUNDEAD = "%o pensava che %g avesse visto un revenant.";
OB_STEALTHSHOTGUY = "%o pensava che %g avesse visto un sergente.";
OB_STEALTHZOMBIE = "%o pensava che %g avesse visto uno zombie.";
OB_STEALTHBABY = "a %o sembrava di aver visto un arachnotron.";
OB_STEALTHVILE = "a %o sembrava di aver visto un Arch-Vile.";
OB_STEALTHBARON = "a %o sembrava di aver visto un Barone Infernale.";
OB_STEALTHCACO = "a %o sembrava di aver visto un cacodemone.";
OB_STEALTHCHAINGUY = "a %o sembrava di aver visto uno zombie commando.";
OB_STEALTHDEMON = "a %o sembrava di aver visto un demone.";
OB_STEALTHKNIGHT = "a %o sembrava di aver visto un Cavaliere Infernale.";
OB_STEALTHIMP = "a %o sembrava di aver visto un imp.";
OB_STEALTHFATSO = "a %o sembrava di aver visto un mancubo.";
OB_STEALTHUNDEAD = "a %o sembrava di aver visto un revenant.";
OB_STEALTHSHOTGUY = "a %o sembrava di aver visto un sergente.";
OB_STEALTHZOMBIE = "a %o sembrava di aver visto uno zombie.";
OB_UNDEADHIT = "%o e' stato massacrato da un revenant.";
OB_IMPHIT = "%o e' stato squarciato da un imp.";
OB_CACOHIT = "%o si e' avvicinato troppo a un cacodemone.";
@ -629,6 +657,7 @@ OB_BABY = "%o ha permesso che un arachnotron l'uccidesse.";
OB_CYBORG = "%o e' stato spiaccicato da un Cyberdemonio.";
OB_WOLFSS = "%o ha incontrato un Nazista.";
OB_DOG = "%o e' stato sbranato da un cane.";
OB_CHICKEN = "%o e' stato beccato a morte.";
OB_BEAST = "%o e' stato carbonizzato da una bestia.";
OB_CLINK = "%o e' stato squarciato da un lapillo.";
@ -667,7 +696,7 @@ OB_MONTELEFRAG = "%o si e' fatto telefraggare.";
OB_DEFAULT = "%o e' morto.";
OB_FRIENDLY1 = "%k falcia via un compagno.";
OB_FRIENDLY2 = "%k controlla gli occhiali di %p.";
OB_FRIENDLY2 = "%k si controlla gli occhiali.";
OB_FRIENDLY3 = "%k regala un frag all'altro team.";
OB_FRIENDLY4 = "%k perde un altro amico.";
@ -1016,3 +1045,95 @@ BBA_SCROTUM = "%o ha subito la separazione dello scroto";
BBA_POPULATION = "%o si e' offerto per il controllo della popolazione";
BBA_SUICIDE = "%o si e' suicidato";
BBA_DARWIN = "%o ha ricevuto il Darwin Award";
// Chex Quest Strings
CHUSTR_E1M1 = "E1M1: Zona di Atterraggio";
CHUSTR_E1M2 = "E1M2: Struttura di Immagazzinamento";
CHUSTR_E1M3 = "E1M3: Laboratorio Sperimentale";
CHUSTR_E1M4 = "E1M4: Arboreto";
CHUSTR_E1M5 = "E1M5: Caverne di Bazoik";
CE1TEXT =
"Missione compiuta.\n"
"\n"
"Sei preparato per la prossima missione?\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"Premi il tasto 'esc' per continuare...";
CE2TEXT = "Ce l'hai fatta!";
CE3TEXT = "Meraviglioso!";
CE4TEXT = "Fantastico";
CLOADNET = "non puoi caricare una quest durante una net quest!\n\npress a key.";
CQSPROMPT = "sovrascrivere il salvataggio\n\n'%s'?\n\npremi y oppure n.";
CQLOADNET = "non puoi fare un quickload durante una netquest!\n\npremi un tasto.";
CQLPROMPT = "vuoi fare un quickload della quest\n\n'%s'?\n\npremi y oppure n.";
CNEWGAME = "non puoi iniziare una nuova quest\ndurante una quest in rete.\n\npremi un tasto.";
CNIGHTMARE = "Attento, sara' dura.\nVuoi continuare?\n\npremi y oppure n.";
CSWSTRING = "questa e' Chex(R) Quest. cerca\n\nfuturi livelli su www.chexquest.com.\n\npremi un tasto.";
CNETEND = "non puoi terminare una netquest!\n\npremi un tasto";
CENDGAME = "sei sicuro di voler terminare la quest?\n\npremi y oppure n.";
GOTCHEXARMOR = "Raccolta un'Armatura Chex(R).";
GOTSUPERCHEXARMOR = "Raccolta la Super Armatura Chex(R)!";
GOTWATER = "Raccolto un bicchiere d'acqua.";
GOTREPELLENT = "Raccolto del repellente allo slime.";
GOTBREAKFAST = "Colazione da supercarica!";
GOTCBLUEKEY = "Raccolta una chiave blu.";
GOTCYELLOWKEY = "Raccolta una chiave gialla.";
GOTCREDKEY = "Raccolta una chiave rossa.";
GOTFRUIT = "Raccolto un vassoio di frutta.";
GOTVEGETABLESNEED = "La verdura ti fa DAVVERO bene!";
GOTVEGETABLES = "Raccolto un vassoio di verdura.";
GOTSLIMESUIT = "Raccolto un vestito a prova di slime";
GOTCHEXMAP = "Trovata una mappa computerizzata";
GOTZORCHRECHARGE = "Raccolta una ricarica di mini zorch.";
GOTMINIZORCHPACK = "Raccolta una scatola di mini zorch.";
GOTPROPULSORRECHARGE = "Raccolta una ricarica di zorch a propulsione.";
GOTPROPULSORPACK = "Raccolta una scatola di zorch a propulsione.";
GOTPHASINGZORCHERRECHARGE = "Raccolta una ricarica per zorcher a phasing";
GOTPHASINGZORCHERPACK = "Raccolta una scatola per zorcher a phasing.";
GOTLARGEZORCHERRECHARGE = "Raccolta una ricarica per zorcher grande.";
GOTLARGEZORCHERPACK = "Raccolta una scatola per zorcher grande.";
GOTZORCHPACK = "Raccolto uno ZorchZaino!";
GOTLAZDEVICE = "Hai trovato il dispositivo LAZ! Cavolo!";
GOTRAPIDZORCHER = "Hai trovato il zorcher rapido!";
GOTSUPERBOOTSPORK = "Hai trovato il super bootspork!";
GOTZORCHPROPULSOR = "Hai trovato il propulsore zorch!";
GOTPHASINGZORCHER = "Hai trovato il zorcher a phasing!";
GOTLARGEZORCHER = "Hai trovato il zorcher grande!";
GOTSUPERLARGEZORCHER = "Hai trovato il mega zorcher!";
GOTMINIZORCHER = "Raccolto un mini zorcher.";
STSTR_CDQDON = "Modalita' invincibile attivata";
STSTR_CDQDOFF = "Modalita' invincibile disattivata";
STSTR_CFAADDED = "Zorch aggiunto";
STSTR_CKFAADDED = "Super Zorch aggiunto";
STSTR_CCHOPPERS = "... Mangia Chex(R)!";
OB_COMMONUS = "%o e' stato coperto di slime da un flemoid.";
OB_BIPEDICUS = "%o e' stato coperto di slime da un bipedicus.";
OB_BIPEDICUS2 = "%o e' stato coperto di slime da un bipedicus corazzato.";
OB_CYCLOPTIS = "%o e' stato coperto di slime da un cycloptis.";
OB_FLEMBRANE = "%o e' stato sconfitto dalla Flembrana.";
OB_MPSPOON = "%o e' stato imboccato da %k.";
OB_MPBOOTSPORK = "%o e' stato mischiato ben bene dal bootspork di %k.";
OB_MPZORCH = "%o e' stato zorchato da %k.";
OB_MPMEGAZORCH = "%o e' stato colpito dal mega-zorcher di %k.";
OB_MPRAPIDZORCH = "%o e' stato rapid-zorchato da %k.";
OB_MPPROPULSOR = "%o e' stato zorchato dal propulsore di %k.";
OB_MPP_SPLASH = "%o e' stato colpito dal propulsore di %k.";
OB_MPPHASEZORCH = "%o e' stato phase-zorchato da %k.";
OB_MPLAZ_BOOM = "%o e' stato preda del dispositivo LAZ di %k.";
OB_MPLAZ_SPLASH = "%o e' stato lazzato da %k.";