diff --git a/language.def_base b/language.def_base index 479304a6b..9458819e5 100644 --- a/language.def_base +++ b/language.def_base @@ -658,6 +658,9 @@ SWWM_LASTMONSTER = "\cf%s\cf killed the last monster. +%d\c-"; SWWM_NEWLORE = "New entries have been added to the Library."; SWWM_SELLEXTRA = "\cf%s\cf sold an extra %s\cf. +%d\c-"; SWWM_ALLCLEAR = "\cxLevel all clear! \cf+%d\c-"; +SWWM_NOTCLEAR = "\cxLevel not clear?\c-"; +SWWM_ALLCLEARAGAIN = "\cxLevel all clear... again!? \cf+%d\c-"; +SWWM_NOTCLEARAGAIN = "\cxLevel not clear... again??\c-"; SWWM_NEWMISSION = "Mission briefing has been updated."; // intermission tips SWWM_NINTERTIP = "120"; diff --git a/language.es_base b/language.es_base index 8a8a8faf7..2a4249f6f 100644 --- a/language.es_base +++ b/language.es_base @@ -585,6 +585,9 @@ SWWM_NEWLORE = "Hay nuevas entradas disponibles en la Biblioteca."; SWWM_SELLEXTRA = "\cf%s\cf vendió un %s\cf extra. +%d\c-"; SWWM_SELLEXTRA_FEM = "\cf%s\cf vendió una %s\cf extra. +%d\c-"; SWWM_ALLCLEAR = "\cx¡Nivel despejado! \cf+%d\c-"; +SWWM_NOTCLEAR = "\cx¿Nivel no despejado?\c-"; +SWWM_ALLCLEARAGAIN = "\cx¿¡Nivel despejado... otra vez!? \cf+%d\c-"; +SWWM_NOTCLEARAGAIN = "\cx¿¿Nivel no despejado... otra vez??\c-"; SWWM_NEWMISSION = "El informe de misión ha sido actualizado."; // intermission tips SWWM_INTERTIP = "Consejo #%d:"; diff --git a/language.version b/language.version index 55dc895d8..cfdf56613 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r278 \cu(Tue 16 Feb 00:51:55 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r278 \cu(2021-02-16 00:51:55)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r279 \cu(Tue 16 Feb 21:05:27 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r279 \cu(2021-02-16 21:05:27)\c-"; diff --git a/sndinfo.txt b/sndinfo.txt index 78a7656b9..e673290ac 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -8,6 +8,7 @@ bestsound sounds/CORK.ogg haha/dab sounds/DAB.ogg bruh sounds/BRUH.ogg squeak sounds/SQUEAK.ogg +recordscratch sounds/RECSCRAP.ogg saya/giggle1 sounds/saya/saya_giggle1.ogg saya/giggle2 sounds/saya/saya_giggle2.ogg diff --git a/sounds/RECSCRAP.ogg b/sounds/RECSCRAP.ogg new file mode 100644 index 000000000..8992addf9 Binary files /dev/null and b/sounds/RECSCRAP.ogg differ diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index fb3a0c6bb..00ef1572c 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -223,7 +223,7 @@ Class mkBloodDrop : Actor if ( !d.HitSector ) { d.HitSector = floorsector; - d.HitTexture = floorpic; + d.HitTexture = floorsector.GetTexture(0); } if ( d.HitTexture == skyflatnum ) { @@ -265,7 +265,7 @@ Class mkBloodDrop : Actor if ( !d.HitSector ) { d.HitSector = ceilingsector; - d.HitTexture = ceilingpic; + d.HitTexture = ceilingsector.GetTexture(1); } if ( (d.HitTexture == skyflatnum) || master ) { diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 8012e6252..b663f1a2b 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -232,9 +232,10 @@ Class SWWMHandler : EventHandler int lastkill[MAXPLAYERS]; int multilevel[MAXPLAYERS]; int lastitemcount[MAXPLAYERS]; + bool mnotify; bool allkills, allitems, allsecrets; bool mapclear; - bool mnotify; + int mapclearagain, restartmus; // for custom cheats transient ui int kcode; transient ui String kstr; @@ -1240,16 +1241,37 @@ Class SWWMHandler : EventHandler private void OneHundredPercentCheck() { + if ( !mapclear && (restartmus > 0) ) + { + restartmus--; + if ( restartmus == 0 ) S_ChangeMusic("*",force:true); + return; + } // ignore levels that have NOTHING - if ( (level.total_secrets <= 0) - && (level.total_items <= 0) - && (level.total_monsters <= 0) ) return; - if ( mapclear ) return; - if ( (level.found_secrets < level.total_secrets) - || (level.found_items < level.total_items) - || (level.killed_monsters < level.total_monsters) ) return; + if ( (level.total_secrets <= 0) && (level.total_items <= 0) && (level.total_monsters <= 0) ) return; + if ( mapclear ) + { + if ( (swwm_silencemap > 1) && (musplaying.name != "music/olg.ogg") ) + S_ChangeMusic("music/olg.ogg",force:true); + if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) + { + if ( swwm_silencemap > 0 ) + { + restartmus = 25; + S_ChangeMusic("",force:true); + S_StartSound("recordscratch",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + } + mapclear = false; + if ( mapclearagain > 1 ) Console.Printf(StringTable.Localize("$SWWM_NOTCLEARAGAIN")); + else Console.Printf(StringTable.Localize("$SWWM_NOTCLEAR")); + } + return; + } + if ( (level.found_secrets < level.total_secrets) || (level.found_items < level.total_items) || (level.killed_monsters < level.total_monsters) ) return; + restartmus = 0; mapclear = true; - Console.Printf(StringTable.Localize("$SWWM_ALLCLEAR"),5000); + if ( mapclearagain ) Console.Printf(StringTable.Localize("$SWWM_ALLCLEARAGAIN"),500); + else Console.Printf(StringTable.Localize("$SWWM_ALLCLEAR"),5000); S_StartSound("misc/wow",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); if ( swwm_silencemap == 1 ) S_ChangeMusic("",force:true); else if ( swwm_silencemap > 1 ) S_ChangeMusic("music/olg.ogg",force:true); @@ -1258,9 +1280,18 @@ Class SWWMHandler : EventHandler if ( !playeringame[i] || !players[i].mo ) continue; let f = Actor.Spawn("PartyTime",players[i].mo.pos); f.bAMBUSH = true; - SWWMCredits.Give(players[i],5000); - SWWMScoreObj.Spawn(5000,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2)); + if ( mapclearagain ) + { + SWWMCredits.Give(players[i],500); + SWWMScoreObj.Spawn(500,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2)); + } + else + { + SWWMCredits.Give(players[i],5000); + SWWMScoreObj.Spawn(5000,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2)); + } } + mapclearagain++; } override void WorldTick()