Wolf3d Haven Forum

Please log in or register. Smile
Wolf3d Haven Forum

A friendly Wolfenstein 3D community, about Wolfenstein 3D, the game that gave birth to first person shooters...


    [Beta 2 Artpack 1.0 released] SplitWolf

    Share

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Tue Mar 20, 2012 7:51 am

    First topic message reminder :

    Beta 2 released!

    Splitwolf beta 2 - from 25.11.2012

    (video of pre-Beta 1....meaning old)


    New in this version:

    Support of more Wolf3D/Spear versions, new art and animations (including (but not only) new Boss art by Untrustable), many bugfixes (including art fix of the famous "missing frame"), tweaks and changes based on user feedback to improve the coop experience (for example player 1 is now intuitively on the right screen etc....have fun discovering the rest of the tweaks yourself), tweaks of one of the Boss fights (find out yourself why it's not a good idea to die during that one)...and more things you have to discover yourself Smile





    SplitScreen for up to 4 players in cooperative mode on a single PC!!! (SDL)
    Support for both vertical and horizontal splitscreen!
    Minimap/radar support.

    Coding: LinuxWolf
    Additional art: DoomJedi
    New Boss art by Untrustable
    Beta testing by HexaDoken

    Readme:
    Spoiler:
    SplitWolf Beta 2 - version from 25.11.2012
    Created by LinuxWolf and DoomJedi - Team RayCAST

    Wolf4SDL by Moritz "Ripper" Kroll (http://www.chaos-software.de.vu)
    Original Wolfenstein 3D by id Software (http://www.idsoftware.com)
    =============================================================================

    Thank you for downloading "SplitWolf" beta - the first and the only 2-player
    splitscreen coop Wolfenstein 3D port - on a cross-platform Wolf4SDL engine.

    This port brings you the ability to play your favourite Wolfenstein 3D with
    your friends, on modern computers! Smile

    Installation instructions:
    ------------------------------------

    Simply unzip the files into your Wolf4SDL folder (with your original Wolf3D
    files) and use Run_SplitWolf.bat to play (you can select version, as described in SplitWolf4SDL_versions.bat)

    How to play:
    ------------

    Simply run the Run_SplitWolf.bat to play.

    Batch file format:
    "Wolf4SDL.exe --split 2 --splitres 640 400 --splitlayout 2x1"

    You can enable 2-4 player mode in the Split Screen settings page. It can be
    found under Control, then Split Screen Settings.

    Two layouts are supported in 2 player mode. Choose 2x1 to position the players
    horizontally. Choose 1x2 to position the players vertically.

    Controls:
    ---------

    | Controls for Player 1                        |
    |----------------------------------------------|
    | Key                  | Action                |
    |----------------------|-----------------------|
    | Left Arrow           | Turn Left             |
    | Right Arrow          | Turn Right            |
    | Up Arrow             | Move Forwards         |
    | Down Arrow           | Move Backwards        |
    | Control              | Shoot                 |
    | Alt                  | Strafe                |
    | Shift                | Run Speed             |
    | Left Mouse Button    | Shoot                 |
    | Right Mouse Button   | Open/Use              |
    | Middle Mouse Button  | Toggle Minimap        |
    | Mouse Wheel Down     | Cycle Next Weapon     |
    | Mouse Wheel Up       | Cycle Previous Weapon |
    | Page Up              | Toggle Minimap        |
    | Page Down            | Change Color          |
    | 1                    | Select Knife          |
    | 2                    | Select Pistol         |
    | 3                    | Select MP40           |
    | 4                    | Select Chaingun       |

    | Controls for Player 2                        |
    |----------------------------------------------|
    | Key                  | Action                |
    |----------------------|-----------------------|
    | A                    | Turn Left             |
    | D                    | Turn Right            |
    | W                    | Move Forwards         |
    | S                    | Move Backwards        |
    | Q                    | Shoot                 |
    | E                    | Open/Use              |
    | X                    | Toggle Minimap        |
    | Z                    | Cycle Next Weapon     |
    | C                    | Change Color          |

    | Controls for Player 3                        |
    |----------------------------------------------|
    | Key                  | Action                |
    |----------------------|-----------------------|
    | Keypad 4             | Turn Left             |
    | Keypad 6             | Turn Right            |
    | Keypad 8             | Move Forwards         |
    | Keypad 5             | Move Backwards        |
    | Keypad 7             | Shoot                 |
    | Keypad 9             | Open/Use              |
    | Keypad 2             | Toggle Minimap        |
    | Keypad 1             | Cycle Next Weapon     |
    | Keypad 3             | Change Color          |

    | Controls for Player 4                        |
    |----------------------------------------------|
    | Key                  | Action                |
    |----------------------|-----------------------|
    | J                    | Turn Left             |
    | L                    | Turn Right            |
    | I                    | Move Forwards         |
    | K                    | Move Backwards        |
    | U                    | Shoot                 |
    | O                    | Open/Use              |
    | ,                    | Toggle Minimap        |
    | M                    | Cycle Next Weapon     |
    | .                    | Change Color          |

    | Minimap Controls                             |
    |----------------------------------------------|
    | Key                  | Action                |
    |----------------------|-----------------------|
    | [                    | Zoom In               |
    | ]                    | Zoom Out              |


    Credits:
    --------

    Coding:            LinuxWolf
    Additional art:    DoomJedi
    Most Boss art:     UnTrustable
    Testing:           HexaDoken

    - Special thanks to id Software! Without the source code we would still have
      to pelt Wolfenstein 3D with hex editors and disassemblers ;D
    - Thanks to Moritz "Ripper" Kroll for Wolf4SDL.


    Last edited by doomjedi on Thu Jun 12, 2014 8:25 am; edited 17 times in total

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Fri Mar 22, 2013 12:45 am












    Dark_wizzie
    I am Death Incarnate!
    I am Death Incarnate!

    Male
    Number of posts : 5087
    Age : 22
    Location : USA or Tawain
    Job : Student, Part time Cactuar fanatic
    Hobbie : Planting Cactuars.
    Message : I made this forum when I was 13 High on Drugs
    Registration date : 2007-03-24

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Dark_wizzie on Sat Mar 23, 2013 4:19 am

    Very cool. It's be interesting to see maps which are designed so you need two players to effectively beat...
    The main problem of course, is how difficult it is to find two wolf players on at same time to conviniently play such a thing.



    Wolf3d Haven
    Minute Logic Blog

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Sat Mar 23, 2013 4:51 am

    The videos play old beta 1 BTW, as you can notice (not only by "pre beta 2" dates of those videos).
    Noone here at the community offered to make a pack of coop levels.
    I myself don't see any reasons for such zero offerings beside the "how difficult it is to find two wolf players on at same time to conviniently play such a thing." you've mentioned.

    Wolfers should try to meet each other in the real world...we have here even wolfers from the same countries....

    Dark_wizzie
    I am Death Incarnate!
    I am Death Incarnate!

    Male
    Number of posts : 5087
    Age : 22
    Location : USA or Tawain
    Job : Student, Part time Cactuar fanatic
    Hobbie : Planting Cactuars.
    Message : I made this forum when I was 13 High on Drugs
    Registration date : 2007-03-24

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Dark_wizzie on Sat Mar 23, 2013 5:54 am

    @doomjedi wrote:The videos play old beta 1 BTW, as you can notice (not only by "pre beta 2" dates of those videos).
    Noone here at the community offered to make a pack of coop levels.
    I myself don't see any reasons for such zero offerings beside the "how difficult it is to find two wolf players on at same time to conviniently play such a thing." you've mentioned.

    Wolfers should try to meet each other in the real world...we have here even wolfers from the same countries....
    Yes, but that's is a big factor. If somebody lives in California and wants to visit me or stay a night or two to check out the are (San Francisco is less than an hour's drive away... if you drive quickly)

    I'm not sure how I would go about making a level designed for two players, actually. What do you think?



    Wolf3d Haven
    Minute Logic Blog

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Sat Mar 23, 2013 10:03 am

    @Dark_wizzie wrote:)I'm not sure how I would go about making a level designed for two players, actually. What do you think?
    What do I think of what? you making coop levels?

    Why not? Make good maps, and we'll include those (with credit) in SplitWolf.

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Wed May 22, 2013 10:42 pm

    Mix of "SplitWolf" art and Afadoomer's Wolf3D TC for zDoom creates the closest experience for real Wolf3D coop multiplayer you can get at this point of time.


    Dark_wizzie
    I am Death Incarnate!
    I am Death Incarnate!

    Male
    Number of posts : 5087
    Age : 22
    Location : USA or Tawain
    Job : Student, Part time Cactuar fanatic
    Hobbie : Planting Cactuars.
    Message : I made this forum when I was 13 High on Drugs
    Registration date : 2007-03-24

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Dark_wizzie on Thu May 23, 2013 1:53 am

    Let's play that, but I'll block Stathmk through a door so he can't get through and I'll hog all the ammo. XD
    Just a funny thought. And what happens if I shoot the other player?



    Wolf3d Haven
    Minute Logic Blog

    stathmk
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1365
    Age : 36
    Location : Indiana, United States
    Job : fast food worker & wolfensteingoodies.com webmaster
    Hobbie : old games & young dames
    Registration date : 2008-04-08

    Sure.

    Post by stathmk on Thu May 23, 2013 11:25 am

    @Dark_wizzie wrote:Let's play that, but I'll block Stathmk through a door so he can't get through and I'll hog all the ammo. XD
    Just a funny thought. And what happens if I shoot the other player?
    Sure. Just let me have a turn doing that to you.

    KasuPL
    Wolf3d n00b
    Wolf3d n00b

    Male
    Number of posts : 3
    Age : 18
    Location : Poland
    Registration date : 2013-06-12

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by KasuPL on Wed Jun 12, 2013 10:42 am

    Do SplitWolf (multiplayer) will be compatible with mods for Wolfenstein SDL port?

    Sorry for bad English. Nice project.
    Thanks.

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Wed Jun 12, 2013 11:10 am

    @KasuPL wrote:Do SplitWolf (multiplayer) will be compatible with mods for Wolfenstein SDL port?






    Thank you for your interest in our project, and I'm very pleased to read that you like it.

    This particular question was asked (and answered) quite some times before.

    1. Coding-wise - as almost any actual mod (that is beyond a mappack) used a unique set of coding features (not to mention different amount of enemies, actors etc....) - "SplitWolf" engine will need a unique coding adjustment for support of any particular mod (maybe beside some generic coding features/functions/tutorials that might (?) be able to receive auto-recognition by the engine). As there are endless amount of mods - I strongly doubt our coder will do such adjustments.
    This - unless LinuxWolf will release the source to the public - and people (those mod makers of mod's diehard fans) will do those adjustments for themselves. Currently the source is not released - and for more details you can address our coder LinuxWolf directly.

    2. Artwise - in "SplitWolf" engine - each player character (especially non-BJ) and each new enemy character will need 8-directional shooting, ready-to-shoot, and pain frames (and 8-dir Boss art too) - art for such cannot be expected to be made/supplied by "SplitWolf" makers (as we have endless amount of possible enemies in Wolf3D mods) - but by the mod maker himself for his particular mod. This is not an easy art task - unless you use enemies from Doom or Build Engine games which already have such frames... I did prepare some frames for basic Wolf3D mods enemy types - but those are far from enouph.
    And to add additional enemies beyond Wolf3D ones - again - LinuxWolf will need to agree to release the source. Which he currently does not.

    Currently "SplitWolf" supports Wolf3D, "Spear of Destiny", and any classic Wolf3D mappack - and we have alot of those released over the years for both DOS and Wolf4SDL engines. Maybe community can prepare a list of such mappacks "SplitWolf" can run.
    So I don't see you getting our of maps to play so soon.
    Also you can make new maps yourself.
    As some maps can be too easy for coop mode - you're even encouraged to make special coop maps and mappacks - to play - and share with the rest. Made specifically for coop.


    Last edited by doomjedi on Wed Jun 12, 2013 11:59 am; edited 2 times in total

    KasuPL
    Wolf3d n00b
    Wolf3d n00b

    Male
    Number of posts : 3
    Age : 18
    Location : Poland
    Registration date : 2013-06-12

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by KasuPL on Wed Jun 12, 2013 11:17 am

    OK. Thanks for anwser.

    Regrads. Wink

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Wed Jun 12, 2013 11:57 am

    You're welcome Smile

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Thu Jun 13, 2013 9:51 am

    Also I'd like to mention that original Wolf3D came with a random map generator, if I'm not mistaken.

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Tue Jun 18, 2013 12:58 pm

    "10 new ones" On "SplitWolf":



    "Thomas Wolfenstein 3-D Mapset" on "SplitWolf" Smile



    "Odds and Ends" on "SplitWolf" Smile



    "Bitter End" on SplitWolf" Smile


    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Wed Jun 11, 2014 1:12 am

    I (hopefully) will release later today an updated artpack for "SplitWolf" with many improved frames and maybe even new ones.
    Still trying to convince LinuxWolf for Beta 3 or at least Beta 2.5. But he is indeed very busy with other projects. So I try to do what I can at least artwise.

    UPDATE:: Due to unexpected delay the release will be postponed by a day or two.

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Thu Jun 12, 2014 7:08 am

    Till I'll update this at ModDB, here is the direct link and details of the new artpack:

    https://dl.dropboxusercontent.com/u/3751922/SplitWolf_ArtPack1_lwmp.rar

    12.06.2014

    This is an art patch 1.0 for "SplitWolf" (beta 2)
    http://www.moddb.com/mods/splitwolf

    Just replace the original lwmp folder with this one (deleting or overwriting the original folder)

    What's new?
    =============
    Better player and SS sprites (by DoomJedi)
    Fett and Otto 8-directional Boss frames (by UnTrustable)

    Special thanks for Untrustable for the Boss frames.
    http://forum.zdoom.org/viewtopic.php?f=19&t=33447

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Fri Jun 13, 2014 4:27 am

    Updated the dropbox link again with some quick art fixes. Nothing critical though.
    So re-download only if you're as perfectionist as myself Smile

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Fri Jun 13, 2014 4:13 pm

    Updated it once again with Hans and Gretel 8-dir frame guns recolored from grey to Wolf3D blue for consistency.

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Mon Jun 23, 2014 4:48 am

    First beta 2 video on youtube:

    I know, quality stinks, and my commentating wasn't very good. I was kind of in a bad mood, but I thought I should still upload it and support you guys Smile


    D3m3
    Can I Play, Daddy?
    Can I Play, Daddy?

    Male
    Number of posts : 41
    Age : 17
    Registration date : 2014-06-16

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by D3m3 on Sat Nov 08, 2014 8:16 am


    Found a nasty bug after folding and then unfolding port
    I would also like to know the list of supported mods

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Sat Nov 08, 2014 11:00 am

    @D3m3 wrote:Found a nasty bug after folding and then unfolding port
    Can you give us more details about what action/event created the bug?

    I would also like to know the list of supported mods
    Well, I didn't test all mods...here are some I've tested to work:
    > "SoD Extreme http://www.moddb.com/members/doomjedi/addons/sod-extreme"
    > "Odds and Ends"
    > "Bitter End'
    > "10 new ones"
    > "Thomas Wolfenstein 3-D Mapset"

    Hope you enjoy our work! Smile


    Last edited by doomjedi on Sat Nov 08, 2014 10:10 pm; edited 2 times in total

    Andy
    Seasoned Wolfer
    Seasoned Wolfer

    Number of posts : 280
    Registration date : 2007-12-22

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Andy on Sat Nov 08, 2014 2:09 pm

    @doomjedi wrote:
    @D3m3 wrote:Found a nasty bug after folding and then unfolding port
    Can you give us more details about what action/event created the bug?

    It's an old Wolf4SDL problem that was fixed in revision 259 (post version 1.7), details are here.

    SVN log:
    ------------------------------------------------------------------------
    r262 | moritz | 2011-10-08 18:41:17 -0500 (Sat, 08 Oct 2011) | 4 lines

     - Added the DOSBox OPL emulator as a GPL alternative to the MAME one
       (thanks to Blzut3)
     - Moved fmopl to mame subfolder
     - Fixed MinGW portability issues (thanks to Fabian Greffrath)
    ------------------------------------------------------------------------
    r261 | moritz | 2011-08-22 16:22:17 -0500 (Mon, 22 Aug 2011) | 1 line

    Added option to use GPL for the soure code (except for the MAME OPL2 emulator, which should probably be replaced by a GPL one (DosBox?))
    ------------------------------------------------------------------------
    r260 | moritz | 2011-06-19 17:35:26 -0500 (Sun, 19 Jun 2011) | 1 line

     - Added support for Japanese full version
    ------------------------------------------------------------------------
    r259 | moritz | 2011-06-19 12:57:13 -0500 (Sun, 19 Jun 2011) | 2 lines

     - Fixed crashes on Windows when ALT-TAB'ing
     - Reload latch memory when surfaces were lost
    ------------------------------------------------------------------------
    r258 | moritz | 2011-05-17 15:43:43 -0500 (Tue, 17 May 2011) | 1 line

    Added Windows icon and version info
    ------------------------------------------------------------------------
    r257 | moritz | 2011-05-15 16:57:14 -0500 (Sun, 15 May 2011) | 1 line

    Fixed signon screen (show 'One moment') and jukebox (thanks to Chris Chokan)
    ------------------------------------------------------------------------
    r256 | moritz | 2011-05-15 15:29:13 -0500 (Sun, 15 May 2011) | 1 line

    Added support for Mac OS X (thanks to Chris Ballinger). Release v1.7
    ------------------------------------------------------------------------

    The SVN repository is no longer available, so to apply this fix to already-changed "back-level" code, you have to manually apply this delta which I happen to have saved:

    Code:
    Index: wl_draw.cpp

    ===================================================================
    --- wl_draw.cpp (revision 258)
    +++ wl_draw.cpp (revision 259)
    @@ -1552,7 +1552,9 @@
         spotvis[player->tilex][player->tiley] = 1;       // Detect all sprites over player fix
     
         vbuf = VL_LockSurface(screenBuffer);
    -    vbuf+=screenofs;
    +    if(vbuf == NULL) return;
    +
    +    vbuf += screenofs;
         vbufPitch = bufferPitch;
     
         CalcViewVariables();
    Index: id_in.cpp
    ===================================================================
    --- id_in.cpp (revision 258)
    +++ id_in.cpp (revision 259)
    @@ -61,6 +61,7 @@
     static int JoyNumHats;
     
     static bool GrabInput = false;
    +static bool NeedRestore = false;
     
     /*
     =============================================================================
    @@ -327,6 +328,24 @@
                 break;
             }
     
    +        case SDL_ACTIVEEVENT:
    +        {
    +            if(fullscreen && (event->active.state & SDL_APPACTIVE) != 0)
    +            {
    +                if(event->active.gain)
    +                {
    +                    if(NeedRestore)
    +                    {
    +                        FreeLatchMem();
    +                        LoadLatchMem();
    +                    }
    +
    +                    NeedRestore = false;
    +                }
    +                else NeedRestore = true;
    +            }
    +        }
    +
     #if defined(GP2X)
             case SDL_JOYBUTTONDOWN:
                 GP2X_ButtonDown(event->jbutton.button);
    Index: id_vh.h
    ===================================================================
    --- id_vh.h (revision 258)
    +++ id_vh.h (revision 259)
    @@ -90,6 +90,7 @@
     void    LatchDrawPic (unsigned x, unsigned y, unsigned picnum);
     void    LatchDrawPicScaledCoord (unsigned scx, unsigned scy, unsigned picnum);
     void    LoadLatchMem (void);
    +void    FreeLatchMem();
     
     void    VH_Startup();
     boolean FizzleFade (SDL_Surface *source, int x1, int y1,
    Index: id_vl.h
    ===================================================================
    --- id_vl.h (revision 258)
    +++ id_vl.h (revision 259)
    @@ -46,9 +46,6 @@
     byte *VL_LockSurface(SDL_Surface *surface);
     void VL_UnlockSurface(SDL_Surface *surface);
     
    -#define LOCK() VL_LockSurface(curSurface)
    -#define UNLOCK() VL_UnlockSurface(curSurface)
    -
     byte VL_GetPixel        (int x, int y);
     void VL_Plot            (int x, int y, int color);
     void VL_Hlin            (unsigned x, unsigned y, unsigned width, int color);
    Index: id_vh.cpp
    ===================================================================
    --- id_vh.cpp (revision 258)
    +++ id_vh.cpp (revision 259)
    @@ -16,8 +16,11 @@
     int    width, step, height;
     byte    *source, *dest;
     byte    ch;
    + int i;
    + unsigned sx, sy;
     
    -    byte *vbuf = LOCK();
    + byte *vbuf = VL_LockSurface(curSurface);
    + if(vbuf == NULL) return;
     
     font = (fontstruct *) grsegs[STARTFONT+fontnumber];
     height = font->height;
    @@ -32,11 +35,11 @@
     for(int i=0;i<height;i++)
     {
     if(source[i*step])
    -                {
    -                    for(unsigned sy=0; sy<scaleFactor; sy++)
    -                        for(unsigned sx=0; sx<scaleFactor; sx++)
    -         dest[(scaleFactor*i+sy)*curPitch+sx]=fontcolor;
    -                }
    + {
    + for(sy=0; sy<scaleFactor; sy++)
    + for(sx=0; sx<scaleFactor; sx++)
    + dest[(scaleFactor*i+sy)*curPitch+sx]=fontcolor;
    + }
     }
     
     source++;
    @@ -45,7 +48,7 @@
     }
     }
     
    - UNLOCK();
    + VL_UnlockSurface(curSurface);
     }
     
     /*
    @@ -214,6 +217,16 @@
     
     //==========================================================================
     
    +void FreeLatchMem()
    +{
    +    int i;
    +    for(i = 0; i < 2 + LATCHPICS_LUMP_END - LATCHPICS_LUMP_START; i++)
    +    {
    +        SDL_FreeSurface(latchpics[i]);
    +        latchpics[i] = NULL;
    +    }
    +}
    +
     /*
     ===================
     =
    @@ -250,6 +263,8 @@
     }
     UNCACHEGRCHUNK (STARTTILE8);
     
    + latchpics[1] = NULL;  // not used
    +
     //
     // pics
     //
    @@ -351,8 +366,12 @@
     
         frame = GetTimeCount();
         byte *srcptr = VL_LockSurface(source);
    +    if(srcptr == NULL) return false;
    +
         do
         {
    +        IN_ProcessEvents();
    +
             if(abortable && IN_CheckAck ())
             {
                 VL_UnlockSurface(source);
    @@ -363,65 +382,81 @@
     
             byte *destptr = VL_LockSurface(screen);
     
    -        rndval = lastrndval;
    +        if(destptr != NULL)
    +        {
    +            rndval = lastrndval;
     
    -        // When using double buffering, we have to copy the pixels of the last AND the current frame.
    -        // Only for the first frame, there is no "last frame"
    -        for(int i = first; i < 2; i++)
    -        {
    -            for(unsigned p = 0; p < pixperframe; p++)
    +            // When using double buffering, we have to copy the pixels of the last AND the current frame.
    +            // Only for the first frame, there is no "last frame"
    +            for(int i = first; i < 2; i++)
                 {
    -                //
    -                // seperate random value into x/y pair
    -                //
    +                for(unsigned p = 0; p < pixperframe; p++)
    +                {
    +                    //
    +                    // seperate random value into x/y pair
    +                    //
     
    -                x = rndval >> rndbits_y;
    -                y = rndval & ((1 << rndbits_y) - 1);
    +                    x = rndval >> rndbits_y;
    +                    y = rndval & ((1 << rndbits_y) - 1);
     
    -                //
    -                // advance to next random element
    -                //
    +                    //
    +                    // advance to next random element
    +                    //
     
    -                rndval = (rndval >> 1) ^ (rndval & 1 ? 0 : rndmask);
    +                    rndval = (rndval >> 1) ^ (rndval & 1 ? 0 : rndmask);
     
    -                if(x >= width || y >= height)
    -                {
    -                    if(rndval == 0)     // entire sequence has been completed
    +                    if(x >= width || y >= height)
    +                    {
    +                        if(rndval == 0)     // entire sequence has been completed
    +                            goto finished;
    +                        p--;
    +                        continue;
    +                    }
    +
    +                    //
    +                    // copy one pixel
    +                    //
    +
    +                    if(screenBits ==
    +                    {
    +                        *(destptr + (y1 + y) * screen->pitch + x1 + x)
    +                            = *(srcptr + (y1 + y) * source->pitch + x1 + x);
    +                    }
    +                    else
    +                    {
    +                        byte col = *(srcptr + (y1 + y) * source->pitch + x1 + x);
    +                        uint32_t fullcol = SDL_MapRGB(screen->format, curpal[col].r, curpal[col].g, curpal[col].b);
    +                        memcpy(destptr + (y1 + y) * screen->pitch + (x1 + x) * screen->format->BytesPerPixel,
    +                            &fullcol, screen->format->BytesPerPixel);
    +                    }
    +
    +                    if(rndval == 0) // entire sequence has been completed
                             goto finished;
    -                    p--;
    -                    continue;
                     }
     
    -                //
    -                // copy one pixel
    -                //
    +                if(!i || first) lastrndval = rndval;
    +            }
     
    -                if(screenBits ==
    +            // If there is no double buffering, we always use the "first frame" case
    +            if(usedoublebuffering) first = 0;
    +
    +            VL_UnlockSurface(screen);
    +            SDL_Flip(screen);
    +        }
    +        else
    +        {
    +            // No surface, so only enhance rndval
    +            for(int i = first; i < 2; i++)
    +            {
    +                for(unsigned p = 0; p < pixperframe; p++)
                     {
    -                    *(destptr + (y1 + y) * screen->pitch + x1 + x)
    -                        = *(srcptr + (y1 + y) * source->pitch + x1 + x);
    +                    rndval = (rndval >> 1) ^ (rndval & 1 ? 0 : rndmask);
    +                    if(rndval == 0)
    +                        goto finished;
                     }
    -                else
    -                {
    -                    byte col = *(srcptr + (y1 + y) * source->pitch + x1 + x);
    -                    uint32_t fullcol = SDL_MapRGB(screen->format, curpal[col].r, curpal[col].g, curpal[col].b);
    -                    memcpy(destptr + (y1 + y) * screen->pitch + (x1 + x) * screen->format->BytesPerPixel,
    -                        &fullcol, screen->format->BytesPerPixel);
    -                }
    -
    -                if(rndval == 0) // entire sequence has been completed
    -                    goto finished;
                 }
    -
    -            if(!i || first) lastrndval = rndval;
             }
     
    -        // If there is no double buffering, we always use the "first frame" case
    -        if(usedoublebuffering) first = 0;
    -
    -        VL_UnlockSurface(screen);
    -        SDL_Flip(screen);
    -
             frame++;
             Delay(frame - GetTimeCount());        // don't go too fast
         } while (1);
    Index: README.txt
    ===================================================================
    --- README.txt (revision 258)
    +++ README.txt (revision 259)
    @@ -79,7 +79,7 @@
     version.h as described in that file):
     
      - Wolfenstein 3D v1.1 full Apogee
    - - Wolfenstein 3D v1.4 full Apogee (not tested)
    + - Wolfenstein 3D v1.4 full Apogee
      - Wolfenstein 3D v1.4 full GT/ID/Activision
      - Wolfenstein 3D v1.0 shareware Apogee
      - Wolfenstein 3D v1.1 shareware Apogee
    Index: id_vl.cpp
    ===================================================================
    --- id_vl.cpp (revision 258)
    +++ id_vl.cpp (revision 259)
    @@ -425,12 +425,17 @@
     
     void VL_Plot (int x, int y, int color)
     {
    +    byte *ptr;
    +
         assert(x >= 0 && (unsigned) x < screenWidth
                 && y >= 0 && (unsigned) y < screenHeight
                 && "VL_Plot: Pixel out of bounds!");
     
    -    VL_LockSurface(curSurface);
    - ((byte *) curSurface->pixels)[y * curPitch + x] = color;
    +    ptr = VL_LockSurface(curSurface);
    +    if(ptr == NULL) return;
    +
    +    ptr[y * curPitch + x] = color;
    +
         VL_UnlockSurface(curSurface);
     }
     
    @@ -444,14 +449,21 @@
     
     byte VL_GetPixel (int x, int y)
     {
    +    byte *ptr;
    +    byte col;
    +
         assert_ret(x >= 0 && (unsigned) x < screenWidth
                 && y >= 0 && (unsigned) y < screenHeight
                 && "VL_GetPixel: Pixel out of bounds!");
     
    -    VL_LockSurface(curSurface);
    - byte col = ((byte *) curSurface->pixels)[y * curPitch + x];
    +    ptr = VL_LockSurface(curSurface);
    +    if(ptr == NULL) return 0;
    +
    +    col = ((byte *) curSurface->pixels)[y * curPitch + x];
    +
         VL_UnlockSurface(curSurface);
    - return col;
    +
    +    return col;
     }
     
     
    @@ -465,13 +477,17 @@
     
     void VL_Hlin (unsigned x, unsigned y, unsigned width, int color)
     {
    +    byte *ptr;
    +
         assert(x >= 0 && x + width <= screenWidth
                 && y >= 0 && y < screenHeight
                 && "VL_Hlin: Destination rectangle out of bounds!");
     
    -    VL_LockSurface(curSurface);
    -    Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
    -    memset(dest, color, width);
    +    ptr = VL_LockSurface(curSurface);
    +    if(ptr == NULL) return;
    +
    +    memset(ptr + y * curPitch + x, color, width);
    +
         VL_UnlockSurface(curSurface);
     }
     
    @@ -486,18 +502,23 @@
     
     void VL_Vlin (int x, int y, int height, int color)
     {
    + byte *ptr;
    +
     assert(x >= 0 && (unsigned) x < screenWidth
     && y >= 0 && (unsigned) y + height <= screenHeight
     && "VL_Vlin: Destination rectangle out of bounds!");
     
    - VL_LockSurface(curSurface);
    - Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
    + ptr = VL_LockSurface(curSurface);
    + if(ptr == NULL) return;
     
    + ptr += y * curPitch + x;
    +
     while (height--)
     {
    - *dest = color;
    - dest += curPitch;
    + *ptr = color;
    + ptr += curPitch;
     }
    +
     VL_UnlockSurface(curSurface);
     }
     
    @@ -512,17 +533,21 @@
     
     void VL_BarScaledCoord (int scx, int scy, int scwidth, int scheight, int color)
     {
    + byte *ptr;
    +
     assert(scx >= 0 && (unsigned) scx + scwidth <= screenWidth
     && scy >= 0 && (unsigned) scy + scheight <= screenHeight
     && "VL_BarScaledCoord: Destination rectangle out of bounds!");
     
    - VL_LockSurface(curSurface);
    - Uint8 *dest = ((byte *) curSurface->pixels) + scy * curPitch + scx;
    + ptr = VL_LockSurface(curSurface);
    + if(ptr == NULL) return;
     
    + ptr += scy * curPitch + scx;
    +
     while (scheight--)
     {
    - memset(dest, color, scwidth);
    - dest += curPitch;
    + memset(ptr, color, scwidth);
    + ptr += curPitch;
     }
     VL_UnlockSurface(curSurface);
     }
    @@ -546,18 +571,23 @@
     void VL_MemToLatch(byte *source, int width, int height,
         SDL_Surface *destSurface, int x, int y)
     {
    +    byte *ptr;
    +    int xsrc, ysrc, pitch;
    +
         assert(x >= 0 && (unsigned) x + width <= screenWidth
                 && y >= 0 && (unsigned) y + height <= screenHeight
                 && "VL_MemToLatch: Destination rectangle out of bounds!");
     
    -    VL_LockSurface(destSurface);
    -    int pitch = destSurface->pitch;
    -    byte *dest = (byte *) destSurface->pixels + y * pitch + x;
    -    for(int ysrc = 0; ysrc < height; ysrc++)
    +    ptr = VL_LockSurface(destSurface);
    +    if(ptr == NULL) return;
    +
    +    pitch = destSurface->pitch;
    +    ptr += y * pitch + x;
    +    for(ysrc = 0; ysrc < height; ysrc++)
         {
    -        for(int xsrc = 0; xsrc < width; xsrc++)
    +        for(xsrc = 0; xsrc < width; xsrc++)
             {
    -            dest[ysrc * pitch + xsrc] = source[(ysrc * (width >> 2) + (xsrc >> 2))
    +            ptr[ysrc * pitch + xsrc] = source[(ysrc * (width >> 2) + (xsrc >> 2))
                     + (xsrc & 3) * (width >> 2) * height];
             }
         }
    @@ -579,22 +609,27 @@
     
     void VL_MemToScreenScaledCoord (byte *source, int width, int height, int destx, int desty)
     {
    +    byte *ptr;
    +    int i, j, sci, scj;
    +    unsigned m, n;
    +
         assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
                 && desty >= 0 && desty + height * scaleFactor <= screenHeight
                 && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
     
    -    VL_LockSurface(curSurface);
    -    byte *vbuf = (byte *) curSurface->pixels;
    -    for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
    +    ptr = VL_LockSurface(curSurface);
    +    if(ptr == NULL) return;
    +
    +    for(j = 0, scj = 0; j < height; j++, scj += scaleFactor)
         {
    -        for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
    +        for(i = 0, sci = 0; i < width; i++, sci += scaleFactor)
             {
    -            byte col = source[(j*(width>>2)+(i>>2))+(i&3)*(width>>2)*height];
    -            for(unsigned m=0; m<scaleFactor; m++)
    +            byte col = source[(j * (width >> 2) + (i >> 2)) + (i & 3) * (width >> 2) * height];
    +            for(m = 0; m < scaleFactor; m++)
                 {
    -                for(unsigned n=0; n<scaleFactor; n++)
    +                for(n = 0; n < scaleFactor; n++)
                     {
    -                    vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
    +                    ptr[(scj + m + desty) * curPitch + sci + n + destx] = col;
                     }
                 }
             }
    @@ -618,22 +653,29 @@
     void VL_MemToScreenScaledCoord (byte *source, int origwidth, int origheight, int srcx, int srcy,
                                     int destx, int desty, int width, int height)
     {
    +    byte *ptr;
    +    int i, j, sci, scj;
    +    unsigned m, n;
    +
         assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
                 && desty >= 0 && desty + height * scaleFactor <= screenHeight
                 && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
     
    -    VL_LockSurface(curSurface);
    -    byte *vbuf = (byte *) curSurface->pixels;
    -    for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
    +    ptr = VL_LockSurface(curSurface);
    +    if(ptr == NULL) return;
    +
    +    for(j = 0, scj = 0; j < height; j++, scj += scaleFactor)
         {
    -        for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
    +        for(i = 0, sci = 0; i < width; i++, sci += scaleFactor)
             {
    -            byte col = source[((j+srcy)*(origwidth>>2)+((i+srcx)>>2))+((i+srcx)&3)*(origwidth>>2)*origheight];
    -            for(unsigned m=0; m<scaleFactor; m++)
    +            byte col = source[((j + srcy) * (origwidth >> 2) + ((i + srcx) >>2 ))
    +                + ((i + srcx) & 3) * (origwidth >> 2) * origheight];
    +
    +            for(m = 0; m < scaleFactor; m++)
                 {
    -                for(unsigned n=0; n<scaleFactor; n++)
    +                for(n = 0; n < scaleFactor; n++)
                     {
    -                    vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
    +                    ptr[(scj + m + desty) * curPitch + sci + n + destx] = col;
                     }
                 }
             }
    @@ -670,18 +712,24 @@
             //       So, we do the blit on our own...
             if(screenBits !=
             {
    -            VL_LockSurface(source);
    -            byte *src = (byte *) source->pixels;
    -            unsigned srcPitch = source->pitch;
    +            byte *src, *dest;
    +            unsigned srcPitch;
    +            int i, j;
     
    -            VL_LockSurface(curSurface);
    -            byte *vbuf = (byte *) curSurface->pixels;
    -            for(int j=0,scj=0; j<height; j++, scj++)
    +            src = VL_LockSurface(source);
    +            if(src == NULL) return;
    +
    +            srcPitch = source->pitch;
    +
    +            dest = VL_LockSurface(curSurface);
    +            if(dest == NULL) return;
    +
    +            for(j = 0; j < height; j++)
                 {
    -                for(int i=0,sci=0; i<width; i++, sci++)
    +                for(i = 0; i < width; i++)
                     {
                         byte col = src[(ysrc + j)*srcPitch + xsrc + i];
    -                    vbuf[(scydest+scj)*curPitch+scxdest+sci] = col;
    +                    dest[(scydest + j) * curPitch + scxdest + i] = col;
                     }
                 }
                 VL_UnlockSurface(curSurface);
    @@ -696,22 +744,29 @@
         }
         else
         {
    -        VL_LockSurface(source);
    -        byte *src = (byte *) source->pixels;
    -        unsigned srcPitch = source->pitch;
    +        byte *src, *dest;
    +        unsigned srcPitch;
    +        int i, j, sci, scj;
    +        unsigned m, n;
     
    -        VL_LockSurface(curSurface);
    -        byte *vbuf = (byte *) curSurface->pixels;
    -        for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
    +        src = VL_LockSurface(source);
    +        if(src == NULL) return;
    +
    +        srcPitch = source->pitch;
    +
    +        dest = VL_LockSurface(curSurface);
    +        if(dest == NULL) return;
    +
    +        for(j = 0, scj = 0; j < height; j++, scj += scaleFactor)
             {
    -            for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
    +            for(i = 0, sci = 0; i < width; i++, sci += scaleFactor)
                 {
                     byte col = src[(ysrc + j)*srcPitch + xsrc + i];
    -                for(unsigned m=0; m<scaleFactor; m++)
    +                for(m = 0; m < scaleFactor; m++)
                     {
    -                    for(unsigned n=0; n<scaleFactor; n++)
    +                    for(n = 0; n < scaleFactor; n++)
                         {
    -                        vbuf[(scydest+scj+m)*curPitch+scxdest+sci+n] = col;
    +                        dest[(scydest + scj + m) * curPitch + scxdest + sci + n] = col;
                         }
                     }
                 }
    Index: id_ca.cpp
    ===================================================================
    --- id_ca.cpp (revision 258)
    +++ id_ca.cpp (revision 259)
    @@ -979,6 +979,9 @@
         memptr  bigbufferseg;
         int32_t    *source;
         int             next;
    +    byte *pic, *vbuf;
    +    int x, y, scx, scy;
    +    unsigned i, j;
     
     //
     // load the chunk into a buffer
    @@ -1002,22 +1005,25 @@
     // allocate final space, decompress it, and free bigbuffer
     // Sprites need to have shifts made and various other junk
     //
    -    byte *pic = (byte *) malloc(64000);
    +    pic = (byte *) malloc(64000);
         CHECKMALLOCRESULT(pic);
         CAL_HuffExpand((byte *) source, pic, expanded, grhuffman);
     
    -    byte *vbuf = LOCK();
    -    for(int y = 0, scy = 0; y < 200; y++, scy += scaleFactor)
    +    vbuf = VL_LockSurface(curSurface);
    +    if(vbuf != NULL)
         {
    -        for(int x = 0, scx = 0; x < 320; x++, scx += scaleFactor)
    +        for(y = 0, scy = 0; y < 200; y++, scy += scaleFactor)
             {
    -            byte col = pic[(y * 80 + (x >> 2)) + (x & 3) * 80 * 200];
    -            for(unsigned i = 0; i < scaleFactor; i++)
    -                for(unsigned j = 0; j < scaleFactor; j++)
    -                    vbuf[(scy + i) * curPitch + scx + j] = col;
    +            for(x = 0, scx = 0; x < 320; x++, scx += scaleFactor)
    +            {
    +                byte col = pic[(y * 80 + (x >> 2)) + (x & 3) * 80 * 200];
    +                for(i = 0; i < scaleFactor; i++)
    +                    for(j = 0; j < scaleFactor; j++)
    +                        vbuf[(scy + i) * curPitch + scx + j] = col;
    +            }
             }
    +        VL_UnlockSurface(curSurface);
         }
    -    UNLOCK();
         free(pic);
         free(bigbufferseg);
     }


    Don't be discouraged: it is do-able. I've done this one at least 2 or 3 times for various projects. :)

    Dakota Hedgepeth
    Don't Hurt Me!
    Don't Hurt Me!

    Male
    Number of posts : 58
    Age : 18
    Registration date : 2014-10-22

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Dakota Hedgepeth on Wed Nov 26, 2014 6:52 am

    What upcoming mods will have splitwolf?

    doomjedi
    Hardcore Wolfer
    Hardcore Wolfer

    Male
    Number of posts : 1331
    Age : 37
    Location : Israel
    Hobbie : Gaming and Modding, Pixel Art
    Registration date : 2007-03-26

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by doomjedi on Wed Nov 26, 2014 7:06 am

    What do you mean be "have"? Will support SplitWolf?
    I'm not aware of such at this point. SplitWolf supports classic mappacks and some mods.
    We have a list of some that I've tested, there are plenty of others I'm sure.

    I wonder why noone mapped for SplitWolf yet or made a mod focused on SplitWolf (difficulty and map design-wise (for coop, teamwork)). It's untapped territory, donnow why.
    But any classic (or just art-replacement) mappack will run on SplitWolf.

    Sponsored content

    Re: [Beta 2 Artpack 1.0 released] SplitWolf

    Post by Sponsored content Today at 8:08 am


      Current date/time is Fri Sep 30, 2016 8:08 am