Duke4.net Forums: EDuke32 Scripting - Duke4.net Forums

Jump to content

  • 124 Pages +
  • « First
  • 44
  • 45
  • 46
  • 47
  • 48
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic

EDuke32 Scripting  "CON coding help"

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1345

Shouldn't you make the floor align relative?
0

User is offline   m210® 

#1346

Quote

Shouldn't you make the floor align relative?


it makes no difference in my code

This post has been edited by M210: 06 July 2013 - 02:28 AM

0

User is offline   m210® 

#1347

So, I just want to rotate a player around point with preservation of movement. Have anybody similar code?
rotatepoint doesn't works correctly with calculating distance from player to point at each tic
0

User is offline   darkcaleb 

#1348

Hey, I was wondering if this was possible. Is it possible for changing the loading screen with a animated screens of 5 frames. Does it need to be code or?
0

User is offline   Jblade 

#1349

View Postdarkcaleb, on 06 July 2013 - 02:35 PM, said:

Hey, I was wondering if this was possible. Is it possible for changing the loading screen with a animated screens of 5 frames. Does it need to be code or?

I'm sure animated tiles do work during loading, try it by checking out this tutorial on the Eduke32 wiki.
0

User is offline   darkcaleb 

#1350

hey James, i tried the code.What i did is I created a new con-code named dkgame.con and I put this text in it

oneventonevent EVENT_GETLOADTILE
setvar RETURN <3281>
endevent

Put a include dkgame.con in game.con and i get a error. If you create new con-code´s do you need to put any text in the file or? And how does the animation precisely work

This is the error I get:

Including: dkgame.CON (62 bytes)
dkgame.CON: In event `EVENT_GETLOADTILE':
dkgame.CON:2: error: parameter `' is undefined.
dkgame.CON:2: error: expected a keyword but found `'.
GAME.CON:34: error: parameter `ANULLACTION' is undefined.
GAME.CON:34: error: expected a keyword but found `0'.
Found 0 warning(s), 4 error(s).

I haven't done any con-coding in the past and I do want to know how the things work. Hopefully I can start with simple con-coding :)
0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1351

oneventonevent?
0

User is offline   darkcaleb 

#1352

View PostFox, on 07 July 2013 - 05:13 AM, said:

oneventonevent?


Sorry this is what is in the dkgame.con file:

onevent EVENT_GETLOADTILE
setvar RETURN <3281>
endevent
0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1353

Remove the <>, also it would be better to use LOADSCREEN instead of 3281.

This post has been edited by Fox: 07 July 2013 - 06:23 AM

0

User is offline   darkcaleb 

#1354

Thanks Fox. It did work. But i want to give it animations, I want to use a picture that has 4 frames. I want this to be the loading screen for something I'm working on. I have already put animation in tile file with duke-res.
0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1355

I think this would work:

onevent EVENT_GETLOADTILE
  setvarvar RETURN totalclock
  divvar RETURN 16 // animation speed
  andvar RETURN 3
  addvar RETURN LOADSCREEN
endevent 

0

User is offline   darkcaleb 

#1356

Hey Fox thanks! I did work very well. Still I was wondering about the what this all means

onevent EVENT_GETLOADTILE (don't know this purpose)
setvarvar RETURN totalclock (don't know this purpose)
divvar RETURN 16 // animation speed (this is the speed)
andvar RETURN 3 (don't know this purpose)
addvar RETURN LOADSCREEN (this is the tile 3281 as I'm right?)
endevent (This is the end of the event)

Thanks again.
0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1357

onevent <event>
endevent

This is used to call an event, which allows you to use some code at a specific occasion. For example, the EVENT_GETLOADTILE occur during the loading screen.

totalclock

It is a variable which value is constantly increased. It serves for the purpose of providing a timing for the animations.

andvar 3

Cycles the current value (totalclock divided by speed) through 0-3 (four frames).

LOADSCREEN

Same as 3281, as defined in DEFS.CON.

This post has been edited by Fox: 07 July 2013 - 02:18 PM

0

User is offline   darkcaleb 

#1358

Thanks Fox! At least now i understand the coding a little bit. :)
0

User is offline   m210® 

#1359

Quote

I need help with own rotate sectors.
I can't make move of player in such sectors

Well, I did it
        getplayer[THISACTOR].i PLAYERID
	setvarvar spriteid PLAYERID
	getactor[THISACTOR].sectnum rot_sect
	getactor[spriteid].sectnum se_sector
	ifvarvare rot_sect se_sector
	{
		getactor[THISACTOR].x x
		getactor[THISACTOR].y y
		getactor[spriteid].x x2
		getactor[spriteid].y y2
		subvarvar x2 x
		setvarvar dx x2
		setvarvar rot_actspeed rot_angspeed
		ifvare rot_turnway 1 mulvarvar rot_actspeed -1
		cos mycos rot_actspeed
		mulvarvar dx mycos
		divvarvar dx TRIG_MAX
		subvarvar y2 y
		setvarvar dy y2
		sin mysin rot_actspeed
		mulvarvar dy mysin
		divvarvar dy TRIG_MAX
		addvarvar x dx
		subvarvar x dy
		//setactor[spriteid].x x
		setplayer[THISACTOR].posx x
		setvarvar dy y2
		mulvarvar dy mycos
		divvarvar dy TRIG_MAX
		setvarvar dx x2
		mulvarvar dx mysin
		divvarvar dx TRIG_MAX
		addvarvar y dy
		addvarvar y dx
		//setactor[spriteid].y y
		setplayer[THISACTOR].posy y
		
		//getactor[spriteid].ang se_ang
		getplayer[THISACTOR].ang se_ang
		addvarvar se_ang rot_actspeed
		setplayer[THISACTOR].ang se_ang
		//setactor[spriteid].ang se_ang
	}

0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1360

Could someone explain to me how exactly guniqhudid works? I tought it was to store the model animation, but the weapons.con values seems to confuse me:

chaingun: none
rpg: none
mighty boot: 0
freezer firing top half: 0
pistol: 1
shotgun: 2
shotgun firing: 4
pipebomb: 5
shrinker: 6
right devastator: 7
left tripbomb hand: 8
freezer: 9
pipebomb detonator: 10
expander: 11
shrinker crystal: 12
left devastator: 14
right tripbomb hand: 16
expander crystal: 22
tripbomb: 32
quick kick: 100
right shrunk fist: 101
left shrunk fist: 102
0

User is offline   Mblackwell 

  • Evil Overlord

#1361

http://wiki.eduke32....wiki/Guniqhudid

Quote

The purpose of the guniqhudid command is that models drawn to the screen via rotatesprite do not have a sprite id like all other sprites in the game world. The engine needs some sort of ID so that it knows where and what to draw.

This command will allow you to select a different slot so that any HUD models you are drawing can store their animation state independently, without conflict. By default it uses the first slot, 0. If you need several animating HUD models, you should switch to another slot, draw the model with rotatesprite, then switch back using guniqhudid 0.

guniqhudid is short for "g (game? gun?) unique HUD ID".


In weapons.con (written by Hendricks) it just looks like he assigned all of the hud models a unique id (which is not necessarily necessary unless the models are going to display simultaneously or you need the animation state preserved but it's fine). No big deal.
0

User is online   Hendricks266 

  • Weaponized Autism

  #1362

I think the wiki page sums it up: for the renderers to draw a model on the screen, internally they get assigned a unique sprite ID in some extra space allocated after the array of sprites.

I copied the guniqhudid values in weapons.con.sample verbatim from what is used in player.c.
0

User is offline   Mblackwell 

  • Evil Overlord

#1363

From the horse's mouth.
0

User is offline   Mark 

#1364

While testing some replacements for original enemies I noticed that when they drop into a non submersible water sector they pop back up to the surface height for their shooting animation and at other times randomly. I fired up a non modified version of the game and verified the original enemies acted the same way. I'm sure something this obvious has been mentioned before. Is it possible to fix this in cons? If you have an answer or a link to previous discussions on the topic let me know.Thanks.
0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1365

No. It is a glitch that has something to do with Eduke32 submerging code.

View PostHendricks266, on 10 July 2013 - 06:49 PM, said:

I think the wiki page sums it up: for the renderers to draw a model on the screen, internally they get assigned a unique sprite ID in some extra space allocated after the array of sprites.

I copied the guniqhudid values in weapons.con.sample verbatim from what is used in player.c.

The values appear to be almost random. Every piece should be separated in a different layer defined by MAXWEAPONS times the layer.
0

User is offline   Mark 

#1366

Spoiler
Its taken me pretty much the whole day, on and off, but I've got a basic enemy coded from scratch. I'm waiting for this day to be declared a national holiday. :)

Its real basic stuff right now and will be expanded upon as I learn more coding. But I need help with a problem that I've spent the last 2 hours on and can't figure out the fix. When the dog charges the player and gets within a certain distance it goes into the DOGBITE mode. The problem is that it only performs the actions ( action, sound, player health) once instead of multiple times. When the player backs away and the dog approaches again its the same thing. Just one bite and then nothing. I'm guessing I need to nest some lines in a better place but I tried and tried and couldn't figure it out.

This post has been edited by Mblackwell: 13 July 2013 - 07:57 PM
Reason for edit: Added code tags to preserve formatting.

0

User is offline   Mblackwell 

  • Evil Overlord

#1367

You might want to change the last digit in your actions to 1. I seem to recall having odd errors if I didn't but that was back in ye olde 1.3d days so what the hell, things just become habits. Also IIRC if you're using ai commands you need to make sure that ifai AIDOGBITE is not true before you run it or it will cancel itself.

Generally I recommend avoiding AI commands and just using simple actions/actioncount/move commands. Then again I also tend to define everything as notenemy and then manually adding in spriteshadow and kill counts but I'm an oddball I guess.
0

User is offline   Mark 

#1368

That is the double edged sword of con coding. It has the flexability of coding the same thing different ways. But that makes it more difficult to learn when I can't find a consistant way to code something after looking at other people's projects for help.

BTW, I still have had zero success in coding any climbing abilities for new enemies. :)

This post has been edited by Mark.: 14 July 2013 - 04:44 AM

0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1369

I don't think you should worry about the last digit of the action unless you use ifactioncount. In fact you would be fine by having just the first digit.

You seems to be confused with the use of {} and break.

This post has been edited by Fox: 14 July 2013 - 10:07 AM

0

User is offline   Mark 

#1370

Yes I am. What you see in the previous posted code is where I left off after about 45 tries to get something right. Bringing the break command in was one of the last things I tried before posting for help. I feel like I have most of what I need there, but not grouped properly and maybe missing just one or two small but important commands. I tried to learn from the code of other people but every project I look into, the coder does things in a different way. Some prefer actions to ai, some prefer using states, others borrow previously defined gamevars and TEMP values from elsewhere in their code. Its tough to follow. But I can't believe I've gotten this far after my first feeble attempts and then gave up. I'm glad I made this second serious attempt. But its still VERY frustrating and slow with all this trial and error. And I've got a long way to go to get all these new enemies up to my expectations.

This post has been edited by Mark.: 14 July 2013 - 11:47 AM

1

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1371

There must be a logic behind every code. By trial and error you will never get far, and probably will result in a defective code. I will try to explain the basic for you.

First of all you must understand that a code is constantly running. By default Duke 3D works at 30 time units (tics) per second, meaning that if you simply add a code inside of an actor (sprite), the code will run 30 times each second.
useractor notenemy MYENEMY
  addphealth 1
enda

The code above would basically increase the player health 1 point to a maximum of 100 points, and do so every tic, 30 times per second. There is no condition to it, so the moment you start the level, you would feel the effects.

An if condition basically makes the code works only under a specific circumstance. Example:
useractor notenemy MYENEMY
  ifpdistl 1024
    addphealth 1
enda

Here I am telling the game to only heal the player if his distance to the current actor is less than 1024 Build units (same as the map editor). However the command would still run 30 times every second non-stop once you meet the condition, but I will return to this subject later.

An else is used for the opposite effect. Example:
useractor notenemy MYENEMY
  ifpdistl 1024
    addphealth 1
  else
    addphealth 10
enda

This would heal the player by 10 points if the player is at a distance of 1024 units to the actor, otherwise it will be just 1 point.

A nullop is a void command, and is used as a hack to tell the game to do nothing. Example:
useractor notenemy MYENEMY
  ifpdistl 1024
    nullop
  else
    addphealth 1
enda

This basically tells the game to do nothing if the player is at less than 1024 units away, otherwise heal the player. In other words, it is the same as telling the game that the code should work only the player is 1024 or more units away. Of course this is just an example, there is a ifpdistg command so you wouldn't need to do that in this case.

The {} are used to enclose a piece of the code that works under the if condition. This is because by default an if condition only take affect on the first command used after it (normally on the first line below it). In other words, the {} you want to make the same condition apply to multiple commands. For example:
useractor notenemy MYENEMY
  ifpdistl 1024
  {
    addphealth 1
    addammo PISTOL_WEAPON 1
  }
enda

The code above heal the player by 1 point and increase the Pistol ammo by 1 shot if the player is at a distance of 1024 units. Below is a code that does the same thing, the difference is that the code above is more pleasing — and efficient.
useractor notenemy MYENEMY
  ifpdistl 1024
    addphealth 1
  ifpdistl 1024
    addammo PISTOL_WEAPON 1
enda


Now you must understand how to use the {} with multiple if conditions.
useractor notenemy MYENEMY
  ifpdistl 1024
    ifp pfacing
    {
      addphealth 1
      addammo PISTOL_WEAPON 1
    }
enda

The code above is very simply, the two commands will only work if the player is at a distance of 1024 units and is facing the current actor. However you can change it:
useractor notenemy MYENEMY
  ifpdistl 1024
  {
    addphealth 1
    ifp pfacing
      addammo PISTOL_WEAPON 1
  }
enda

Now the player health will be increased by 1 health if he is at a distance of 1024 and facing the actor, however the ammo will only be increased if you are at a distance of 1024 regardless regardless of the direction the player is facing.
useractor notenemy MYENEMY
  ifpdistl 1024
  {
    ifp pfacing
      addphealth 10
    else
      addammo PISTOL_WEAPON 1
  }
  else
    addphealth 1
enda

Above is a more complex example of how to handle the {} and if conditions. Inside the condition of the player at a distance of 1024 units, if the player is facing the current actor increase the health by 10, otherwise increase the ammo by 1; if the condition of the player being at a distance of 1024 is false, then increase the health by 1.

And here is an example of a series of if conditions, which is used a lot in GAME.CON:
useractor notenemy MYENEMY
  ifpdistl 1024
    addphealth 100
  else
    ifpdistl 2048
      addphealth 50
  else
    ifp pfacing
      addphealth 10
  else
    addphealth 1
enda

The code above tells the game to increase the health by 100 if the player is at a distance of 1024 units, otherwise increase the health by 50 if the player at a distance of 2048 units, otherwise (i.e. the two previous conditions must be false) increase the health by 10 if the player is facing the actor direction, and if none of these conditions are true, increase the health by 1.

Now let's talk about the code running non-stop as I mentioned back then. That what you use actions for.
useractor notenemy MYENEMY
  ifpdistl 1024
    ifaction 0
    {
      addphealth 1
      action AMYENEMY_STOP
    }
enda

By default an actor starts with an action that equals zero, that's why I check if it is zero. Once the distance of 1024 units is meet, increase the player health by 1 point, and make the current actor action AMYENEMY_STOP. As a result, this code will only run a single time in the life.

Now here is a code that would make the code stop once the condition is meet, however it will be reset if the player is 1024 away again. Meaning that the player must walk forth and back to make the code works multiple times.
useractor notenemy MYENEMY
  ifpdistl 1024
  {
    ifaction 0
    {
      addphealth 1
      action AMYENEMY_STOP
    }
  }
  else
    ifaction AMYENEMY_STOP
      action 0
enda


I hope this helped you to understand the logic behind the CON code.
2

User is offline   Mark 

#1372

Thanks. After reading your post this morning I went back and cleaned up and aligned my code lines so that it was a lot easier to see the flow. All the brackets pairs and their contents are now easier to follow. Actually, there have been few errors in the log file as I messed around. Just stuff not executing in the proper order or at all. I really should have waited until my cleanup before posting yesterday.

3 things really stand out from your latest post.

1. I assumed all if / else code had to be in brackets but I see in the first examples that is not so.
2. That multiple else's can be strung together.
3. The nullop command for when you don't have an alternative to fill in.

Concerning the last code snippet, what is AMYENEMY_STOP defined as?

BTW, I really screwed myself earlier today. I got tired of scrolling the menu down to the newboard map every time I tested something. So I thought " hey I'll save the game right after it starts so I can use load game at the menu. Turns out that was a big mistake. The dog wouldn't start to run because "action" did not start at 0 in a saved game. So I butchered my code trying to figure out that one. Live and learn. Does this mean that I need to do something so that it will load properly on a saved game?

This post has been edited by Mark.: 14 July 2013 - 03:38 PM

0

User is offline   Fox 

  • Fraka kaka kaka kaka-kow!

#1373

The AMYENEMY_STOP is not a definition, but an action. This would be enough:
action AMYENEMY_STOP 0


I would recommend you not to never use saved games if you are editing the CONs.
0

User is offline   Mblackwell 

  • Evil Overlord

#1374

Save games save the current CON state. So any modifications you make will not be reflected in your save game.
1

Share this topic:


  • 124 Pages +
  • « First
  • 44
  • 45
  • 46
  • 47
  • 48
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic


All copyrights and trademarks not owned by Voidpoint, LLC are the sole property of their respective owners. Play Ion Fury! ;) © Voidpoint, LLC

Enter your sign in name and password


Sign in options