diff --git a/FuturePlans.md b/FuturePlans.md index d5129c9dc..3f2d432b9 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -17,7 +17,7 @@ after the first release. - Ray-Khom (UnSX) * Additional Demolitionist Menu features - Radio (add-on) - - Pong minigame + - Minigames (pong and other stuff) - Selling items at the store * Achievements * Collectable items (will recycle Chanceboxes for this) diff --git a/language.def_menu b/language.def_menu index dd9a04a85..f439bed06 100644 --- a/language.def_menu +++ b/language.def_menu @@ -209,6 +209,8 @@ SWWM_STORETAB = "Store"; SWWM_STOREFULL = "You can't hold more of that"; SWWM_STOREMUNS = "You don't have enough money"; SWWM_NOSTORE = "(no items left to buy)"; +SWWM_RADIOTAB = "Radio"; +SWWM_GAMETAB = "Games"; SWWM_TRADETAB = "Trading"; SWWM_TRADEFULL = "They can't hold more of that"; SWWM_NOTRADE = "(no units found nearby for trade)"; diff --git a/language.es_menu b/language.es_menu index 1cdb860fa..7b393e226 100644 --- a/language.es_menu +++ b/language.es_menu @@ -206,6 +206,7 @@ SWWM_STORETAB = "Tienda"; SWWM_STOREFULL = "No puedes llevar más de eso"; SWWM_STOREMUNS = "No tienes suficiente dinero"; SWWM_NOSTORE = "(no queda nada que comprar)"; +SWWM_GAMETAB = "Juegos"; SWWM_TRADETAB = "Intercambio"; SWWM_TRADEFULL = "No puede llevar más de eso"; SWWM_NOTRADE = "(no hay unidades con las que intercambiar)"; diff --git a/language.version b/language.version index 39822f445..89481b563 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- r479 (Mon 10 Aug 16:41:36 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- r480 (Fri 14 Aug 16:33:11 CEST 2020)"; diff --git a/zscript/swwm_danmaku.zsc b/zscript/swwm_danmaku.zsc index 885bf47a6..b6d30c597 100644 --- a/zscript/swwm_danmaku.zsc +++ b/zscript/swwm_danmaku.zsc @@ -93,7 +93,7 @@ Class EvisceratorChunk : Actor +BOUNCEONWALLS; +BOUNCEONFLOORS; +BOUNCEONCEILINGS; - //+ALLOWBOUNCEONACTORS; + //+ALLOWBOUNCEONACTORS; // uncomment when a new gzdoom version lands with the fix for this +NODAMAGETHRUST; +DONTBOUNCEONSKY; +CANBOUNCEWATER; diff --git a/zscript/swwm_menu.zsc b/zscript/swwm_menu.zsc index 137676276..54e7c917a 100644 --- a/zscript/swwm_menu.zsc +++ b/zscript/swwm_menu.zsc @@ -9,6 +9,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu TAB_KEYS, TAB_LIBRARY, TAB_STORE, + TAB_RADIO, + TAB_GAME, TAB_TRADING, TAB_CHAT, TAB_SECRET, @@ -101,7 +103,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu LoreSeparator = TexMan.CheckForTexture("graphics/KBase/LibraryTabSeparator.png",TexMan.Type_MiscPatch); LoreSeparatorW = TexMan.CheckForTexture("graphics/KBase/LibraryTabSeparatorJP.png",TexMan.Type_MiscPatch); curtab = CVar.GetCVar('swwm_lasttab',players[consoleplayer]).GetInt(); - int maxtab = multiplayer?TAB_CHAT:TAB_STORE; + int maxtab = multiplayer?TAB_CHAT:TAB_GAME; if ( (curtab < TAB_MISSION) || (curtab > maxtab) ) curtab = TAB_MISSION; if ( curtab == TAB_LIBRARY ) sel1 = CVar.GetCVar('swwm_lastloretab',players[consoleplayer]).GetInt(); else if ( curtab == TAB_STATS ) sel1 = CVar.GetCVar('swwm_laststattab',players[consoleplayer]).GetInt(); @@ -274,7 +276,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu kcode = 0; break; } - int maxtab = multiplayer?TAB_CHAT:TAB_STORE; + int maxtab = multiplayer?TAB_CHAT:TAB_GAME; switch ( mkey ) { case MKEY_BACK: @@ -705,10 +707,11 @@ Class SWWMKnowledgeBaseMenu : GenericMenu static const string tabnames[] = { "$SWWM_MISSTAB", "$SWWM_STATTAB", "$SWWM_INVTAB", "$SWWM_KEYTAB", - "$SWWM_KBASETAB", "$SWWM_STORETAB", "$SWWM_TRADETAB", "$SWWM_CHATTAB" + "$SWWM_KBASETAB", "$SWWM_STORETAB", "$SWWM_RADIOTAB", "$SWWM_GAMETAB", + "$SWWM_TRADETAB", "$SWWM_CHATTAB", "$SWWM_SECRETTAB", "$SWWM_HELPTAB" }; xx = 0; - int maxtab = multiplayer?TAB_CHAT:TAB_STORE; + int maxtab = multiplayer?TAB_CHAT:TAB_GAME; for ( int i=TAB_MISSION; i<=maxtab; i++ ) { len = fnt.StringWidth(tabnames[i])+6; @@ -1981,8 +1984,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu static const string tabnames[] = { "$SWWM_MISSTAB", "$SWWM_STATTAB", "$SWWM_INVTAB", "$SWWM_KEYTAB", - "$SWWM_KBASETAB", "$SWWM_STORETAB", "$SWWM_TRADETAB", "$SWWM_CHATTAB", - "$SWWM_SECRETTAB", "$SWWM_HELPTAB" + "$SWWM_KBASETAB", "$SWWM_STORETAB", "$SWWM_RADIOTAB", "$SWWM_GAMETAB", + "$SWWM_TRADETAB", "$SWWM_CHATTAB", "$SWWM_SECRETTAB", "$SWWM_HELPTAB" }; static const string ltabnames[] = { @@ -1992,7 +1995,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { "$SWWM_STATTAB0", "$SWWM_STATTAB1", "$SWWM_STATTAB2", "$SWWM_STATTAB3" }; - int maxtab = multiplayer?TAB_CHAT:TAB_STORE; + int maxtab = multiplayer?TAB_CHAT:TAB_GAME; int mx = maxtab; if ( (curtab > TAB_CHAT) ) mx++; for ( int i=0; i<=mx; i++ ) @@ -2526,6 +2529,16 @@ Class SWWMKnowledgeBaseMenu : GenericMenu Screen.DrawTexture(WindowSeparatorH,false,origin.x,origin.y+377,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); } } + else if ( curtab == TAB_RADIO ) + { + str = StringTable.Localize("$SWWM_COMINGSOON"); + Screen.DrawText(fnt,Font.CR_FIRE,(ss.x-fnt.StringWidth(str))/2.,(ss.y-fnt.GetHeight())/2.,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } + else if ( curtab == TAB_GAME ) + { + str = StringTable.Localize("$SWWM_COMINGSOON"); + Screen.DrawText(fnt,Font.CR_FIRE,(ss.x-fnt.StringWidth(str))/2.,(ss.y-fnt.GetHeight())/2.,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } else if ( curtab == TAB_TRADING ) { if ( !sub ) diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 6078d47e3..241118630 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -830,6 +830,11 @@ Class Demolitionist : PlayerPawn if ( spd > 10. ) vel = (vel+accel/TICRATE).unit()*spd; else vel = vel+accel/TICRATE; } + else if ( player.onground && !bNOGRAVITY && (waterlevel < 2) ) + { + // quickly decelerate if we're not holding movement keys + if ( !(player.cmd.forwardmove|player.cmd.sidemove) ) vel *= .97; + } if ( abs(roll) > 0. ) A_SetRoll(roll+clamp(deltaangle(roll,0),-3.,3.),SPF_INTERPOLATE); } guideangle *= .9; @@ -838,9 +843,23 @@ Class Demolitionist : PlayerPawn // anchor to ground when going down steps if ( lastground && !player.onground && !bFly && !bFlyCheat && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) ) { - ssup = max(0,(pos.z-floorz)); - SetOrigin(Vec2OffsetZ(0,0,floorz),true); - lastground = player.onground = true; + // test for gap crossing (i.e: climbing up platforms with holes between them) + Vector3 storepos = pos; + bool crossgap = false; + for ( int i=1; i<=4; i++ ) // test up to 4 steps ahead, should be enough for most cases + { + SetOrigin(Vec3Offset(vel.x,vel.y,vel.z),false); + if ( floorz < storepos.z ) continue; + crossgap = true; + break; + } + SetOrigin(storepos,false); + if ( !crossgap ) + { + ssup = max(0,(pos.z-floorz)); + SetOrigin(Vec2OffsetZ(0,0,floorz),true); + lastground = player.onground = true; + } } if ( player.onground ) lastgroundtic = level.maptime; if ( !(player.cheats & CF_PREDICTING) && !(player.cmd.forwardmove|player.cmd.sidemove) ) @@ -1439,7 +1458,7 @@ Class Demolitionist : PlayerPawn if ( player.cmd.buttons&BT_JUMP ) return false; if ( InStateSequence(CurState,FindState("Dash")) ) return false; // no crouch during dash if ( swwm_crouchjump ) return true; // allowed - if ( (waterlevel >= 2) || bNOGRAVITY ) return false; // no crouch while swimming/floating + if ( (waterlevel > 2) || bNOGRAVITY ) return false; // no crouch while swimming/floating if ( !player.onground ) return false; // no crouch while in air return true; }