DieHard Wolfers Forum Index DieHard Wolfers
A Wolfenstein 3d Fan Community


  Hosted by: MCS & Areyep.com - Designed by: BrotherTank

Original Yahoo Forum - Die Hard Archives

AReyeP HomepageAreyep Homepage DieHard Wolfenstein BunkerDieHard Wolfenstein Bunker Log inLog in RegisterRegister Banlist FAQFAQ Search ForumsSearch

  Username:    Password:      Remember me       

Particle system tutorial
Page 1 of 1
DieHard Wolfers Forum Index -> SDL Code Crackers View Previous TopicRefresh this PageAdd Topic to your Browser FavoritesSearch ForumsPrint this TopicE-mail TopicGoto Page BottomView Next Topic
Post new topicReply to topic
Author Message
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Thu Dec 26, 2013 2:00 am
   Subject: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Next PostGoto Bottom of Posts

EDIT: There were some issues in the code, I've reuploaded fixed versions.

Ladies and gentlemen, I have a Christmas present for you. Yes, it's a fully fledged particle system! By default this replaces the old and out of date weather effects, but it can be used to do whatever you like, and can add a lot of visual depth. Note that there is a fair performance overhead, to the point that 10000ish particles can double the render time for a frame - so if you want your mod to be fast, you may want to include an option to turn them off, but I'll leave that up to you.

Here is a quick demonstration of the particle effect being used for snow, and here is another quick demonstration using rain.

I will warn you now that this tutorial is fairly code heavy, and customizing it will require some knowledge of the engine and C++. But if all you want is a replacement for the weather effects, this tutorial should be enough.

If you just want the standard engine with it implemented you can grab a ready-made version here (based on Andy_Nonymous's updated version).

First things first, grab my particle code from here and add it to your project. Now we'll need to replace the DrawScaleds function in WL_DRAW.CPP, as the normal one can cause a massive amount of lag with many particles on the screen. Replace everything from the line '#define MAXVISABLE' to the end of the DrawScaleds function with this (you will need to do some work if you've modified the function in the past):

::: CODE :::
#define HEIGHTSCALE 32000

typedef struct visobj
{
    short      viewx,
               viewheight,
               shapenum;
#ifdef NEWPARTICLES
    particle*  pt;
#endif
    uint32_t   flags;          // this must be changed to uint32_t, when you
                               // you need more than 16-flags for drawing
#ifdef USE_DIR3DSPR
    statobj_t *transsprite;
#endif
    visobj *next;
} visobj_t;

void DrawScaleds(void)
{
    visobj_t *vislist[HEIGHTSCALE];

    visobj_t *visptr = NULL;
    byte     *visspot;
    uint16_t *tilespot;
    unsigned spotloc;

    memset(vislist, 0, HEIGHTSCALE * sizeof(visobj_t *));

    for (statobj_t *statptr = &statobjlist[0]; statptr != laststatobj; statptr++)
    {
        if (visptr)
        {
            delete visptr;
            visptr = NULL;
        }

        if (statptr->shapenum == -1)
            continue;

        if (!*statptr->visspot)
            continue;

        visptr = new visobj_t;
        visptr->shapenum = statptr->shapenum;
        visptr->next = NULL;

        if (TransformTile (statptr->tilex,statptr->tiley,
            &visptr->viewx,&visptr->viewheight) && statptr->flags & FL_BONUS)
        {
            GetBonus (statptr);
            if(statptr->shapenum == -1)
                continue;
        }

        if (!visptr->viewheight)
            continue;

#ifdef USE_DIR3DSPR
        if(statptr->flags & FL_DIR_MASK)
            visptr->transsprite=statptr;
        else
            visptr->transsprite=NULL;
#endif

        visptr->flags = statptr->flags;

        // Insert into vistable
        if (!vislist[visptr->viewheight])
            vislist[visptr->viewheight] = visptr;
        else
        {
            visobj_t *cur = vislist[visptr->viewheight];
            while (cur->next) { cur = cur->next; }
            cur->next = visptr;
        }

        visptr = NULL;
    }

    for (objtype *obj = player->next;obj;obj=obj->next)
    {
        if (visptr)
        {
            delete visptr;
            visptr = NULL;
        }

        if (!obj->state->shapenum)
            continue;                                               // no shape

        spotloc = (obj->tilex<<mapshift)+obj->tiley;   // optimize: keep in struct?
        visspot = &spotvis[0][0]+spotloc;
        tilespot = &tilemap[0][0]+spotloc;

        //
        // could be in any of the nine surrounding tiles
        //
        if (*visspot
            || ( *(visspot-1) && !*(tilespot-1) )
            || ( *(visspot+1) && !*(tilespot+1) )
            || ( *(visspot-65) && !*(tilespot-65) )
            || ( *(visspot-64) && !*(tilespot-64) )
            || ( *(visspot-63) && !*(tilespot-63) )
            || ( *(visspot+65) && !*(tilespot+65) )
            || ( *(visspot+64) && !*(tilespot+64) )
            || ( *(visspot+63) && !*(tilespot+63) ) )
        {
            obj->active = ac_yes;
            TransformActor (obj);
            if (!obj->viewheight)
                continue;                                               // too close or far away

            visptr = new visobj_t;
            visptr->shapenum = obj->state->shapenum;
            visptr->viewx = obj->viewx;
            visptr->viewheight = obj->viewheight;
            visptr->next = NULL;
            if (visptr->shapenum == -1)
                visptr->shapenum = obj->temp1;  // special shape

            if (obj->state->rotate)
                visptr->shapenum += CalcRotate (obj);

            visptr->flags = obj->flags;
#ifdef USE_DIR3DSPR
            visptr->transsprite = NULL;
#endif
            // Insert into vistable
            if (!vislist[visptr->viewheight])
                vislist[visptr->viewheight] = visptr;
            else
            {
                visobj_t *cur = vislist[visptr->viewheight];
                while (cur->next) { cur = cur->next; }
                cur->next = visptr;
            }

            visptr = NULL;
            obj->flags |= FL_VISABLE;
        }
        else
            obj->flags &= ~FL_VISABLE;
    }

#ifdef NEWPARTICLES
//
// place particles
//
    for (particle *pt = particlelist; pt; pt = pt->next)
    {
        if (visptr)
        {
            delete visptr;
            visptr = NULL;
        }
        TransformParticle(pt);
        if (!pt->viewheight)
            continue;

        visptr = new visobj_t;
        visptr->viewx = pt->viewx;
        visptr->viewheight = pt->viewheight;
        visptr->flags = FL_ISPARTICLE;
        visptr->shapenum = pt->id;
        visptr->pt = pt;
#ifdef USE_DIR3DSPR
        visptr->transsprite = NULL;
#endif
        visptr->next = NULL;

        if (!vislist[visptr->viewheight])
            vislist[visptr->viewheight] = visptr;
        else
        {
            visobj_t *cur = vislist[visptr->viewheight];
            while (cur->next) { cur = cur->next; }
            cur->next = visptr;
        }

        visptr = NULL;
    }
#endif

    for (int i = 0; i < HEIGHTSCALE; i++)
    {
        visobj_t *obj = vislist[i];
        if (!obj)
            continue;

        do
        {
#ifdef NEWPARTICLES
            if (obj->flags & FL_ISPARTICLE)
                DrawParticle(vbuf, vbufPitch, obj->shapenum, obj->viewx, obj->viewheight, obj->pt);
            else
#endif
#ifdef USE_DIR3DSPR
            if(obj->transsprite)
                Scale3DShape(vbuf, vbufPitch, obj->transsprite);
            else
#endif
                ScaleShape(obj->viewx, obj->shapenum, obj->viewheight, obj->flags);
        }
        while (obj = obj->next);
    }

    for (int i = 0; i < HEIGHTSCALE; i++)
    {
        if (vislist[i])
        {
            visobj_t *cur = vislist[i], *next;
            do
            {
                next = cur->next;
                delete cur;
            }
            while (cur = next);
        }
    }
}


If your visobj_t structure is defined at the top of WL_DRAW.CPP, remove it.

Now, find the TransformTile function in WL_DRAW.CPP and add this below it:

::: CODE :::
#ifdef NEWPARTICLES
void TransformParticle (particle *ob)
{
    fixed gx,gy,gxt,gyt,nx,ny;

//
// translate point to view centered coordinates
//
    gx = ob->x-viewx;
    gy = ob->y-viewy;

//
// calculate newx
//
    gxt = FixedMul(gx,viewcos);
    gyt = FixedMul(gy,viewsin);
    nx = gxt-gyt;

//
// calculate newy
//
    gxt = FixedMul(gx,viewsin);
    gyt = FixedMul(gy,viewcos);
    ny = gyt+gxt;

    if (nx<MINDIST)                 // too close, don't overflow the divide
    {
        ob->viewheight = 0;
        return;
    }

    ob->viewx = (word)(centerx + ny*scale/nx);

//
// calculate height (heightnumerator/(nx>>8))
//
    ob->viewheight = (word)(heightnumerator/(nx>>8));
}
#endif


Finally, for the last change in WL_DRAW.CPP, change the lines:

::: CODE :::
#if defined(USE_FEATUREFLAGS) && defined(USE_RAIN)
    if(GetFeatureFlags() & FF_RAIN)
        DoRain();
#endif
#if defined(USE_FEATUREFLAGS) && defined(USE_SNOW)
    if(GetFeatureFlags() & FF_SNOW)
        DoSnow();
#endif


to:

::: CODE :::
#ifdef NEWPARTICLES
#if defined(USE_FEATUREFLAGS) && defined(USE_RAIN)
    if(GetFeatureFlags() & FF_RAIN)
        DoRain;
#endif
#if defined(USE_FEATUREFLAGS) && defined(USE_SNOW)
    if(GetFeatureFlags() & FF_SNOW)
        DoSnow;
#endif
#else
#if defined(USE_FEATUREFLAGS) && defined(USE_RAIN)
    if(GetFeatureFlags() & FF_RAIN)
        DrawRain(vbuf, vbufPitch);
#endif
#if defined(USE_FEATUREFLAGS) && defined(USE_SNOW)
    if(GetFeatureFlags() & FF_SNOW)
        DrawSnow(vbuf, vbufPitch);
#endif
#endif


Now go to WL_GAME.CPP, and below the line 'InitStaticList()' in SetupGameLevel add:
::: CODE :::
#ifdef NEWPARTICLES
    CleanupParticles();
#endif


And in WL_MAIN.CPP, below the line 'InitActorList()' in LoadTheGame add the same.

Now in WL_PLAY.CPP, below the lines:

::: CODE :::
        for (obj = player; obj; obj = obj->next)
            DoActor (obj);


Add the lines:

::: CODE :::
#ifdef NEWPARTICLES
        for (particle *pt = particlelist, *pnext; pt; pt = pnext)
        {
            pnext = pt->next;
            DoParticle(pt);
        }
#endif


Now in WL_DEF.H, at the end of the objflag_t struct, add the line:

::: CODE :::
    FL_ISPARTICLE       = 0x00001000,


Finally, at the end of WL_DEF.H, under the lines:

::: CODE :::
#ifdef USE_DIR3DSPR
    void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob);
#endif


Add the following:

::: CODE :::
#ifdef NEWPARTICLES
#define DEG2RAD(x)      (((x)*M_PI)/180.0)
    typedef enum
    {
        pt_weather,             // Falling/rising weather effect
        pt_timed,               // Timed life particle
        pt_bounce,              // Bouncing particle
    } parttype;

    typedef struct partstruct
    {
        fixed       x,y,z;
        word        tilex,tiley;
        parttype    type;
        statetype   *state;
        short       ticcount, id;

        short       viewx;
        word        viewheight;

        short       angle;
        double      zspeed;
        int32_t     speed, age;
        partstruct  *next, *prev;
    } particle;

    extern particle *particlelist;

    void DoParticle(particle *ob);
    particle *GetNewParticle(void);

    void DoRain(void);
    void DoSnow(void);
    void DoBlizzard(void);

    void CleanupParticles(void);
    void DrawParticle(byte *vbuf, unsigned vbufPitch, int id, int vx, unsigned viewscale, particle *cur);
#endif


Now go into VERSION.H and add the line '#define NEWPARTICLES' somewhere in the file. And you're done!

Now for a guide on how the system works, so that you can make new particles. Firstly, there are three #defines at the top of alu_particles.cpp. RAINRATE and SNOWRATE are the rates at which rain and snow are generated, so a higher number means thicker rain and snow. Z_RES is the resolution of the particle's height, and can be changed to whatever you want, although it should be a number that's a power of 2.

If you want to create a particle type, create a function that generates it in alu_particles.cpp. Here's an example:

::: CODE :::
void ExampleParticle(int32_t x, int32_t y, int32_t z)
{
    // Create a new particle
    newparticle = GetNewParticle();

    // Set the position
    newparticle->x = x;                 // x position
    newparticle->y = y;                 // y position
    newparticle->z = z;                 // z position

    // Set the type of particle
    newparticle->state = &p_standard;   // state type (identical to object states)
    newparticle->type = pt_weather;     // behaviour
    newparticle->id = 2;                // drawing id

    // Set the particle's movement
    newparticle->speed = 2048;          // particle speed (65536 is one tile) per tic
    newparticle->zspeed = 20;           // particle vertical speed per tic
    newparticle->angle = 180;           // particle movement angle
    newparticle->age = 350;             // particle lifetime (70 = 1 second)

    // Other stuff
    newparticle->ticcount = 0;          // set to 1 if not using p_standard as state
}


The scale on z coordinate is 0 to Z_RES (as defined at the top of alu_particles.cpp), with 0 being above the ceiling, Z_RES being the floor, and Z_RES/2 being the ceiling.

How the particle looks is described by the id, which is referred to in the DrawParticle function. 0 refers to a rain drop and 1 refers to a snowflake by default, you can add more cases to the switch statement to add more particle types. The variable 'scale' refers to the height of the particle's location from the player's height to the ceiling.

The particle's type refers to the behaviour of the particle. As it stands now, this can be one of two values: pt_timed, which will delete the particle when its age reaches 0, and pt_weather, where it will be deleted upon hitting the floor, the maximum height, or by running into the ceiling if you have floor and ceiling textures enabled.

This should be all you need to create most particle effects. However, if you want a particle to do something extra every so often, you can create a new state. These work identically to object states, down to the ability to use function pointers. If you want to use other states, you will want to set newparticle->ticcount to something other than 0. You can also add new behaviours by editing the switch case in T_Particle.

Anyway, enjoy, play around with it, and feel free to ask me if you have any questions about the code or how to do something. All I ask in return is a credit or thanks in your mod. Smile

Many thanks to WLHack for his help too Smile


Last edited by AlumiuN on Fri Dec 27, 2013 4:33 pm; edited 5 times in total
Tricob
Moderator
<B>Moderator</B>


Joined: 14 Mar 2005
Last Visit: 17 Sep 2018

Topics: 163
Posts: 8192
Location: Neo-traditions, Inc.
usa.gif

PostPosted: Thu Dec 26, 2013 7:50 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

I'm not trying to backseat-moderate here, but considering the amount of work involved with the tutorial here, I suggest you post a video that demonstrates what this feature has to offer. Smile
WLHack
DieHard Wolfer
DieHard Wolfer


Joined: 10 Jul 2005
Last Visit: 18 Jan 2018

Topics: 66
Posts: 1241
Location: Loppi - Finland
finland.gif

PostPosted: Thu Dec 26, 2013 11:37 am
   Subject: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

AlumiuN wrote:

Also note that currently the particles will show through the edge between the ceiling texture and the wall. I have no idea how to fix this, so if someone comes up with a fix please tell me.

This seems to be related to the peeking pixels-bug... What I tested, this only occurred when there was no floor/ceiling above the wall...

_________________
False Spear download
False Spear SDL download
Wolfenstein-blog
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Thu Dec 26, 2013 7:18 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

WLHack wrote:
AlumiuN wrote:

Also note that currently the particles will show through the edge between the ceiling texture and the wall. I have no idea how to fix this, so if someone comes up with a fix please tell me.

This seems to be related to the peeking pixels-bug... What I tested, this only occurred when there was no floor/ceiling above the wall...


Actually, I fixed that, but I wrote the tutorial before I fixed it. I've taken it out now. Razz

Tricob wrote:
I'm not trying to backseat-moderate here, but considering the amount of work involved with the tutorial here, I suggest you post a video that demonstrates what this feature has to offer.


I could, although I'm not versed in the making of videos, but the feature will be in the next MMC, so I imagine that will be a good advertisement for it too.

EDIT: Also, the code didn't work properly, as I was in a hurry to release it and screwed up. I've reuploaded the code and it's now fixed, so go download it from the first post. If you're wondering what was wrong, I had accidentally left some of the drawing variables as viewx when they should have been vx. Also, I left the brackets off the calls to DoRain and DoSnow.
RichterBelmont12
DieHard Wolfer
DieHard Wolfer


Joined: 14 Aug 2004
Last Visit: 13 Sep 2018

Topics: 97
Posts: 1508
Location: New Jersey
usa.gif

PostPosted: Thu Dec 26, 2013 8:56 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

I have an Error

C:\WOR Code\wl_draw.cpp In function 'void DrawScaleds()'::
98 C:\WOR Code\wl_draw.cpp:1282 cannot convert 'pixel* {aka unsigned int*}' to 'byte* {aka unsigned char*}' for argument '1' to 'void DrawParticle(byte*, unsigned int, int, int, unsigned int, particle*)'

I remember adding in the 32bit code for the Shading i think but i don't know :\

_________________
http://www.youtube.com/RichterBelmont12

https://www.facebook.com/RichterBelmont123

https://twitter.com/Richterbelmont6
Tricob
Moderator
<B>Moderator</B>


Joined: 14 Mar 2005
Last Visit: 17 Sep 2018

Topics: 163
Posts: 8192
Location: Neo-traditions, Inc.
usa.gif

PostPosted: Thu Dec 26, 2013 9:15 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

AlumiuN wrote:
EDIT: Also, the code didn't work properly, as I was in a hurry to release it and screwed up.
If I had a dime for the number of times I've done that myself! Laughing
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Thu Dec 26, 2013 10:38 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

Richter Belmont wrote:
I have an Error

C:\WOR Code\wl_draw.cpp In function 'void DrawScaleds()'::
98 C:\WOR Code\wl_draw.cpp:1282 cannot convert 'pixel* {aka unsigned int*}' to 'byte* {aka unsigned char*}' for argument '1' to 'void DrawParticle(byte*, unsigned int, int, int, unsigned int, particle*)'

I remember adding in the 32bit code for the Shading i think but i don't know :\


Yeah change the definition of the function in both wl_def.h and alu_particles.cpp to be "void DrawParticle(pixel *vbuf, unsigned vbufPitch, int id, int vx, unsigned viewscale, particle* cur)" and it should work.
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Thu Dec 26, 2013 10:39 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

I've made a quick video to show the effect of the particles being used for snow, you can see it here.
Tricob
Moderator
<B>Moderator</B>


Joined: 14 Mar 2005
Last Visit: 17 Sep 2018

Topics: 163
Posts: 8192
Location: Neo-traditions, Inc.
usa.gif

PostPosted: Fri Dec 27, 2013 6:13 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

AlumiuN wrote:
I've made a quick video to show the effect of the particles being used for snow, you can see it here.
Looks damn good, but what does the rain look like? Smile
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Fri Dec 27, 2013 4:34 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

Here's a quick video showing the rain. Note that the code for drawing it is currently very simple, if you wanted you could make it look better than I have.
linuxwolf
I am Death Incarnate
I am Death Incarnate


Joined: 16 Oct 2012
Last Visit: 5:03 ago.

Topics: 7
Posts: 174


PostPosted: Sat Dec 28, 2013 2:57 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

It looks good to me but does rain fly into camera when player is moving. And it would be doubly cool if the rain drops would explode when flying into the camera's lens.
AlumiuN
DieHard Wolfer
DieHard Wolfer


Joined: 29 Nov 2007
Last Visit: 3:20 ago.

Topics: 38
Posts: 2482
Location: Christchurch, New Zealand
newzealand.gif

PostPosted: Sat Dec 28, 2013 3:12 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

The rain doesn't collide with the player, no, although I'm sure you could modify the code to do that fairly easily.
linuxwolf
I am Death Incarnate
I am Death Incarnate


Joined: 16 Oct 2012
Last Visit: 5:03 ago.

Topics: 7
Posts: 174


PostPosted: Sat Dec 28, 2013 3:48 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

I have a question for DHW and Wolf3d modders in general. What would it take to have a unified engine with all notable coding features for which we have tutorials already coded into it? Then anyone can download the engine, enable the features they want and then customise resulting engine to their needs. Any new features a modder adds to their copy of the engine could later be incorporated back into the DHW maintained one - a monolithic one at that.
Tricob
Moderator
<B>Moderator</B>


Joined: 14 Mar 2005
Last Visit: 17 Sep 2018

Topics: 163
Posts: 8192
Location: Neo-traditions, Inc.
usa.gif

PostPosted: Sat Dec 28, 2013 7:42 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

OT -

linuxwolf wrote:
I have a question for DHW and Wolf3d modders in general. What would it take to have a unified engine with all notable coding features for which we have tutorials already coded into it? Then anyone can download the engine, enable the features they want and then customise resulting engine to their needs. Any new features a modder adds to their copy of the engine could later be incorporated back into the DHW maintained one - a monolithic one at that.
What would it take? Depends on the engine, obviously. Any engine that's modern enough definitely would use better than 128x128 textures, though. The more modern FPSs use CD-based music, and that always bugged me. I'd much prefer to use a little extra disk space, and have the engine play back an OGG or MP3. If you require a program to have a disk in the drive when older programs didn't, it seems like a step backward to me rather than forward. It probably isn't all that difficult to have the game play back OGG files for music, though.

Anyway, I'm getting off-track. From what research I've done, my vote would *probably* go to Quake I or II. As many people know, Quake has been Open Source for a while, it has numerous utilities, and it still has all the fast pacing that makes Wolf3D stand out among many other modern FPS shooters.

Rest assured, if more than one person is involved in the project, you'll definitely have to decide first what game engine you intend to work with, and you'll have to know more about both game's formats than you really want to know. Smile
ronwolf1705
Moderator
<B>Moderator</B>


Joined: 31 Jul 2006
Last Visit: 6:36 ago.

Topics: 73
Posts: 3765

blank.gif

PostPosted: Sat Dec 28, 2013 8:35 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

I think linuxwolf meant a source code which has all the code tutorials in it. Which can possibly be altered in the VERSION.H file.
Tricob
Moderator
<B>Moderator</B>


Joined: 14 Mar 2005
Last Visit: 17 Sep 2018

Topics: 163
Posts: 8192
Location: Neo-traditions, Inc.
usa.gif

PostPosted: Sat Dec 28, 2013 11:45 am
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Next PostGoto Bottom of Posts

OT -

ronwolf1705 wrote:
I think linuxwolf meant a source code which has all the code tutorials in it. Which can possibly be altered in the VERSION.H file.
Oh, yeah - if I have the name right, the BunkerSDL code was the first to do this. It actually inspired me to do my own version called "Tricob's Base Of Operations". It's still missing a handful of tutorials (mostly AlumiuN-related ones) at this point in time.
RichterBelmont12
DieHard Wolfer
DieHard Wolfer


Joined: 14 Aug 2004
Last Visit: 13 Sep 2018

Topics: 97
Posts: 1508
Location: New Jersey
usa.gif

PostPosted: Sat Dec 28, 2013 10:00 pm
   Subject: Re: Particle system tutorial
   [ IP : Logged ]
Reply with quote
Goto Top of PostsGoto Previous PostGoto Bottom of Posts

YAY I got everything to Work even with the 32bit Shading code ^_^ I like this Code alot I'll use it in Future mods Thanks

_________________
http://www.youtube.com/RichterBelmont12

https://www.facebook.com/RichterBelmont123

https://twitter.com/Richterbelmont6
Display posts from previous:   
Post new topicReply to topic Time synchronized with the forum server time
DieHard Wolfers Forum Index -> SDL Code Crackers View Previous TopicRefresh this PageAdd Topic to your Browser FavoritesSearch ForumsPrint this TopicE-mail TopicGoto Page TopView Next Topic
Page 1 of 1
Jump to:  

Related topics
 Topics   Replies   Views   Last Post 
No new posts [help] Adding teleporters in wolf4sdl
Author: Mortimer
35 10853 Fri May 26, 2017 8:19 am
Military View latest post
No new posts [WOLF4SDL Help] Blake Stone Style doors
Author: Haasboy
3 2998 Sun Jul 20, 2008 7:56 am
Haasboy View latest post
No new posts [Wolf4SDL Help] Inserting a second palette (like in SoD)
Author: Andy_Nonymous
10 3286 Mon Jun 02, 2008 3:59 pm
Adam Biser View latest post
No new posts [Help] Problem with Checkweaponchange function (wolf4sdl)
Author: Mortimer
4 3204 Sat May 17, 2008 11:26 am
Mortimer View latest post
No new posts [help] Wolf4sdl's implemented tutorials
Author: Mortimer
6 3264 Tue May 06, 2008 1:15 pm
Ripper View latest post
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
   You cannot delete your posts in this forum
You cannot vote in polls in this forum


Copyright ©2003-2008 DieHard Wolfers
A Modified subBunker Theme by BrotherTank
Powered by phpBB © 2001, 2005 phpBB Group