Skip to content

Commit

Permalink
MAPINFO|libcommon: Ignore 'skill' definitions (from ZDoom)
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Jul 9, 2014
1 parent 2db1ad4 commit 8362566
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 21 deletions.
2 changes: 1 addition & 1 deletion doomsday/plugins/common/include/hexlex.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class HexLex
*/
Str const *token();

int readNumber();
de::ddouble readNumber();
Str const *readString();
de::Uri readUri(de::String const &defaultScheme = "");

Expand Down
6 changes: 3 additions & 3 deletions doomsday/plugins/common/src/hexlex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,15 +197,15 @@ ddstring_s const *HexLex::token()
return &_token;
}

int HexLex::readNumber()
ddouble HexLex::readNumber()
{
if(!readToken())
{
syntaxError("Missing integer");
syntaxError("Missing number value");
}

char *stopper;
int number = strtol(Str_Text(&_token), &stopper, 0);
ddouble number = strtod(Str_Text(&_token), &stopper);
if(*stopper != 0)
{
Con_Error("HexLex: Non-numeric constant '%s' in \"%s\" on line #%i",
Expand Down
135 changes: 124 additions & 11 deletions doomsday/plugins/common/src/mapinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,44 +102,49 @@ void MapInfoParser(ddstring_s const *path)
{
if(!Str_CompareIgnoreCase(lexer.token(), "cd_start_track"))
{
setMusicCDTrack(MUSIC_STARTUP, lexer.readNumber());
setMusicCDTrack(MUSIC_STARTUP, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "cd_end1_track"))
{
setMusicCDTrack(MUSIC_ENDING1, lexer.readNumber());
setMusicCDTrack(MUSIC_ENDING1, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "cd_end2_track"))
{
setMusicCDTrack(MUSIC_ENDING2, lexer.readNumber());
setMusicCDTrack(MUSIC_ENDING2, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "cd_end3_track"))
{
setMusicCDTrack(MUSIC_ENDING3, lexer.readNumber());
setMusicCDTrack(MUSIC_ENDING3, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "cd_intermission_track"))
{
setMusicCDTrack(MUSIC_INTERMISSION, lexer.readNumber());
setMusicCDTrack(MUSIC_INTERMISSION, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "cd_title_track"))
{
setMusicCDTrack(MUSIC_TITLE, lexer.readNumber());
setMusicCDTrack(MUSIC_TITLE, (int)lexer.readNumber());
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "clearepisodes")) // ZDoom
{
LOG_WARNING("MAPINFO clearepisodes directives are not supported.");
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "clearskills")) // ZDoom
{
LOG_WARNING("MAPINFO clearskills directives are not supported.");
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "clusterdef")) // ZDoom
{
LOG_WARNING("MAPINFO cluster definitions are not supported.");

/*int const clusterId =*/ lexer.readNumber();
/*int const clusterId = (int)*/lexer.readNumber();

// Process optional tokens.
while(lexer.readToken())
Expand Down Expand Up @@ -337,7 +342,7 @@ void MapInfoParser(ddstring_s const *path)
}
if(!Str_CompareIgnoreCase(lexer.token(), "cluster"))
{
int const hubNum = lexer.readNumber();
int const hubNum = (int)lexer.readNumber();
if(hubNum < 1)
{
Con_Error("MapInfoParser: Invalid 'cluster' (i.e., hub) number '%s' in \"%s\" on line #%i",
Expand All @@ -348,7 +353,7 @@ void MapInfoParser(ddstring_s const *path)
}
if(!Str_CompareIgnoreCase(lexer.token(), "warptrans"))
{
int const mapWarpNum = lexer.readNumber();
int const mapWarpNum = (int)lexer.readNumber();
if(mapWarpNum < 1)
{
Con_Error("MapInfoParser: Invalid map warp-number '%s' in \"%s\" on line #%i",
Expand All @@ -359,7 +364,7 @@ void MapInfoParser(ddstring_s const *path)
}
if(!Str_CompareIgnoreCase(lexer.token(), "next"))
{
int const map = lexer.readNumber();
int const map = (int)lexer.readNumber();
if(map < 1)
{
Con_Error("MapInfoParser: Invalid map number '%s' in \"%s\" on line #%i",
Expand All @@ -370,7 +375,115 @@ void MapInfoParser(ddstring_s const *path)
}
if(!Str_CompareIgnoreCase(lexer.token(), "cdtrack"))
{
info->set("cdTrack", lexer.readNumber());
info->set("cdTrack", (int)lexer.readNumber());
continue;
}

lexer.unreadToken();
break;
}

continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "skill")) // ZDoom
{
LOG_WARNING("MAPINFO skill definitions are not supported.");

/*ddstring_s const *id =*/ lexer.readString();

// Process optional tokens.
while(lexer.readToken())
{
if(!Str_CompareIgnoreCase(lexer.token(), "acsreturn"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "aggressiveness"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "ammofactor"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "autousehealth"))
{
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "damagefactor"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "disablecheats"))
{
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "doubleammofactor"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "dropammofactor"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "easybossbrain"))
{
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "fastmonsters"))
{
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "key"))
{
lexer.readString();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "mustconfirm"))
{
lexer.readString(); // Optional?
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "name"))
{
lexer.readString();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "picname"))
{
lexer.readString();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "playerclassname"))
{
lexer.readString();
lexer.readString();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "respawnlimit"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "respawntime"))
{
lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "spawnfilter"))
{
lexer.readString();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "textcolor"))
{
lexer.readString();
continue;
}

Expand Down
2 changes: 1 addition & 1 deletion doomsday/plugins/common/src/p_sound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ void SndInfoParser(ddstring_s const *path)
{
// $map int(map-number) string(lump-name)
// Associate a music lump to a map.
int const mapNumber = lexer.readNumber();
int const mapNumber = (int)lexer.readNumber();
ddstring_t const *lumpName = lexer.readString();

if(mapNumber > 0)
Expand Down
10 changes: 5 additions & 5 deletions doomsday/plugins/hexen/src/sn_sonix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ void SndSeqParser(Str const *path)
*tempDataPtr++ = SS_CMD_PLAY;
*tempDataPtr++ = Def_Get(DD_DEF_SOUND_BY_NAME, Str_Text(lexer.readString()), 0);
*tempDataPtr++ = SS_CMD_DELAY;
*tempDataPtr++ = lexer.readNumber();
*tempDataPtr++ = (int)lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "playuntildone"))
Expand All @@ -227,24 +227,24 @@ void SndSeqParser(Str const *path)
verifySequencePtr(tempDataStart, tempDataPtr);

*tempDataPtr++ = SS_CMD_DELAYRAND;
*tempDataPtr++ = lexer.readNumber();
*tempDataPtr++ = lexer.readNumber();
*tempDataPtr++ = (int)lexer.readNumber();
*tempDataPtr++ = (int)lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "delay"))
{
verifySequencePtr(tempDataStart, tempDataPtr);

*tempDataPtr++ = SS_CMD_DELAY;
*tempDataPtr++ = lexer.readNumber();
*tempDataPtr++ = (int)lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "volume"))
{
verifySequencePtr(tempDataStart, tempDataPtr);

*tempDataPtr++ = SS_CMD_VOLUME;
*tempDataPtr++ = lexer.readNumber();
*tempDataPtr++ = (int)lexer.readNumber();
continue;
}
if(!Str_CompareIgnoreCase(lexer.token(), "stopsound"))
Expand Down

0 comments on commit 8362566

Please sign in to comment.