EDuke32 Scripting "CON coding help"
#3169 Posted 31 December 2022 - 01:52 PM
This post has been edited by VGames: 31 December 2022 - 01:53 PM
#3170 Posted 31 December 2022 - 02:08 PM
Dunno when I need "or" I set the vars in such a way that 2 of the 3 values can be lumped together using >, <, and not=
#3171 Posted 31 December 2022 - 02:24 PM
VGames, on 31 December 2022 - 01:52 PM, said:
There really isn't, at least not for generically evaluating statements. You can however use ifor to evaluate pairs of values, providing that they are constants, vars, or specific struct members. For example:
ifor player[].heat_on player[].jetpack_on
al THISACTOR
That code will put the value of THISACTOR in the log when either the goggles are on or the jetpack is on. But the following will NOT compile:
ifor { ifg player[].htextra 0 } { ifg player[].shield_amount 0 } al THISACTOR
And removing the { } would change the meaning.
#3172 Posted 31 December 2022 - 02:32 PM
lllllllllllllll, on 31 December 2022 - 02:08 PM, said:
By the way, I don't understand why your enemies aren't already lighting up when they fire. Mine do automatically, and I have not added that flag to them. I do define them as enemy -- are you not doing that?
#3173 Posted 31 December 2022 - 07:29 PM
onevent EVENT_LOADACTOR
switch sprite[].picnum
case SEENINE // Alternate explosions
{
ifn sprite[].extra -1
geta[].extra extrasaved
}
break
endswitch
endeventI had then initially put the following under EVENT_SPAWN... however I have moved it to EVENT_EGS;
onevent EVENT_EGS
switch sprite[].picnum
case EXPLOSION2 // Alternate explosions
{
seta[].extra actorvar[sprite[].owner].extrasaved
ife sprite[].extra extrasaved
{
action ASMOKEBLAST1
}
else nullop
}
break
endswitch
endeventHowever it's now doing the opposite of what I intended - if I leave the SEENINE with an extra of -1; they spawn ASMOKEBLAST1, and if I give them an extra value they play the default EXPLOSION2... I suspect I do not properly understand the following command;
seta[].extra actorvar[sprite[].owner].extrasaved
Does this assign the saved extra value (extrasaved) from EXPLOSION2's 'owner' SEENINE to EXPLOSION2?
--- I also wanted to know if switch statements can be nested? IE calling a state within a switch statement that also contains a switch statement?
This post has been edited by MC84: 31 December 2022 - 07:53 PM
#3174 Posted 31 December 2022 - 08:45 PM
Danukem, on 31 December 2022 - 02:32 PM, said:
The actor that was causing problems was BOSS4. I had thought the useractor was only lighting properly because it was using the trooper's firelaser and the newbeast using shrinker.
#3175 Posted 31 December 2022 - 09:18 PM
lllllllllllllll, on 31 December 2022 - 08:45 PM, said:
The vanilla BOSS4 doesn't shoot anything. What are you having it shoot?
#3176 Posted 31 December 2022 - 09:28 PM
MC84, on 31 December 2022 - 07:29 PM, said:
1. In the load actor event, when you grab the altered EXTRA value into a var, it's best to then set the EXTRA back to -1 (just in case the altered extra does something).
2.
case EXPLOSION2 // Alternate explosions
{
ifn sprite[].owner -1 getav[sprite[].owner].extrasaved extrasaved
// CHOOSE A SPECIFIC NUMERICAL VALUE FOR THE ALTERNATE EXPLOSION
// LET'S SAY 2
ife extrasaved 2 cstat 32768 // we are just turning it invisible for now
}
break
3.
Here's the vanilla EXPLOSION2 code:
action EXPLOSION_FRAMES 0 20 1 1 4
actor EXPLOSION2 1 EXPLOSION_FRAMES
ifactioncount 20
killit
enda
Here's what should be your version:
action EXPLOSION_FRAMES 0 20 1 1 4
action ASMOKEBLAST1 blah blah blah blah
actor EXPLOSION2 1 EXPLOSION_FRAMES
ife extrasaved 2 ifaction EXPLOSION_FRAMES { action ASMOKEBLAST1 cstat 0 }
ifactioncount 20
killit
enda
#3178 Posted 01 January 2023 - 12:57 AM
I'll test useractors with custom projectiles and BOSS4 with stock projectiles to see if there's anything to that or not but it seems to just be an issue of how BOSS4 was implemented. I'm wondering if it's even included in killcount or not.
#3179 Posted 01 January 2023 - 01:57 PM
The map I was testing on has some stock enemies in a dark room with the custom ones so it's not a case of none of the shot flashes working, and the animations/projectiles themselves are very distinct as not to mix up which are being shot directly and which are shot by proxy.
I was very happy at seeing BOSS4 light up for the first time I'm not crazy really~~
#3180 Posted 01 January 2023 - 02:18 PM
lllllllllllllll, on 01 January 2023 - 01:57 PM, said:
The map I was testing on has some stock enemies in a dark room with the custom ones so it's not a case of none of the shot flashes working, and the animations/projectiles themselves are very distinct as not to mix up which are being shot directly and which are shot by proxy.
I was very happy at seeing BOSS4 light up for the first time I'm not crazy really~~
Don't feel too bad -- I have been gaslit by Duke many times.
#3181 Posted 01 January 2023 - 08:50 PM
After doing this the load time dropped quite a bit and that was about when I was trying out the htflag.
#3182 Posted 02 January 2023 - 10:35 AM
#3183 Posted 02 January 2023 - 12:32 PM
VGames, on 02 January 2023 - 10:35 AM, said:
This is probably due to these walls being parts of moving sectors (like doors), the bulletholes won't appear on them, as they wouldn't be carried along (and would look stupid just hanging there in the air if the door moves
#3184 Posted 02 January 2023 - 01:51 PM
You should be able to spawn a wall aligned decal on the event where the bullet impacts by getting the angle to the wall etc to get around the default setting preventing it though you'll want to delete them whenever that wall shifts, with the exception of the decal sitting in a rotating sector. If the original decal won't spawn make a dupe of it.
-
Is there a way to pass down a projectile's palette to the sprite it spawns on impact (proj_spawns)? This projectile is using noshade and taking on the palette from the actor shooting it
#3185 Posted 02 January 2023 - 02:51 PM
#3186 Posted 02 January 2023 - 04:21 PM
How do I code this model to use different skins for different palettes?
model "models/nailgun/nailgun.MD2" {
scale 20
skin { pal 0 file "models/nailgun/nailgun.png" }
anim { frame0 "shot1" frame1 "shot1" fps 4 }
frame { frame "shot1" tile0 6872 tile1 6872 }
anim { frame0 "shot2" frame1 "shot9" fps 40 }
frame { frame "shot2" tile0 6873 tile1 6874 }
hud { tile0 6872 tile1 6874 xadd -0.38 yadd 0.3 zadd 0 angadd 0 }
}
This post has been edited by VGames: 02 January 2023 - 05:01 PM
#3187 Posted 02 January 2023 - 07:17 PM
#3188 Posted 02 January 2023 - 09:46 PM
action EXPLOSION_FRAMES 0 20 1 1 4
action ASMOKEBLAST1 3743 16 1 1 8 // 3743 tiles from original EXPLOSION2 (1890) = 5633
action ASMOKEBLAST2 3763 33 1 1 4
actor EXPLOSION2 1 EXPLOSION_FRAMES
{
ife extrasaved 1
ifaction EXPLOSION_FRAMES
{ action ASMOKEBLAST1 cstat 0 }
else
ife extrasaved 2
ifaction EXPLOSION_FRAMES
{ action ASMOKEBLAST2 cstat 0 }
else
{ ifactioncount 20
killit
}
}
endaI have also tried placing a CACTOR command, but this just froze the actions on their first frame when spawned;
{
ife extrasaved 1
ifaction EXPLOSION_FRAMES
{
cactor SMOKEBLAST1
action ASMOKEBLAST1 cstat 0 }And I tried placing the following in EVENT_EGS;
case EXPLOSION2 // Alternate explosions
{
ifn sprite[].owner -1 // owner being the SEENINE sprite that spawned the EXPLOSION2 actor
getav[sprite[].owner].extrasaved extrasaved
ife extrasaved 1
{
ifactioncount 16
killit
}
else
ife extrasaved 2
{
ifactioncount 33
killit
}
else nullop
}
breakBut that doesn't seem to do anything either...
#3189 Posted 02 January 2023 - 09:58 PM
action EXPLOSION_FRAMES 0 20 1 1 4
action ASMOKEBLAST1 3743 16 1 1 8 // 3743 tiles from original EXPLOSION2 (1890) = 5633
action ASMOKEBLAST2 3763 33 1 1 4
actor EXPLOSION2 1 EXPLOSION_FRAMES
ife extrasaved 1
ifaction EXPLOSION_FRAMES
{ action ASMOKEBLAST1 cstat 0 }
else
ife extrasaved 2
ifaction EXPLOSION_FRAMES
{ action ASMOKEBLAST2 cstat 0 }
ifaction EXPLOSION_FRAMES
ifactioncount 20
killit
else
ifaction ASMOKEBLAST1
ifactioncount 16
killit
else
ifaction ASMOKEBLAST2
ifactioncount 33
killit
endaJust change the actor, don't try to mess with the animations in EGS
#3190 Posted 03 January 2023 - 06:28 AM
#3191 Posted 03 January 2023 - 01:12 PM
VGames, on 02 January 2023 - 04:21 PM, said:
The one thing that should be ok in every case is adding decals to sector 0 masked walls only if you can find a way to exempt textures with alpha. I can't think of any cases where a solid masked surface would create trouble having a bullet hole on it.
#3192 Posted 03 January 2023 - 07:11 PM
Ok so this:
model "models/nailgun/nailgun.MD2" {
scale 20
skin { pal 0 file "models/nailgun/nailgun.png" }
skin { pal 1 file "models/nailgun/nailgunB.png" }
skin { pal 2 file "models/nailgun/nailgunR.png" }
skin { pal 8 file "models/nailgun/nailgunG.png" }
anim { frame0 "shot1" frame1 "shot1" fps 4 }
frame { frame "shot1" tile0 6872 tile1 6872 }
anim { frame0 "shot2" frame1 "shot9" fps 40 }
frame { frame "shot2" tile0 6873 tile1 6874 }
hud { tile0 6872 tile1 6874 xadd -0.38 yadd 0.3 zadd 0 angadd 0 }
}
does nothing for the view model of the gun. I tried the multiple skin lines like you said for the pickup model for the weapon and it worked just like you said it would:
model "models/nailgun_pick/nailgun_pick.md2" {
scale 2.6 shade 0
skin { pal 0 file "models/nailgun_pick/nailgun_pick.png" }
skin { pal 1 file "models/nailgun_pick/nailgun_pickB.png" }
skin { pal 2 file "models/nailgun_pick/nailgun_pickR.png" }
skin { pal 8 file "models/nailgun_pick/nailgun_pickG.png" }
anim { frame0 "shot1" frame1 "shot1" fps 4 }
frame { frame "shot1" tile0 6871 tile1 6871 }
}
But for the view model it does nothing. Only the pal 0 skin is used.
#3193 Posted 03 January 2023 - 08:13 PM
I don't know if you can make them use different pals, though, I don't recall ever trying that.
#3194 Posted 04 January 2023 - 12:25 PM
Danukem, on 03 January 2023 - 08:13 PM, said:
I don't know if you can make them use different pals, though, I don't recall ever trying that.
Ok cool. I’ll check this stuff out again. Maybe I missed something
#3195 Posted 05 January 2023 - 12:56 PM
useractor notenemy DOORBOARDED 120
{
cstat 273 // blocked, hittable
ifaction 0
{
ifhitweapon
{ ifstrength 100
action ONE
break
}
else
{ ifstrength 80
action TWO
break
}
else
{ ifstrength 60
action THREE
break
}
else
{ ifstrength 40
action FOUR
break
}
else
{ ifstrength 20
action FIVE
break
}
else
{ ifstrength 0
killit
}
}
}
enda
#3196 Posted 05 January 2023 - 01:13 PM
MC84, on 05 January 2023 - 12:56 PM, said:
It's easy enough, but first we need to get clear on the intent. What is supposed to happen if you do enough damage to reduce it multiple levels in one hit? Do you want it reduced by only one damage level anyway?
#3197 Posted 05 January 2023 - 02:05 PM
Danukem, on 05 January 2023 - 01:13 PM, said:
Well I guess in my simplistic understanding I assumed that the 'ifhitweapon' branch included the multiple else statements to handle the possibility that you shoot the actor with an RPG and it takes it down multiple levels... Those actions are relative to the zero/default tile of the actor right? So if the actor was hit by a weapon, and it takes the damage down to 20 (from 120), then action 5 will skip ahead to the 5th damaged state of the actor right? I mean obviously it's not working - but that was the intent!
This post has been edited by MC84: 05 January 2023 - 02:06 PM
#3198 Posted 05 January 2023 - 05:29 PM
MC84, on 05 January 2023 - 02:05 PM, said:
Something like this should work:
useractor notenemy DOORBOARDED 120
{
cstat 273 // blocked, hittable
ifaction 0
{
ifhitweapon
{
ifstrength 100
{
action ONE
break
}
else ifstrength 80
{
action TWO
break
}
else ifstrength 60
{
action THREE
break
}
else ifstrength 40
{
action FOUR
break
}
else ifstrength 20
{
action FIVE
break
}
else
killit
}
}
}
enda
Notice where the brackets are.
This post has been edited by VGames: 05 January 2023 - 05:30 PM

Help
Duke4.net
DNF #1
Duke 3D #1


