EDuke32 Scripting "CON coding help"
#1562 Posted 14 December 2014 - 01:28 PM
Jblade, on 29 November 2014 - 03:23 AM, said:
Actually, you can teach Mapster32 about the linking semantics of your custom actors, and the built-in functionality of drawing lines between matching sprites will be extended accordingly. From the wiki:
Quote
triggered by the link-tagging system to query whether the tag of a particular sprite (which is the current sprite in this event) has a linking meaning. It is supposed to return in RETURN a bit-field of ORed values:
1: lotag has linking semantics
2: hitag
4: extra
8: xvel
16: yvel
32: zvel
64: owner
Otherwise, drawline16b or drawline16z are your friends.
#1563 Posted 14 December 2014 - 01:51 PM
#1564 Posted 14 December 2014 - 10:32 PM
like the explosion radius of a pipebomb.
#1565 Posted 14 December 2014 - 10:41 PM
#1566 Posted 15 December 2014 - 01:46 AM
Zaxtor, on 14 December 2014 - 10:32 PM, said:
like the explosion radius of a pipebomb.
The control for detonation is some funky shit, but the part you ask about is this:
int32_t j; x = s->extra; m = 0; switch (DYNAMICTILEMAP(s->picnum)) { case HEAVYHBOMB__STATIC: m = g_pipebombBlastRadius; break; case MORTER__STATIC: m = g_morterBlastRadius; break; case BOUNCEMINE__STATIC: m = g_bouncemineBlastRadius; break; } A_RadiusDamage(i, m,x>>2,x>>1,x-(x>>2),x); j = A_Spawn(i,EXPLOSION2); A_PlaySound(PIPEBOMB_EXPLODE,j); if (s->zvel == 0) A_Spawn(i,EXPLOSION2BOT); for (x=0; x<8; x++) RANDOMSCRAP;
Where g_pipebombBlastRadius is the tenth parameter of gamestartup (defined in the stock USER.CON as PIPEBOMBRADIUS), and x = getactor[<pipebomb actor>].extra = the strength of the HEAVYHBOMB actor (defined by default as HANDBOMB_WEAPON_STRENGTH).
So:
setvar temp1 HANDBOMB_WEAPON_STRENGTH shiftvarr temp1 2 setvar temp2 HANDBOMB_WEAPON_STRENGTH shiftvarr temp1 1 setvar temp3 HANDBOMB_WEAPON_STRENGTH subvarvar temp3 temp1 hitradiusvar PIPEBOMBRADIUS temp1 temp2 temp3 HANDBOMB_WEAPON_STRENGTH
#1567 Posted 15 December 2014 - 06:51 AM
Hendricks266, on 15 December 2014 - 01:46 AM, said:
int32_t j; x = s->extra; m = 0; switch (DYNAMICTILEMAP(s->picnum)) { case HEAVYHBOMB__STATIC: m = g_pipebombBlastRadius; break; case MORTER__STATIC: m = g_morterBlastRadius; break; case BOUNCEMINE__STATIC: m = g_bouncemineBlastRadius; break; } A_RadiusDamage(i, m,x>>2,x>>1,x-(x>>2),x); j = A_Spawn(i,EXPLOSION2); A_PlaySound(PIPEBOMB_EXPLODE,j); if (s->zvel == 0) A_Spawn(i,EXPLOSION2BOT); for (x=0; x<8; x++) RANDOMSCRAP;
Where g_pipebombBlastRadius is the tenth parameter of gamestartup (defined in the stock USER.CON as PIPEBOMBRADIUS), and x = getactor[<pipebomb actor>].extra = the strength of the HEAVYHBOMB actor (defined by default as HANDBOMB_WEAPON_STRENGTH).
So:
setvar temp1 HANDBOMB_WEAPON_STRENGTH shiftvarr temp1 2 setvar temp2 HANDBOMB_WEAPON_STRENGTH shiftvarr temp1 1 setvar temp3 HANDBOMB_WEAPON_STRENGTH subvarvar temp3 temp1 hitradiusvar PIPEBOMBRADIUS temp1 temp2 temp3 HANDBOMB_WEAPON_STRENGTH
I don't think I need that.
What I mean is.
I made a Pseudopipebomb or pipebomb clone that we take.
The normal heavyhbomb is incharge for the rest.
The reason I made that "clone" like you know when you shoot or anything hit a heavyhbomb on the floor it blows up.
If you set the var of the enhancer it will make "all the heavyhbomb" make the super explosion.
So to not make that I cloned the pipebomb (item we take).
The Pseudopipebomb doesn't make the "Super explosion" when you shoot it, it get shot or destroyed if never taken.
The Pseudopipe bomb is to prevent untaken pipebomb from making "Super explosion" of the enhanced pipebomb,
The enhanced pipebomb thing works, All I need is just the hitradius of the pipebomb in numbers or etc to the Pseudopipebomb (A_PIPEBOMB).
Its code
actor A_PIPEBOMB sizeat 9 9 cstator 256 fall ifmove RESPAWN_ACTOR_FLAG state respawnit else ifp pshrunk nullop else ifp palive ifcount 6 ifpdistl RETRIEVEDISTANCE ifcanseetarget { addweapon HANDBOMB_WEAPON HANDBOMBAMOUNT quote 55 ifspawnedby A_PIPEBOMB state getcode else state quikget } ifhitweapon { hitradius xxxx xx xx xx sound PIPEBOMB_EXPLODE spawn EXPLOSION2 debris SCRAP1 3 debris SCRAP6 4 killit } enda
All I need is the radius.
This post has been edited by Zaxtor: 15 December 2014 - 06:52 AM
#1568 Posted 15 December 2014 - 08:04 AM
hitradius PIPEBOMBRADIUS 625 1250 1875 2500
#1569 Posted 15 December 2014 - 02:43 PM
Fox, on 15 December 2014 - 08:04 AM, said:
hitradius PIPEBOMBRADIUS 625 1250 1875 2500
Hundreds and thousands in the strength???
That would be a deadly pipebomb.
I need a radius that does the same damage as the normal heavyhbomb.
#1570 Posted 15 December 2014 - 03:21 PM
Fox, on 15 December 2014 - 08:04 AM, said:
hitradius PIPEBOMBRADIUS 625 1250 1875 2500
I think you did the math wrong...
define HANDBOMB_WEAPON_STRENGTH 140
Also not that we're shifting right and not left.
#1571 Posted 15 December 2014 - 04:36 PM
Like a replica of the hit radius of the explosion when you destroy the pipebomb from shooting it.
When you take it and rethrow it it becomes the normal pipebomb as suppose to. Why applied the enhancement if you took the enhancement (set var etc)
I made the replica so when you take the enhancement it doesn't make the untaken (never touch before) pipebomb make a super explosion if the bomb get accidentally shot or blown up by you or an enemy from shooting the pipebomb.
Everything works
All I need is the replica of the hitradius of the pipebomb.
Because I want it to explode the same when you shoot it, etc.
If the message doesn't work
I mind make a video of what I mean.
This post has been edited by Zaxtor: 15 December 2014 - 04:37 PM
#1572 Posted 15 December 2014 - 05:27 PM
Zaxtor, on 15 December 2014 - 02:43 PM, said:
That would be a deadly pipebomb.
I need a radius that does the same damage as the normal heavyhbomb.
LOL
hitradius PIPEBOMBRADIUS 35 70 105 140
#1573 Posted 15 December 2014 - 05:39 PM
#1574 Posted 29 December 2014 - 06:10 PM
I need it for disabling polymer lights on snowflake sprites only for my new snow code; it runs fine on polymost, but lights cast on falling snow drop the fps to ~5.
I could remove polymer features at all, but is not reasonable for 1-2 line of code, if this is possible.
Can anyone help me ?
#1576 Posted 30 December 2014 - 02:04 AM
This post has been edited by RichardStorm: 30 December 2014 - 02:05 AM
#1577 Posted 30 December 2014 - 05:17 AM
#1578 Posted 03 January 2015 - 02:47 PM
to have a countdown in a map which ends the map, if it's not finished in the given time, has been seen several times. But is it possible to have a countdown for a complete episode (maybe even hub-maps connected) either.
The idea behind this:
a mod, where the player's time is running up to complete a task (or the episode). Best, if the player could go back and forth through the maps by a hub system. After two hours for example the whole game ends if the player hasn't completed the task.
So is something like this possible at all or is this sticker to single maps?
Any suggestions here?
Thank you in advance.
#1579 Posted 03 January 2015 - 03:49 PM
This post has been edited by Mark.: 03 January 2015 - 03:50 PM
#1580 Posted 26 January 2015 - 01:03 AM
#1582 Posted 30 January 2015 - 02:21 AM
Jblade, on 26 January 2015 - 01:03 AM, said:
Bumping because this is a fairly important thing I need to get working.
#1583 Posted 30 January 2015 - 02:27 AM
#1584 Posted 30 January 2015 - 03:13 AM
#1585 Posted 07 February 2015 - 09:23 AM
Jblade, on 26 January 2015 - 01:03 AM, said:
That was implemented in r3666. Can you provide a failing test case?
I checked trueror1.map with
- a liztroop,
- a LIZMANJUMP that jumps higher than normal (by editing the source), and
- the COMMANDER.
All three work fine here.
#1586 Posted 07 February 2015 - 11:13 AM
So if you could, test it with the Drone and Newbeast to see if they work properly in your test map.
#1587 Posted 07 February 2015 - 01:35 PM
Helixhorned, on 07 February 2015 - 09:23 AM, said:
I checked trueror1.map with
- a liztroop,
- a LIZMANJUMP that jumps higher than normal (by editing the source), and
- the COMMANDER.
All three work fine here.
I just uploaded a map called htest.map to the AMC repository - I spawned a liztroop in and it indeed moved no problem but my enemy just raises up and then struggles to move out of the sector. It's possible it may be related to it being a useractor enemy and the liztroop is just a standard actor? I'm using the same kind of checks the liztroop does to move upwards as well.
This post has been edited by Jblade: 07 February 2015 - 01:35 PM
#1588 Posted 20 February 2015 - 03:00 PM
Jblade, on 07 February 2015 - 01:35 PM, said:
The reason the enemy didn't take into account TROR boundaries is that it never issues fall. Unfortunately, this is pretty much the only place that updates actor[].ceilingz and actor[].floorz in a proper fashion for a given sprite. These members are intended as cached versions of the upper and lower bounds for vertical movement. If you search for these members in the EDuke32 source code, you'll find a lot of places where they are set to the sector's ceiling or floor z -- without regard to slope, and now, TROR. My earlier fix (r3666) modified the updating of these members for the COMMANDER and DRONE to consider movement through TROR bunches as well.[1] However, carrying out the same kind of tweak for all other enemies (when moving vertically) in r4975 entailed unwanted behavior: enemies would start moving through blocking sprite constructions (reported by Micky C on IRC, reached me via TX in a PM).
[1]And for upward-moving enemies, but without storing actor[].ceilingz. Actually, that's kind of weird now I think about it. This idea behind that was probably to allow Enforcers jump across bunches. But it seems that the actor's sector number may fail to be updated, then. Needs to be reviewed.
The reason is the above-mentioned proper actor[] .ceilingz and .floorz update, namely using the engine function getzrange. For actors, this is pretty much only called via fall.
The solution I have settled at is to have CON coders issue getzrange themselves whenevery they see fit. In r5016, I added a CON file thisactor_getzrange.con that reimplements EDuke32's hardcoded way of doing that: the initial z position is the actor's one minus 256, and the actor's cstat is temporarily cleared to 0 (to prevent hitting itself). This is only one part of the source's A_GetZLimits(); the other part disables fake floor shadows on hitting a certain class of face sprite below and effects the "sliding" above enemies (regardless of how far away the sprite is above it, actually!). That part was not reproduced.
So, thisactor_getzrange.con is intended to be copied into your mod, includeing it once somewhere and calling "state thisactor_getzrange" where you would issue fall for a falling actor. Note that getzrange() needs to check all sprites in the collected set of sectors for collision -- watch out for quadratic run time. You may also want to call it less frequently than every game tic as a microoptimization, for example every fourth one and only when the actor moves vertically.