level_info_t *FindLevelByName( const char *mapname ) { int i = FindWadLevelInfo( mapname ); if ( i > -1 ) return &wadlevelinfos[i]; else return NULL; }
level_info_t *FindLevelInfo (char *mapname) { int i; if ((i = FindWadLevelInfo (mapname)) > -1) return (level_info_t *)(wadlevelinfos + i); else return FindDefLevelInfo (mapname); }
level_info_t *FindLevelInfo (const char *mapname) { int i; if ((i = FindWadLevelInfo (mapname)) > -1) return &wadlevelinfos[i]; else { if (TheDefaultLevelInfo.LevelName.IsEmpty()) { uppercopy(TheDefaultLevelInfo.skypic1, "SKY1"); uppercopy(TheDefaultLevelInfo.skypic2, "SKY1"); TheDefaultLevelInfo.LevelName = "Unnamed"; } return &TheDefaultLevelInfo; } }
level_info_t *FindLevelInfo (const char *mapname, bool allowdefault) { int i; if ((i = FindWadLevelInfo (mapname)) > -1) { return &wadlevelinfos[i]; } else if (allowdefault) { if (TheDefaultLevelInfo.LevelName.IsEmpty()) { TheDefaultLevelInfo.SkyPic2 = TheDefaultLevelInfo.SkyPic1 = "SKY1"; TheDefaultLevelInfo.LevelName = "Unnamed"; } return &TheDefaultLevelInfo; } return NULL; }
// // G_ParseMapInfo // Parses the MAPINFO lumps of all loaded WADs and generates // data for wadlevelinfos and wadclusterinfos. // void G_ParseMapInfo (void) { int lump, lastlump = 0; level_pwad_info_t defaultinfo; level_pwad_info_t *levelinfo; int levelindex; cluster_info_t *clusterinfo; int clusterindex; DWORD levelflags; while ((lump = W_FindLump ("MAPINFO", &lastlump)) != -1) { SetLevelDefaults (&defaultinfo); SC_OpenLumpNum (lump, "MAPINFO"); while (SC_GetString ()) { switch (SC_MustMatchString (MapInfoTopLevel)) { case MITL_DEFAULTMAP: SetLevelDefaults (&defaultinfo); ParseMapInfoLower (MapHandlers, MapInfoMapLevel, &defaultinfo, NULL, 0); break; case MITL_MAP: // map <MAPNAME> <Nice Name> levelflags = defaultinfo.flags; SC_MustGetString (); if (IsNum (sc_String)) { // MAPNAME is a number, assume a Hexen wad int map = atoi (sc_String); sprintf (sc_String, "MAP%02d", map); SKYFLATNAME[5] = 0; HexenHack = true; // Hexen levels are automatically nointermission // and even lighting and no auto sound sequences levelflags |= LEVEL_NOINTERMISSION | LEVEL_EVENLIGHTING | LEVEL_SNDSEQTOTALCTRL; } levelindex = FindWadLevelInfo (sc_String); if (levelindex == -1) { levelindex = numwadlevelinfos++; wadlevelinfos = (level_pwad_info_t *)Realloc (wadlevelinfos, sizeof(level_pwad_info_t)*numwadlevelinfos); } levelinfo = wadlevelinfos + levelindex; memcpy (levelinfo, &defaultinfo, sizeof(*levelinfo)); uppercopy (levelinfo->mapname, sc_String); SC_MustGetString (); ReplaceString (&levelinfo->level_name, sc_String); // Set up levelnum now so that the Teleport_NewMap specials // in hexen.wad work without modification. if (!strnicmp (levelinfo->mapname, "MAP", 3) && levelinfo->mapname[5] == 0) { int mapnum = atoi (levelinfo->mapname + 3); if (mapnum >= 1 && mapnum <= 99) levelinfo->levelnum = mapnum; } ParseMapInfoLower (MapHandlers, MapInfoMapLevel, levelinfo, NULL, levelflags); break; case MITL_CLUSTERDEF: // clusterdef <clusternum> SC_MustGetNumber (); clusterindex = FindWadClusterInfo (sc_Number); if (clusterindex == -1) { clusterindex = numwadclusterinfos++; wadclusterinfos = (cluster_info_t *)Realloc (wadclusterinfos, sizeof(cluster_info_t)*numwadclusterinfos); memset (wadclusterinfos + clusterindex, 0, sizeof(cluster_info_t)); } clusterinfo = wadclusterinfos + clusterindex; clusterinfo->cluster = sc_Number; ParseMapInfoLower (ClusterHandlers, MapInfoClusterLevel, NULL, clusterinfo, 0); break; } } SC_Close (); } }