Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
baja blast rd.

*** The "ask a miscellaneous editing question" thread ***

Recommended Posts

47 minutes ago, scifista42 said:

ZDoom tends to treat tag 0 as special, so I doubt that Thing_Remove called with tag 0 would actually remove everything tagged 0 from the map.


That actually makes sense, since the player is, "0" too.

Share this post


Link to post

The SWITCHES format check in SLADE is rather simple:

  1. entry is named SWITCHES
  2. entry size is a multiple of 20
  3. last two bytes are 00.

I presume it's the third item that fails here.

 

You can force SLADE to treat it as a SWITCHES lump anyway, damn the consequences, by selecting it, opening the console, and using the command

type switches force

Then you can go back to it and check that the last row has its type set to 0.

Share this post


Link to post
33 minutes ago, Gez said:

The SWITCHES format check in SLADE is rather simple:

  1. entry is named SWITCHES
  2. entry size is a multiple of 20
  3. last two bytes are 00.

I presume it's the third item that fails here.

 

You can force SLADE to treat it as a SWITCHES lump anyway, damn the consequences, by selecting it, opening the console, and using the command

 


type switches force

 

Then you can go back to it and check that the last row has its type set to 0.

 

I literally have no idea what any of that means, and trying to find a tutorial on Google is an exercise in futility.

 

The switches animate for me. I just can go in and add things.


This might as well be it's own language.
https://zdoom.org/wiki/SWITCHES


I think Boom is maybe just for the l33ts. I'll just stick with GZDoom.

I guess I'm just, "Another ZDoom mapper that doesn't know the basics of Doom mapping." (As some asshole suggested when I asked for a link to a reference. God forbid anyone try to learn it. If it isn't innate knowledge for you, you should just fuck off, right?)

Share this post


Link to post

SLADE has a console. You can open it with View->Console, or with the Ctrl-2 shortcut.

Share this post


Link to post
2 hours ago, scifista42 said:

Nothing specific to monster corpses, just Thing_Remove for arbitrarily tagged things, so call that with the tag of the monsters at some point(s) in time.

I was going to give them a tag anyway... I don't know if the tag is removed when the thing dies, but lemme go and do some scientific experimentation to them. Thanks a lot.

 

For those in the future who get here by google: In case this works out and I don't need to come back, the method I'm thinking of is:

Spawn monster, give it a UniqueTID();

Give it action special Script_Execute;

Do a Thing_Remove(ActivatorTID());

If that doesn't work, either the monster didn't keep its thing ID when dying or the activator of a dead monster's script is who killed it. In which case, good luck. The second case might even make ZDoom crash.

Share this post


Link to post

That's exactly what it was. I was taking apart an engine and thinking, "I don't need these extra parts." Thank you, Gez.

@Albertoni The parameters of Thing_SpawnFacing are (tid, type, nofog, newtid) <--- This is where your new TID will be (for spawned monsters). You could use a line to do action 80 and call on Thing_Remove from there. That might be what you just said. I'm confused by, "UniqueTID();" as I've never seen it before or thought to use it. (If it's an ACS function.) I'll just google it quick. 

Yeah. Don't use that. Use Thing_Spawn or Thing_SpawnFacing and give it a TID through there. I think UniqueTID will give every monsters a different TID so it'd be really hard to target them for the Thing_Remove

You could probably do a While loop (if that's even what it's called) so that While TID(#) is more than X it waits until it goes over that number and then when it goes over X it will execute Thing_Remove. That's beyond my ability though.

Edited by everennui

Share this post


Link to post
2 hours ago, everennui said:

Yeah. Don't use that. Use Thing_Spawn or Thing_SpawnFacing and give it a TID through there. I think UniqueTID will give every monsters a different TID so it'd be really hard to target them for the Thing_Remove
[...]

That's beyond my ability though.

And that's way under my ability. :P

 

Here's how I'll do it, more or less. I'll try ActivatorTID first since it's simpler, but if that doesn't work this one will certainly.

script 1 (){ // spawns the monster
    int id = UniqueTID();
    Thing_Spawn (placeID, monsterType, 0, id);
    Thing_SetSpecial (id, ACS_ExecuteAlways, 2, id); // Unsure if ExecuteAlways is required or even a good idea here...
    // Also, note how I'm passing the id as an argument for script 2.
}

script 2 (int myId){
    Delay(300*35);
    Thing_Remove(myId);
}

 

Share this post


Link to post
1 hour ago, Albertoni said:

And that's way under my ability. :P

 

Here's how I'll do it, more or less. I'll try ActivatorTID first since it's simpler, but if that doesn't work this one will certainly.


script 1 (){ // spawns the monster
    int id = UniqueTID();
    Thing_Spawn (placeID, monsterType, 0, id);
    Thing_SetSpecial (id, ACS_ExecuteAlways, 2, id); // Unsure if ExecuteAlways is required or even a good idea here...
    // Also, note how I'm passing the id as an argument for script 2.
}

script 2 (int myId){
    Delay(300*35);
    Thing_Remove(myId);
}

 

Just make sure you're using the same variable. You've got it as two here. id & myId.

I might be wrong and probably am, but I think you want the integer outside of Script 1. Something about global scope. (I'm probably wrong.)

Edited by everennui

Share this post


Link to post

Can someone explain why I get this visual error in non hardware ports? I put textures everywhere,where I saw HOM. Second question,how to make monster teleporter which triggers with switch?

leak.jpg

Share this post


Link to post
2 hours ago, MysteriousHaruko said:

Can someone explain why I get this visual error in non hardware ports? I put textures everywhere,where I saw HOM. Second question,how to make monster teleporter which triggers with switch?

leak.jpg

For your first question, is this on Chocolate Doom or a more recent port just running in Software Mode?

 

For your second question, have the switch lower the bars of a caged monster somewhere off-map that is surrounded by teleport lines. The bars raise, the monster walks over the teleport lines and teleports in. Just make sure you use a pipe sector or merged sector to wake the monster up with player sounds before the player hits the switch.

Share this post


Link to post
1 minute ago, Bauul said:

For your first question, is this on Chocolate Doom or a more recent port just running in Software Mode?

I use boom format in this map. I tested that place with prboom+ and zdoom,which don't have hardware options. In Qzdoom and Gzdoom,this place doesn't show any visual bugs like this. 

Share this post


Link to post

Could be a nodebuilder being dumb. Open your editor and figure out where to change that.

For GZDoom builder, it's in Tools -> Game Configuration -> Choose your format on the left -> Nodebuilder, then switch both to ZDBSP - Normal (zero reject).

Share this post


Link to post

Yeah,I changed nodebuilder as you said and this problem went away. I was using zenmode for nodebuilding. Thank you. 

Share this post


Link to post

Edit: Turns out you need a +ISMONSTER flag to be dormant. Nevermind this yet again.

 

So I got into a pickle with QZDoom's latest version. Dormant monsters don't stay dormant.

https://www.dropbox.com/s/se39akxqhjoqrnr/example.wad?dl=1

 

You should see only one source of rockets as 2 are marked dormant. Yet you see 3. Why? Are friendly monsters un-dormant-able or something?

Decorate code is here:

Spoiler

    actor UpgradeableTurret 7800
    {
    spawnid 170
    obituary "%o was somehow killed by his own devices???"
    health 450
    radius 32
    height 64
    meleeDamage 0
    mass 100
    speed 0
    +DONTTHRUST
    +FRIENDLY
    +NODAMAGE
    +NOGRAVITY
    +NOBLOOD
    -SOLID

    var int user_firingSpeed;
    var int user_weapon;

    states
      {
       Spawn:
       TNT1 A 0 NoDelay
       {
          user_firingSpeed = 35;
         user_weapon = 0;
        }
       TNT1 A 10
       Goto Look

       Look:
       TNT1 A 10 A_Look
       Loop

       See:
       TNT1 A 1
       TNT1 A 0 A_JumpIf(user_weapon == 0,"Pistol")
       TNT1 A 0 A_JumpIf(user_weapon == 1,"Shotgun")
       TNT1 A 0 A_JumpIf(user_weapon == 2,"SuperShotgun")
       TNT1 A 0 A_JumpIf(user_weapon == 3,"Rocket")
       TNT1 A 0 A_JumpIf(user_weapon == 4,"Plasma")
       TNT1 A 0 A_JumpIf(user_weapon == 5,"BFG")
       Loop


       Pistol:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomBulletAttack(5.6, 0, 1, 5)
       TNT1 A 1 A_PlaySound("weapons/pistol", CHAN_WEAPON)
       Goto look

       Shotgun:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomBulletAttack(5.6, 0, 7, 5)
       TNT1 A 1 A_PlaySound("weapons/shotgf", CHAN_WEAPON)
       Goto look

       SuperShotgun:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_CustomBulletAttack(11.2, 7.1, 20, 5)
       TNT1 A 1 A_PlaySound("weapons/sshotf", CHAN_WEAPON)
       Goto look

       Rocket:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_SpawnProjectile("Rocket")
       TNT1 A 1 A_PlaySound("weapons/rocklf", CHAN_WEAPON)
       Goto look

       Plasma:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_SpawnProjectile("PlasmaBall")
       TNT1 A 1 A_PlaySound("weapons/plasmaf", CHAN_WEAPON)
       Goto look

       BFG:
       TNT1 A 1 A_SetTics(user_firingSpeed)
       TNT1 A 0 A_FaceTarget
       TNT1 A 0 A_SpawnProjectile("BFGBall")
       TNT1 A 1 A_PlaySound("weapons/bfgf", CHAN_WEAPON)
       Goto look

       Pain:
       Goto See

       Death:
       TNT1 A -1
       Stop
      }
    }

 

 

Edited by Albertoni

Share this post


Link to post

I've tried rename textures inside TEXTUREx lump(I touched only custom textures) and now my ports can't recognize them. Before I did this thing,I've cleared unused patches,textures and flats. What I did wrong here?Should I first rename outside textures before I go into TEXTUREx lump? 

Share this post


Link to post

What did you do exactly? I'm a bit confused with what you call "outside textures"...

Share this post


Link to post
Just now, Gez said:

What did you do exactly? I'm a bit confused with what you call "outside textures"...

I'm talking about textures which are in PP_START marks. I know it's the same thing,but easier for me to recognize. Well,first I've cleared unused things and later tried rename textures inside TEXTUREx and now boom port can't find them. Zandronum shows "checkboard" instead of textures. 

Share this post


Link to post

The graphics between PP_START/PP_END aren't textures, they're patches. You're supposed to be building composite textures by assembling together one or more patches.

 

Textures don't need to have the same name as their patch. Example: the Doom II texture "ASHWALL2" is made of the patch "RW22_1".

 

Now if you were to rename ASHWALL2 into, say RENAMETX, and don't change its definition so it still uses RW22_1, then everything should be fine. Maps that used texture ASHWALL2 will have to be updated to use RENAMETX instead, obviously, but otherwise everything will work.

 

If you instead changed ASHWALL2 to use a patch named RENPAT instead of RW22_1, then of course you'll have to rename RW22_1 if you want the texture to be successfully created.

 

My best guess is that you've renamed textures and forgot to update the maps that used them. Renaming the patches will not fix that! It'll just mean that your maps will use textures that no longer exist (under the name they expect), and that the textures that replaced them are built from patches that no longer exist (under the name they expect). Two wrongs ending up making a bigger wrong.

Share this post


Link to post
7 minutes ago, Gez said:

The graphics between PP_START/PP_END aren't textures, they're patches. You're supposed to be building composite textures by assembling together one or more patches.

 

Textures don't need to have the same name as their patch. Example: the Doom II texture "ASHWALL2" is made of the patch "RW22_1".

 

Now if you were to rename ASHWALL2 into, say RENAMETX, and don't change its definition so it still uses RW22_1, then everything should be fine. Maps that used texture ASHWALL2 will have to be updated to use RENAMETX instead, obviously, but otherwise everything will work.

 

If you instead changed ASHWALL2 to use a patch named RENPAT instead of RW22_1, then of course you'll have to rename RW22_1 if you want the texture to be successfully created.

 

My best guess is that you've renamed textures and forgot to update the maps that used them. Renaming the patches will not fix that! It'll just mean that your maps will use textures that no longer exist (under the name they expect), and that the textures that replaced them are built from patches that no longer exist (under the name they expect). Two wrongs ending up making a bigger wrong.

So,how to rename textures or patches safely and not get any error and messages? I have copies of my map without any changes. Anyway, I didn't know about this,I shouldn't be so straightfoward. 

Share this post


Link to post

Open your map and do a search & replace for the old texture name with the new.

 

If you also rename the patch, you'll have to update the texture definition to use the new patch name, too.

 

 

Really it's like if I told you to go meet Bob in Smolton, but in the meanwhile Smolton had been renamed to Lilburg and Bob changed his name to Alfred. If your instructions aren't updated to "meet Alfred in Lilburg" you're never going to find him.

Share this post


Link to post

In map two of, Ancient Aliens there is a generalized action of 15226 for a floor that drops with the use of any blue key. I looked at it and it is using a locked door trigger. I have no idea how this works. How can I use a Blue Skull Key to trigger a set of stairs that rise? ...or is this impossible?

Share this post


Link to post

Look carefully at which sector does the switch actually affect. There is a dummy sector outside the map bounds with a voodoo doll, a scrolling floor, and a closed door. Pressing the switch opens this door (if you have the respective key, as it uses a locked door open action), which makes the voodoo doll be pushed by the scrolling floor across a linedef that does the action that you'll note to happen within the map. This action could be anything, even a sequence of actions could be triggered this way if multiple linedefs were placed in a row and the voodoo doll crossed all of them.

Share this post


Link to post

Okay. Now I understand why people use them. So the key opens a door and then the voodoo doll goes across a conveyor belt with a W1 Line with an action to Floor Lower. That's pretty clever. Thank you so much. This works great. Mind = blown.

Share this post


Link to post

Voodoo dolls are <3. With enough of them and a lot of ingenuity, you can do 90% of what ACS scripting can do.

Share this post


Link to post

I know I have said this many many times but I feel like voodoo conveyor scripts were an absolute stroke of genius for Boom, and all the more so for being basically unintentional.

  • They allow you to set up simple actions without too much trouble, but setting up big and complex "scripts" is a real pain in the ass. This helps enforce the KISS formula - you *want* everything to be simple, and if you're trying to do something that is overly complex, it forces you to think about it.
  • You can "spawn in" monsters, but you have to actually place all the monsters on the map at the start. Again, this makes it more difficult to overuse them, or do something like "spawn in 100 Cyberdemons at these 100 points" without a huge amount of busywork.
  • Because the "scripts" are composed of Doom gameplay elements, it is basically impossible to use them to create something "un-Doomy." Which is not to say that there is something wrong with modding Doom to do something different, but in Boom you can't make long stupid "cutscenes" of freezing the player in place and having a lot of dumb poorly written hudmessages to advance a "story," which is an aspect of ZDoom mapping that has not aged well at all.
  • Because all the "scripts" are physical, they aren't intimidating in the same way scripting is - a lot of people will just refuse to even look at a scripting language, but a voodoo doll on a conveyor belt being pushed through tripwires is a "physical" thing that is relatively intuitive and easy to grasp.
  • Because the "scripts" are physical constructs, they are impossible to obfuscate or result in code being lost - contra ZDoom maps where ACS scripts are compiled bytecode and you can't examine the original scripts unless the author includes them. It's inherently "open source."
  • It scratches the same itch children have from constructing / watching Rube Goldberg contraptions.

Share this post


Link to post

So I got the stairs to lift, and now I want to create a lift that works in the same fashion.

My problem is that the door opens and stays open long enough for the voodoo doll to pass through several times before the door closes again. This makes it so that lift goes down and up 2-3 times. I tried putting a lift on the conveyor belt so that their'd be a little bit of a delay before the the player can pass to get to the teleport line, but if the player presses the use button on the lift before the lift lowers all the way, he'll get stuck on the lift, and since there is a WR before this, the voodoo doll will never cross that line again which breaks the lift. I tried to make the conveyor belt longer, but it seems like the longer you make it, the faster it goes.

I'm looking at boomedit.wad and there's one that moves when the sector changes height, but I can't figure how I'd do that with a key.

Share this post


Link to post
1 hour ago, Linguica said:
  • They allow you to set up simple actions without too much trouble, but setting up big and complex "scripts" is a real pain in the ass. This helps enforce the KISS formula - you *want* everything to be simple, and if you're trying to do something that is overly complex, it forces you to think about it.
  • Because the "scripts" are composed of Doom gameplay elements, it is basically impossible to use them to create something "un-Doomy."

Well said! This is why I've been using conveyors/dummy sectors for all my effects so far, even though I'm mapping in Hexen format. Boom-style compatibility just feels right.

Share this post


Link to post
51 minutes ago, everennui said:

I tried to make the conveyor belt longer, but it seems like the longer you make it, the faster it goes.

The key is to keep the linedef with the scrolling action of a fixed length (I usually work with multiples of 32).

 

As a reference for studying timing-based Voodoo doll scripts, some time ago I made a wad with toilets that 'work'Here's the wad if you want to study the mechanisms (I'll warn you that UV is really hard, in case you feel like playing it too). I often use tiny one-second Boom lifts as a gating mechanism in these. This wasn't too tricky to figure out how to do (I was still a relative Voodoo doll noob back then), but it did involve a decent amount of testing to get the distance between actions in the scroller just right.

Edited by rdwpa

Share this post


Link to post

Question: if I have a wad open in GZDB (say btsx_e1a.wad), which needs a resource wad specified in Map Options to view textures and stuff (say btsx_e2a.wad), it seems like I have to specify the resource wad again when I change levels. Is there a way to get GZDB to keep the resource wad active for every level after I specify it once? (I use a 2015 build of GZDB, if you are wondering, just in case newer GZDBs can do this.) 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×