
EDuke32 Scripting "CON coding help"
#2240 Posted 21 February 2018 - 06:12 PM
Maybe you get lucky and stopsound will stop it fast enough so you don't hear it
This post has been edited by Mark.: 21 February 2018 - 06:14 PM
#2241 Posted 21 February 2018 - 06:15 PM
ifactor MYCULTISTGUY { // blah blah blah change the action } else ifactor LIZTROOP { // blah blah blah change the action } // ... and so on
EDIT: on the squish sound, I don't really want to speculate about it because it could either be a hardcoded thing interacting with your code or there could be something else in your code causing it. Without looking at all of the relevant code, it's hard to say
This post has been edited by Trooper Dan: 21 February 2018 - 06:17 PM
#2242 Posted 21 February 2018 - 06:24 PM

#2243 Posted 21 February 2018 - 06:29 PM
Mark., on 21 February 2018 - 06:24 PM, said:

Your suggestion about stopping the sound when ifonwater would probably work, but I would first want to know what the root cause is and only do that as a last resort. Also, you would want to use "ifonwater ifactorsound THISACTOR SQUISHED stopactorsound THISACTOR SQUISHED". That's because the more general command "stopsound" will stop any instance of the sound, including instances legitimately started by another actor.
#2244 Posted 21 February 2018 - 06:47 PM
Oh, I completely forgot that I can determine actors with "ifactor". Need to stop trying to do everything via gamevars.
Now I at least understand why in Attririon you collected all monster ai's and action's in one place.
The SQUISH bug is not code-related 100%. I tried another place and found no such issues. Let's just leave it at that.
@Mark
stopsound will stop all sounds of that kind in a map - bad solution.
stopactorsound THISACTOR SQUISHED will stop this exact squish sound but it will also stop a sound of exploding body
EVENT_SOUND is the best way to catch it I think, but anyway it's a "kludge".

This post has been edited by Mere_Duke: 21 February 2018 - 06:48 PM
#2245 Posted 21 February 2018 - 07:08 PM
Mere_Duke, on 21 February 2018 - 06:47 PM, said:
But you would also be checking ifonwater
Also, if you check this stuff before ifhitweapon, then that won't be an issue because in the exploding body case you use killit and then there is no actor to run the code which would stop sound on the next tic
#2246 Posted 21 February 2018 - 07:39 PM
Trooper Dan, on 21 February 2018 - 07:08 PM, said:
But if actor will walk out of the water, this won't stop the sound. But anyway it only happens for a single sector. The problem is not code-related, as I thought before. Both ways (mine & yours) work, but I prefer yours. Thx for that.
#2247 Posted 24 February 2018 - 08:14 AM
Is there any way to create a hitbox for a sprite? I have a tree sprite, and want bullets to pass through leaves but hit a trunk. So far I just spawn a tall&thin sprite with a cstat of 32768+257 in the center of that tree to simulate a trunk, and set a tree cstat to 0.
#2248 Posted 24 February 2018 - 07:29 PM
#2249 Posted 25 February 2018 - 04:59 AM
Mere_Duke, on 24 February 2018 - 08:14 AM, said:
I don't understand what you are asking. A projectile is also a sprite, and it has a picnum just like any other sprite. It's not clear what you are trying to say. "catch them" sounds like a euphemism of some kind.
Mere_Duke, on 24 February 2018 - 08:14 AM, said:
I can only think of 2 methods off the top of my head. Method one is you define the actor with a sprite that has the actual hitbox you want, and then use an action to make it look different from its hitbox. Method 2 is what you describe -- make the actor nonhittable but make it spawn one or more proxy sprites with hitboxes that you want and make them transfer damage to the actor.
btw my internet is down at home and I can only be online for 5 minutes a day until it is fixed so that is all I can manage for now.
#2250 Posted 25 February 2018 - 07:59 PM
#2251 Posted 01 March 2018 - 11:28 AM
but when I put it in the def file.
I get
"Invalid frame name on line"
model "custom/19712_mushroom.md3" { scale 1 skin { pal 0 file "custom/19712_mushroom.png" } frame { name "Frame0" tile 19712 } }
What I am doing wrong?
Error logs
===============================
Mapster32 r6710
Built Feb 26 2018 17:17:23, GCC 7.2.0, 64-bit
Running on Windows 10 (build 10.0.16299)
Initializing SDL 2.0.7
Using C:/$$ EDUKE32 HRP $$/ for game data
Executing "m32_settings.cfg"
Searching for game data...
Found no recognized game data!
Using "DUKE3D.GRP" as main game data file.
Using group file "autoload/duke3d_hrp.zip".
Using group file "autoload/duke3d_music-sc55.zip".
Loading "m32help.hlp"
Error initializing integrated help: file "m32help.hlp" not found.
0 joystick(s) found
Initialized 24.0M cache
Loading "duke3d.def"
Polymer High Resolution Pack (version 5.4.674)
.............................Invalid frame name on line highres/sprites/z_custom.def:8
Removing model 417 due to errors.
...................................................
Definitions file "duke3d.def" loaded.
Setting video mode 800x600 (8-bpp windowed)
Refresh rate: 60Hz
Trying SDL_Renderer "direct3d"
Loading sounds from "GAME.CON"
warning: duplicate sound #261, overwriting
warning: duplicate sound #323, overwriting
Loaded 374 sound definitions.
Wrote m32_settings.cfg
===============================
z_custom.def is the file where I put customized models
Both Duke and Mapster are set to polymer.
This post has been edited by Zaxtor: 01 March 2018 - 11:29 AM
#2252 Posted 01 March 2018 - 11:37 AM
Frame1 is another popular default name. You can try that first if you wish.
This post has been edited by Mark.: 01 March 2018 - 11:39 AM
#2253 Posted 01 March 2018 - 12:01 PM
and no workin for model in def.
ill attach the file.
I tried Frame1.
Frame0
Imported object, says framecount 1, assuming is Frame1
I attached the thing.
Originally the "image file was tga but changed to png"
Theres 2 md3 files. I use the no1.
Dunno why 2 came, probably cus diff mushroom sizes.
Sprite origin is
https://www.katsbits...ll-mushroom.php
Attached File(s)
-
mushroon.rar (61.47K)
Number of downloads: 619
This post has been edited by Zaxtor: 01 March 2018 - 12:01 PM
#2257 Posted 01 March 2018 - 12:20 PM
#2258 Posted 14 March 2018 - 07:30 PM
if I do
useractor enemystayput SPRITENAMESTAYPUT SPRITENAMESTRENGTH
codes etc etc etc
cactor SPRITENAME
enda
Wont work.
I tried "setactor[THISACTOR].htactorstayput (var)"
they do nothing at all, mob walks out of sector,
Does that to customized mob (sprite from scratch) even if is a copy of an existing mob but with diff name.
What should we put in the code to make it work?
#2259 Posted 14 March 2018 - 07:50 PM
Zaxtor, on 14 March 2018 - 07:30 PM, said:
codes etc etc etc
cactor SPRITENAME
enda
That should work. To keep it simple, use
useractor enemystayput SPRITENAMESTAYPUT SPRITENAMESTRENGTH cactor SPRITENAME enda
and put ALL code in the regular actor or states used by regular actor. If you still can't get it to work, post your code for both actors, including which tile numbers you are using, all the move definitions, etc.
#2260 Posted 14 March 2018 - 08:02 PM
I made code to the stayput into a single line like u mentioned.
here is code
// Tormented pig action ATORMENTPWALK 0 4 5 1 20 action ATORMENTPRUN 0 4 5 1 11 action ATORMENTPSHOOT 30 2 5 1 58 action ATORMENTPCOCK 25 1 5 1 16 action ATORMENTPSTAND 30 1 5 1 1 action ATORMENTPDIVE 40 2 5 1 40 action ATORMENTPDIVESHOOT 45 2 5 1 58 action ATORMENTPDYING 55 5 1 1 15 action ATORMENTPHIT 55 1 1 1 10 action ATORMENTPDEAD 60 1 1 1 1 move TORMENTPWALKVELS 64 // standard is 72 pig is 11.1% slower move TORMENTPRUNVELS 96 // standard is 108 pig is 11.1% slower move TORMENTPSTOPPED ai AITORMENTPSEEKENEMY ATORMENTPWALK TORMENTPWALKVELS seekplayer ai AITORMENTPSHOOTENEMY ATORMENTPSHOOT TORMENTPSTOPPED faceplayer ai AITORMENTPFLEEENEMY ATORMENTPWALK TORMENTPWALKVELS fleeenemy ai AITORMENTPSHOOT ATORMENTPSHOOT TORMENTPSTOPPED faceplayer ai AITORMENTPDODGE ATORMENTPRUN TORMENTPRUNVELS dodgebullet ai AITORMENTPCHARGE ATORMENTPRUN TORMENTPRUNVELS seekplayer ai AITORMENTPDIVING ATORMENTPDIVE TORMENTPSTOPPED faceplayer ai AITORMENTPDYING ATORMENTPDYING TORMENTPSTOPPED faceplayer ai AITORMENTPHIT ATORMENTPHIT TORMENTPSTOPPED faceplayer state tormentseekenemystate ifai AITORMENTPCHARGE { ifcansee ifpdistl 3084 { ifnotmoving ai AITORMENTPSEEKENEMY else ai AITORMENTPDIVING } break } else iffloordistl 32 { ifpdistg 4096 { ifactornotstayput ai AITORMENTPCHARGE } ifrnd 8 { ifbulletnear ai AITORMENTPDODGE } } ifrnd 128 ifcansee { ifai AITORMENTPDODGE { ifcount 32 ai AITORMENTPCHARGE break } iffloordistl 32 { ifpdistl 1024 ifp palive ifcanshoottarget { ai AITORMENTPSHOOTENEMY break } ifcount 48 { ifrnd 8 ifp palive ifcanshoottarget { ifrnd 192 ai AITORMENTPSHOOTENEMY else ai AITORMENTPDIVING break } } } } ends state tormentshootenemystate { ifcount 12 nullop else ifcount 11 { ifcanshoottarget { sound PIG_ATTACK shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN } else ai AITORMENTPSEEKENEMY } ifcount 25 nullop else ifcount 24 { action ATORMENTPCOCK sound SHOTGUN_COCK } ifcount 48 nullop else ifcount 47 { ifcanshoottarget { sound PIG_ATTACK shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN } else ai AITORMENTPSEEKENEMY } ifcount 60 nullop else ifcount 59 { action ATORMENTPCOCK sound SHOTGUN_COCK } ifcount 72 { ifrnd 64 resetcount else { ifpdistl 768 ai AITORMENTPFLEEENEMY else ai AITORMENTPSEEKENEMY } } ifaction ATORMENTPCOCK ifactioncount 2 action ATORMENTPSHOOT } else ai AITORMENTPSEEKENEMY ends state tormentfleeenemystate ifactioncount 8 ai AITORMENTPSEEKENEMY else ifnotmoving ai AITORMENTPSEEKENEMY ends state tormentdivestate ifaction ATORMENTPDIVESHOOT { ifcansee { ifcount 12 nullop else ifcount 11 { ifcanshoottarget { sound PIG_ATTACK shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN } else ai AITORMENTPSEEKENEMY } ifcount 25 nullop else ifcount 24 sound SHOTGUN_COCK ifcount 48 nullop else ifcount 47 { ifcanshoottarget { sound PIG_ATTACK shoot SHOTGUN shoot SHOTGUN shoot SHOTGUN } else ai AITORMENTPSEEKENEMY } ifcount 60 nullop else ifcount 59 { sound SHOTGUN_COCK ifgapzl 32 ai AITORMENTPDIVING else { ifpdistl 4096 ai AITORMENTPFLEEENEMY else ai AITORMENTPSEEKENEMY } } } else ifgapzl 32 ai AITORMENTPDIVING else ai AITORMENTPSEEKENEMY } else ifactioncount 2 ifp palive { resetcount action ATORMENTPDIVESHOOT } ends state checktormenthitstate spawn SMALLSMOKE ifdead { state random_wall_jibs ifrnd 16 spawn ATOMICHEALTH else state drop_shotgun ifwasweapon GROWSPARK { shoot GROWSPARK } addkills 1 ifwasweapon RADIUSEXPLOSION { cactor TORMENTDPIGDSPRITE } else ifwasweapon RPG { cactor TORMENTDPIGDSPRITE } else ai AITORMENTPDYING sound TPIG_DYING } else { sound TPIG_PAIN state random_wall_jibs ifwasweapon GROWSPARK sound EXPANDERHIT else ifrnd 32 ai AITORMENTPHIT else ifrnd 64 ai AITORMENTPSHOOTENEMY else ifrnd 64 { ai AITORMENTPDIVING action ATORMENTPDIVESHOOT } } ends state tormentdyingstate ifactioncount 5 { ifrnd 64 spawn SMALLSMOKE state rf iffloordistl 8 sound THUD action ATORMENTPDEAD move TORMENTPSTOPPED cactor TORMENTDPIGDSPRITE break } ends actor TORMENTDPIGSTAYSTILL TORMENTPIGSTRENGTH ifcanseetarget { ai AITORMENTPSEEKENEMY sound TPIG_RECOG cactor TORMENTDPIG } enda actor TORMENTDPIGDIVE TORMENTPIGSTRENGTH ai AITORMENTPDIVING action ATORMENTPDIVESHOOT cactor TORMENTDPIG enda useractor enemystayput TORMENTDPIGSTAYPUT TORMENTPIGSTRENGTH ai AITORMENTPSEEKENEMY cactor TORMENTDPIG enda actor TORMENTDPIG TORMENTPIGSTRENGTH ATORMENTPSTAND fall state checksquished ifaction ATORMENTPSTAND ai AITORMENTPSEEKENEMY else ifaction ATORMENTPDEAD { ifrespawn ifcount RESPAWNACTORTIME { spawn TRANSPORTERSTAR cstat 257 strength TORMENTPIGSTRENGTH ai AITORMENTPSEEKENEMY } else { strength 0 ifhitweapon ifwasweapon RADIUSEXPLOSION { cactor TORMENTDPIGDSPRITE } break } } else ifai AITORMENTPDYING state tormentdyingstate else ifai AITORMENTPHIT { ifactioncount 3 ai AITORMENTPSEEKENEMY } else { ifai AITORMENTPSEEKENEMY state tormentseekenemystate else ifai AITORMENTPDODGE state tormentseekenemystate else ifai AITORMENTPSHOOTENEMY state tormentshootenemystate else ifai AITORMENTPFLEEENEMY state tormentfleeenemystate else ifai AITORMENTPDIVING state tormentdivestate else ifai AITORMENTPCHARGE state tormentseekenemystate ifhitweapon state checktormenthitstate ifrnd 1 { ifrnd 32 soundonce TPIG_ROAM else ifrnd 64 { soundonce TPIG_ROAM2 } ifrnd 72 { ifcansee { spawn FIRESPREADOR spawn FIRESPREADOR } } else soundonce TPIG_ROAM3 ifrnd 94 { ifcansee { spawn FIRESPREADOR spawn FIRESPREADOR spawn FIRESPREADOR } } } } enda
This post has been edited by Zaxtor: 14 March 2018 - 08:10 PM
#2261 Posted 14 March 2018 - 08:10 PM
Was a test to make sure that part of the code works
#2262 Posted 14 March 2018 - 08:34 PM
Trooper Dan, on 14 March 2018 - 07:50 PM, said:
So which tile numbers are you using? If that actor overlaps the PIGCOP tiles, then that could be your problem.
#2263 Posted 14 March 2018 - 08:46 PM
I would'nt mind if it goes in other sectors with same tile as current tile as long he doesn't fall into the lava lol.
PS
At the moment the pig cop is alone in sector.
All others of his kind are in the same tile number as the one who is with stayput
This post has been edited by Zaxtor: 14 March 2018 - 08:48 PM
#2264 Posted 14 March 2018 - 10:31 PM
Try this. Instead of
actor TORMENTDPIG TORMENTPIGSTRENGTH ATORMENTPSTAND
useractor enemy TORMENTDPIG TORMENTPIGSTRENGTH ATORMENTPSTAND
_____________________________________________________
If that doesn't work, then just add the stayput code into the actor.
gamevar staysector -1 2 gamevar lastx 0 2 gamevar lasty 0 2 useractor enemystayput TORMENTDPIGSTAYPUT TORMENTPIGSTRENGTH cstat 257 geta[].sectnum staysector cactor TORMENTDPIG ai AITORMENTPSEEKENEMY enda // also edit this part of the main actor: useractor enemy TORMENTDPIG TORMENTPIGSTRENGTH ATORMENTPSTAND fall state checksquished ifn staysector -1 // stayput enemy { ife sprite[].sectnum staysector { geta[].x lastx geta[].y lasty } else { seta[].x lastx seta[].y lasty } } // rest of code as normal
#2265 Posted 14 March 2018 - 10:43 PM
Pig no longer "commits suicide"
thx
This post has been edited by Zaxtor: 14 March 2018 - 10:43 PM
#2266 Posted 23 March 2018 - 02:33 AM
#2267 Posted 25 March 2018 - 01:39 PM
I want to increase Duke's weapon sway speed, to match his very fast running speed. I would still like it to be tied to his velocity, but I would like the weapon sway speed to be about doubled. Unfortunately, manipulating the relevant structs (most notably player.weapon_sway) doesn't seem to do anything. It would seem that the game is hardcoded to update the weapon sway based on the player's velocity values, and while the structs aren't technically read only, writing to them is useless because they just get updated again by the hard coding before they can have any visual effect. In addition to the weapon_sway struct, I also tried manipulating certain constantly updated gamevars such as weaponx_offset in EVENT_DRAWWEAPON. That doesn't seem to do anything either, I presume because those vars aren't actually used in the hardcoded weapon display, they simply point to the underlying structs that do the work.
So, it looks like I have to negate all of the hardcoded weapon drawing and use something like the CON emulation of it that Hendricks266 supplied a while back. Then, with all of the weapon drawing under scripting control, I could replace the hardcoded weapon sway with my own. That's more work than I wanted to do, but I guess I could do it. Am I on the right track, or is there an easier way?
#2268 Posted 01 April 2018 - 10:56 AM
You must do cstat 256 (to be hittable)
cstat 0 cstator 256 also works
This post has been edited by Zaxtor: 01 April 2018 - 10:56 AM
#2269 Posted 02 April 2018 - 06:40 PM
Trooper Dan, on 25 March 2018 - 01:39 PM, said:
I want to increase Duke's weapon sway speed, to match his very fast running speed. I would still like it to be tied to his velocity, but I would like the weapon sway speed to be about doubled. Unfortunately, manipulating the relevant structs (most notably player.weapon_sway) doesn't seem to do anything. It would seem that the game is hardcoded to update the weapon sway based on the player's velocity values, and while the structs aren't technically read only, writing to them is useless because they just get updated again by the hard coding before they can have any visual effect. In addition to the weapon_sway struct, I also tried manipulating certain constantly updated gamevars such as weaponx_offset in EVENT_DRAWWEAPON. That doesn't seem to do anything either, I presume because those vars aren't actually used in the hardcoded weapon display, they simply point to the underlying structs that do the work.
So, it looks like I have to negate all of the hardcoded weapon drawing and use something like the CON emulation of it that Hendricks266 supplied a while back. Then, with all of the weapon drawing under scripting control, I could replace the hardcoded weapon sway with my own. That's more work than I wanted to do, but I guess I could do it. Am I on the right track, or is there an easier way?
Unfortunately you are correct if you want more nuance. However since it's just contained in a single script it's pretty easy to get set up, You can probably be up and running in 10ish minutes.
I will note though that modifying http://wiki.eduke32....iki/Weapon_sway and http://wiki.eduke32.com/wiki/Gun_pos SHOULD be set-able.
Edit: Sorry for lots of editing, concentrating on too many other things.