Jump to content
Eternal Lands Official Forums
Entropy

Special effects

Recommended Posts

They shouldn't get any effect, for two reasons:

1. Right after a teleport, there is a small gap when you don't see anything, while the server sends you the data (your location, other actors, the new map if any, etc.)

2. IRL, if you'd teleport, you woudn't see anything :)

Share this post


Link to post
Share on other sites

Well, IRL, you wouldn't be looking at yourself from third person perspective, either. :) But that's fine -- I'll just need to check to see if the actor is the current actor.

 

Still, even if it only applies to others, I'm still not sure how to do this. For example, teleport to range: a teleporter-style pillar of light appears, orbs of light form within it (representing the actor being teleported; ideally the actor would fade as they form), then dart to the destination, where they form a new teleporter-style pillar of light (ideally, the actor would fade in at this point). This is all fast -- perhaps one second for the whole effect -- but it does take a real amount of time (as any effect would).

 

To display this, I'd be having to override the info about that actor that the server is sending to keep the actor drawing in the starting point for a part of a second, then shift them (also against what the server is saying) until their positions match up again. Meanwhile, the display wouldn't match up with that user's input, whether they're fighting or whatnot.

 

I really don't think that having the person experiencing an action get a different effect than an onlooker will work right. It's a very pretty effect, and I don't think a second delay on teleporting would interfere with gameplay, but if you don't think we can do this, I guess we can't, then.

Share this post


Link to post
Share on other sites

Well, there are many other things to do first, let's put this aside for a while, until the other effects are implemented and tested.

Share this post


Link to post
Share on other sites

There is another effect I would like to have in time for the next update:

 

//when a "who doesn't see me" spell is cast

#define SPECIAL_EFFECT_MAKE_PLAYER_GLOW 24

 

The effect should be something like a player (or monster) to 'glow' for a second or so, to denote the fact that you see him but he doesn't see you.

Share this post


Link to post
Share on other sites

Okay. I'm ready to make my first commit. Once it's in, I'll make a post listing what's done, and what still needs to be done. I'll break down what needs to be done into what I can go ahead and work on, and what I need input from other people or serverside features for.

 

HOWEVER:

 

The new version won't work unless you copy the texture files into your data directory. Thus, I want to be very delicate about this; I don't want to mess up other people. How would you suggest that I proceed?

Share this post


Link to post
Share on other sites

Make a list with what files need to be where, then I will put them in the right place and compile a client with the new stuff, test it, and if everything is OK, make a zip file for others to test.

Share this post


Link to post
Share on other sites

Ok. The commit message follows. Consider this a TODO list :dry:

 

***

 

MAJOR UPDATE: "Eye Candy" Special Effects System added (Alpha! Needs

testers!)

 

----------------------------- NOTICE --------------------------------

After this update, Eternal Lands will NOT WORK until you copy:

 

eye_candy/textures

 

to:

 

YOUR_EL_DATA_DIR/textures/eye_candy

 

... where YOUR_EL_DATA_DIR is, well, your data directory for EL :omg:

 

To make clear, you don't want the directory inside a new directory

called $YourELDataDir/textures/eye_candy; you want the copy to become

that directory. In Unix, that would be a command like:

 

cp -R eye_candy/textures YOUR_EL_DATA_DIR/textures/eye_candy

 

Once this becomes part of the official client's data release, we should

remove these textures from CVS.

------------------------------------

 

SUMMARY:

 

This commit adds the first generation "Eye Candy" system to Eternal Lands. This system provides several dozen textured particle effects and a control mechanism that regulates all aspects of their operation. The system is written in C++, and allows for a great deal of flexibility due to the

ability to inherit and extend classes. For more information about how this

system works, check out docs/eye_candy/

 

While all of the effects themselves have been tested individually, not all

are currently hooked in, with their hooks tested. Below is a summary of

effects and their status in the game.

 

Bag pickup and drop: In. Tested.

 

Breath effects (fire, ice, poison, magic, lightning, wind): Not in. Need

feedback on how to connect this effect (a new signal from the server?). All

effects but fire are for speculative creatures; fire is for fire-breathing

dragons.

 

Harvesting effects:

- Radon: In. Untested.

- Cavern wall: In. Untested.

- Mother nature: In. Tested, but failed due to the wrong signal from the

server. Entropy reports server message fixed; hasn't been tested since.

- Queen of nature: In. Untested.

- Bees: In. Untested.

- Bag of gold: In. Untested.

- Rare stone: In. Untested.

- Teleport nexus: In. Tested. Needed: See "teleport to range" for more

details.

 

Shield effects and impacts to shields (magic protection, shield, magic

immunity): Not in. Needed: Signals from the server to indicate when the

shield for an actor is decreasing.

 

Poison: Not in. Needed: Info on how to know when it starts and stops. If

there's already a signal, I might be able to find it on my own.

 

Blood (optional in combat): Not in. Needed: I should probably be able to

take care of this on my own, having it spawn from a random bone every time

the server sends a signal (I assume there is one) for when the player gets

hurt.

 

Magic (all untested; my test character can't cast spells):

- Heal: In. Untested.

- Magic protection: In. Untested.

- Shield: In. Untested.

- Restoration: In. Untested.

- Bones to gold: In. Untested.

- Invisibility: Not in. Needed: either help on player

translucency, or time to figure it out for myself. My previous attempts on

actor translucency in EL were ill-fated.

- Teleport to portals room: In. Untested. Needed: See "teleport to range"

for more details.

- Magic immunity: In. Untested.

- Remote heal: In**. Untested.

- Poison: In**. Untested.

- Harm: In**. Untested.

- Life drain: In**. Untested.

- Drain mana: In**. Untested.

- Smite summoned: Not in**. See heal summoned.

- Heal summoned: Not in**. Needed: A single signal that specifies

all of the targets, not a signal for the spell on each target.

- Teleport to range: Not in**, for two reasons. A) First, and only

applicable to teleport to range, I don't understand how it's being called.

It is passed two arguments, which for most spells are actors. However, in

this case, having two actors doesn't make sense. Your character is one

actor, but the second argument, it seems, should be a set of 3-space

coordinates. More information needed on how this is done. :( More

frustrating is this one -- and it effects all teleportation.

Teleportation, especially teleport to range, is one of my favorite families

of effects. It's quite pretty. Entropy mentioned that he thought that

others should see the teleportation effect, not the person teleporting,

because he doesn't want there to be a delay in a person's action because

they're teleporting. What the effect needs is the person to stop for a

half second, then they fly to destination for half a second then they stop

for half a second whiile they reappear. Currently, teleportation is

instant. These two paradigms don't mesh. Yet, as I pointed out, having

others see the effect would be problematic as well. They'd see the

person in their old location, then whizzing past en route (as glowing orbs)

to the new destination, and then re-coalesce in the new destination. In

reality, however, they'd already be at their new destination. In fact,

they could be moving *past* their new destination. Also, if the server is

sending the real, "instant teleport" coordinates, I'd be having to make the

client ignore server side messages. It would be convoluted, and really

just wouldn't work. So, in short, we have to choose whether we want no

effect (missing out on a nice one), or are willing to impose a small

teleportation delay.

 

**: If the server sent us a list of potential obstructions, we could have

the spell evade objects. The code is already there. I suppose that I could

search through the client for what it knows is in the map, and try to

determine this clientside.

 

Alert (make a character briefly glow; requested by Entropy): Not in.

Needed: Nothing. I can hook this up when I get a chance.

 

Summon (my test char can't summon, so I can't test these):

- Rabbit: Not in.**

- Rat: Not in.**

- Beaver: Not in.**

- Deer: Not in.**

- Green snake: Not in.**

- Red snake: Not in.**

- Brown snake: Not in.**

- Fox: Not in.**

- Boar: Not in.**

- Wolf: Not in.**

- Puma: Not in.**

- Bear: Not in.**

- Skeleton: Not in.**

- Small gargoyle: Not in.**

- Medium gargoyle: Not in.**

- Large gargoyle: Not in.**

- Fluffy: Not in.**

- Chimeran wolf: Not in.**

- Yeti: Not in.**

- Arctic chimeran: Not in.**

- Giant: Not in.**

 

**: Needed: Signals sent from the server. Could be a signal for each one,

or a single signal with an argument specifying which one is being summoned.

 

Campfire: Not in.**

Fountain: Not in.**

Smoke: Not in.**

Teleporter: Not in.**

 

**: Needed: I suppose I could probably implement these by trapping current

requests for old-style particle effects -- however those work. I would

translate an old effect request into a new effect request. This way, the

map editor wouldn't have to be modified for these effects, nor would new

signals be needed. Of course, new signals would certainly be *easier* and

produce more elegant code.

 

Lamp: Not in.**

 

**: I could probably implement this based on where

light sources are. However, I've found that it doesn't mesh well with our

current lamp objects. They're too "solid", so the light juts awkwardly

through its surfaces. As a consequence, we'll probably want to do this like

above.

 

Clouds / uneven fog: Not in.**

Fireflies: Not in.**

Blowing leaves/petals: Not in**, although I do have a leaf demo at the beam

point.

 

Glowing swords (serpent, cutlass, emerald, sunbreaker, orcslayer, eagle,

jagged, fire, ice, magic): Not in.** Needed: You know, I'm not sure. I'll

have to look into this. I need to know when one of these swords is on the

map, and I'll create the effect then. I *should* be able to have the

wrapper take the pointers to the sword's start and end coordinates somehow,

and give those to the effect each eye candy idle cycle. Knowing the start

and end of the sword, the effect can already do the glow effect. I think

the only tricky element will be knowing when such a sword shows up on a map

and when it disappears. Any ideas?

 

-----------------

 

This concludes the summary of effects. Quite the TODO list still, but we're

getting there. :cry:

 

- Karen (meme@daughtersoftiresias.org)

 

CVS: ----------------------------------------------------------------------

CVS: Enter Log. Lines beginning with `CVS:' are removed automatically

CVS:

CVS: Committing in .

CVS:

CVS: Modified Files:

CVS: 2d_objects.c 3d_objects.c Makefile.bsd Makefile.bsdg

CVS: Makefile.linux Makefile.osx Makefile.osx86 actor_scripts.c

CVS: actors.c actors.h bags.c bbox_tree.c cal.c client_serv.h

CVS: draw_scene.c draw_scene.h elconfig.c gamewin.c init.c lights.c

CVS: map_io.c multiplayer.c new_actors.c particles.c particles.h

CVS: shadows.c sound.c special_effects.c spells.c

CVS: Added Files:

CVS: eye_candy_wrapper.cpp eye_candy_wrapper.h

CVS: docs/eye_candy/eye_candy.html

CVS: docs/eye_candy/images/bag_drop.jpg

CVS: docs/eye_candy/images/bag_pickup.jpg

CVS: docs/eye_candy/images/breath_fire.jpg

CVS: docs/eye_candy/images/breath_ice.jpg

CVS: docs/eye_candy/images/breath_lightning.jpg

CVS: docs/eye_candy/images/breath_magic.jpg

CVS: docs/eye_candy/images/breath_poison.jpg

CVS: docs/eye_candy/images/breath_wind.jpg

CVS: docs/eye_candy/images/campfire.jpg

CVS: docs/eye_candy/images/cloud.jpg

CVS: docs/eye_candy/images/fireflies.jpg

CVS: docs/eye_candy/images/fountain.jpg

CVS: docs/eye_candy/images/harvesting_bag_of_gold.jpg

CVS: docs/eye_candy/images/harvesting_bees.jpg

CVS: docs/eye_candy/images/harvesting_cavern_wall.jpg

CVS: docs/eye_candy/images/harvesting_mother_nature.jpg

CVS: docs/eye_candy/images/harvesting_queen_of_nature.jpg

CVS: docs/eye_candy/images/harvesting_radon_pouch.jpg

CVS: docs/eye_candy/images/harvesting_rare_stone.jpg

CVS: docs/eye_candy/images/impact_blood.jpg

CVS: docs/eye_candy/images/impact_magic_immunity.jpg

CVS: docs/eye_candy/images/impact_magic_protection.jpg

CVS: docs/eye_candy/images/impact_poison.jpg

CVS: docs/eye_candy/images/impact_shield.jpg

CVS: docs/eye_candy/images/lamp.jpg

CVS: docs/eye_candy/images/ongoing_magic_immunity.jpg

CVS: docs/eye_candy/images/ongoing_magic_protection.jpg

CVS: docs/eye_candy/images/ongoing_poison.jpg

CVS: docs/eye_candy/images/ongoing_shield.jpg

CVS: docs/eye_candy/images/selfmagic_bones_to_gold.jpg

CVS: docs/eye_candy/images/selfmagic_heal.jpg

CVS: docs/eye_candy/images/selfmagic_magic_immunity.jpg

CVS: docs/eye_candy/images/selfmagic_magic_protection.jpg

CVS: docs/eye_candy/images/selfmagic_restoration.jpg

CVS: docs/eye_candy/images/selfmagic_shield.jpg

CVS: docs/eye_candy/images/selfmagic_teleport_to_the_portals_room.jpg

CVS: docs/eye_candy/images/smoke.jpg

CVS: docs/eye_candy/images/summon_arctic_chimeran.jpg

CVS: docs/eye_candy/images/summon_bear.jpg

CVS: docs/eye_candy/images/summon_beaver.jpg

CVS: docs/eye_candy/images/summon_boar.jpg

CVS: docs/eye_candy/images/summon_brown_snake.jpg

CVS: docs/eye_candy/images/summon_chimeran_wolf.jpg

CVS: docs/eye_candy/images/summon_deer.jpg

CVS: docs/eye_candy/images/summon_fluffy.jpg

CVS: docs/eye_candy/images/summon_fox.jpg

CVS: docs/eye_candy/images/summon_giant.jpg

CVS: docs/eye_candy/images/summon_green_snake.jpg

CVS: docs/eye_candy/images/summon_large_gargoyle.jpg

CVS: docs/eye_candy/images/summon_medium_gargoyle.jpg

CVS: docs/eye_candy/images/summon_puma.jpg

CVS: docs/eye_candy/images/summon_rabbit.jpg

CVS: docs/eye_candy/images/summon_rat.jpg

CVS: docs/eye_candy/images/summon_red_snake.jpg

CVS: docs/eye_candy/images/summon_skeleton.jpg

CVS: docs/eye_candy/images/summon_small_gargoyle.jpg

CVS: docs/eye_candy/images/summon_wolf.jpg

CVS: docs/eye_candy/images/summon_yeti.jpg

CVS: docs/eye_candy/images/targetmagic_drain_mana.jpg

CVS: docs/eye_candy/images/targetmagic_harm.jpg

CVS: docs/eye_candy/images/targetmagic_heal_summoned.jpg

CVS: docs/eye_candy/images/targetmagic_life_drain.jpg

CVS: docs/eye_candy/images/targetmagic_poison.jpg

CVS: docs/eye_candy/images/targetmagic_remote_heal.jpg

CVS: docs/eye_candy/images/targetmagic_smite_summoned.jpg

CVS: docs/eye_candy/images/targetmagic_teleport_to_range.jpg

CVS: docs/eye_candy/images/teleporter.jpg

CVS: docs/eye_candy/images/wind_leaves.jpg

CVS: docs/eye_candy/images/wind_petals.jpg eye_candy/effect_bag.cpp

CVS: eye_candy/effect_bag.h eye_candy/effect_breath.cpp

CVS: eye_candy/effect_breath.h eye_candy/effect_campfire.cpp

CVS: eye_candy/effect_campfire.h eye_candy/effect_cloud.cpp

CVS: eye_candy/effect_cloud.h eye_candy/effect_firefly.cpp

CVS: eye_candy/effect_firefly.h eye_candy/effect_fountain.cpp

CVS: eye_candy/effect_fountain.h eye_candy/effect_harvesting.cpp

CVS: eye_candy/effect_harvesting.h eye_candy/effect_impact.cpp

CVS: eye_candy/effect_impact.h eye_candy/effect_lamp.cpp

CVS: eye_candy/effect_lamp.h eye_candy/effect_ongoing.cpp

CVS: eye_candy/effect_ongoing.h eye_candy/effect_selfmagic.cpp

CVS: eye_candy/effect_selfmagic.h eye_candy/effect_smoke.cpp

CVS: eye_candy/effect_smoke.h eye_candy/effect_summon.cpp

CVS: eye_candy/effect_summon.h eye_candy/effect_sword.cpp

CVS: eye_candy/effect_sword.h eye_candy/effect_targetmagic.cpp

CVS: eye_candy/effect_targetmagic.h eye_candy/effect_teleporter.cpp

CVS: eye_candy/effect_teleporter.h eye_candy/effect_wind.cpp

CVS: eye_candy/effect_wind.h eye_candy/eye_candy.cpp

CVS: eye_candy/eye_candy.h eye_candy/math_cache.cpp

CVS: eye_candy/math_cache.h eye_candy/textures/128x128/crystal1.png

CVS: eye_candy/textures/128x128/crystal2.png

CVS: eye_candy/textures/128x128/crystal3.png

CVS: eye_candy/textures/128x128/flare1.png

CVS: eye_candy/textures/128x128/flare2.png

CVS: eye_candy/textures/128x128/flare3.png

CVS: eye_candy/textures/128x128/inverse1.png

CVS: eye_candy/textures/128x128/inverse2.png

CVS: eye_candy/textures/128x128/inverse3.png

CVS: eye_candy/textures/128x128/inverse4.png

CVS: eye_candy/textures/128x128/leaf_ash.png

CVS: eye_candy/textures/128x128/leaf_maple.png

CVS: eye_candy/textures/128x128/leaf_oak.png

CVS: eye_candy/textures/128x128/petal.png

CVS: eye_candy/textures/128x128/shimmer1.png

CVS: eye_candy/textures/128x128/shimmer2.png

CVS: eye_candy/textures/128x128/shimmer3.png

CVS: eye_candy/textures/128x128/simple.png

CVS: eye_candy/textures/128x128/snowflake.png

CVS: eye_candy/textures/128x128/twinflare1.png

CVS: eye_candy/textures/128x128/twinflare2.png

CVS: eye_candy/textures/128x128/twinflare3.png

CVS: eye_candy/textures/128x128/twinflare4.png

CVS: eye_candy/textures/128x128/twinflare5.png

CVS: eye_candy/textures/128x128/void1.png

CVS: eye_candy/textures/128x128/void2.png

CVS: eye_candy/textures/128x128/void3.png

CVS: eye_candy/textures/128x128/water1.png

CVS: eye_candy/textures/128x128/water2.png

CVS: eye_candy/textures/128x128/water3.png

CVS: eye_candy/textures/128x128/water4.png

CVS: eye_candy/textures/16x16/crystal1.png

CVS: eye_candy/textures/16x16/crystal2.png

CVS: eye_candy/textures/16x16/crystal3.png

CVS: eye_candy/textures/16x16/flare1.png

CVS: eye_candy/textures/16x16/flare2.png

CVS: eye_candy/textures/16x16/flare3.png

CVS: eye_candy/textures/16x16/inverse1.png

CVS: eye_candy/textures/16x16/inverse2.png

CVS: eye_candy/textures/16x16/inverse3.png

CVS: eye_candy/textures/16x16/inverse4.png

CVS: eye_candy/textures/16x16/leaf_ash.png

CVS: eye_candy/textures/16x16/leaf_maple.png

CVS: eye_candy/textures/16x16/leaf_oak.png

CVS: eye_candy/textures/16x16/petal.png

CVS: eye_candy/textures/16x16/shimmer1.png

CVS: eye_candy/textures/16x16/shimmer2.png

CVS: eye_candy/textures/16x16/shimmer3.png

CVS: eye_candy/textures/16x16/simple.png

CVS: eye_candy/textures/16x16/snowflake.png

CVS: eye_candy/textures/16x16/twinflare1.png

CVS: eye_candy/textures/16x16/twinflare2.png

CVS: eye_candy/textures/16x16/twinflare3.png

CVS: eye_candy/textures/16x16/twinflare4.png

CVS: eye_candy/textures/16x16/twinflare5.png

CVS: eye_candy/textures/16x16/void1.png

CVS: eye_candy/textures/16x16/void2.png

CVS: eye_candy/textures/16x16/void3.png

CVS: eye_candy/textures/16x16/water1.png

CVS: eye_candy/textures/16x16/water2.png

CVS: eye_candy/textures/16x16/water3.png

CVS: eye_candy/textures/16x16/water4.png

CVS: eye_candy/textures/32x32/crystal1.png

CVS: eye_candy/textures/32x32/crystal2.png

CVS: eye_candy/textures/32x32/crystal3.png

CVS: eye_candy/textures/32x32/flare1.png

CVS: eye_candy/textures/32x32/flare2.png

CVS: eye_candy/textures/32x32/flare3.png

CVS: eye_candy/textures/32x32/inverse1.png

CVS: eye_candy/textures/32x32/inverse2.png

CVS: eye_candy/textures/32x32/inverse3.png

CVS: eye_candy/textures/32x32/inverse4.png

CVS: eye_candy/textures/32x32/leaf_ash.png

CVS: eye_candy/textures/32x32/leaf_maple.png

CVS: eye_candy/textures/32x32/leaf_oak.png

CVS: eye_candy/textures/32x32/petal.png

CVS: eye_candy/textures/32x32/shimmer1.png

CVS: eye_candy/textures/32x32/shimmer2.png

CVS: eye_candy/textures/32x32/shimmer3.png

CVS: eye_candy/textures/32x32/simple.png

CVS: eye_candy/textures/32x32/snowflake.png

CVS: eye_candy/textures/32x32/twinflare1.png

CVS: eye_candy/textures/32x32/twinflare2.png

CVS: eye_candy/textures/32x32/twinflare3.png

CVS: eye_candy/textures/32x32/twinflare4.png

CVS: eye_candy/textures/32x32/twinflare5.png

CVS: eye_candy/textures/32x32/void1.png

CVS: eye_candy/textures/32x32/void2.png

CVS: eye_candy/textures/32x32/void3.png

CVS: eye_candy/textures/32x32/water1.png

CVS: eye_candy/textures/32x32/water2.png

CVS: eye_candy/textures/32x32/water3.png

CVS: eye_candy/textures/32x32/water4.png

CVS: eye_candy/textures/64x64/crystal1.png

CVS: eye_candy/textures/64x64/crystal2.png

CVS: eye_candy/textures/64x64/crystal3.png

CVS: eye_candy/textures/64x64/flare1.png

CVS: eye_candy/textures/64x64/flare2.png

CVS: eye_candy/textures/64x64/flare3.png

CVS: eye_candy/textures/64x64/inverse1.png

CVS: eye_candy/textures/64x64/inverse2.png

CVS: eye_candy/textures/64x64/inverse3.png

CVS: eye_candy/textures/64x64/inverse4.png

CVS: eye_candy/textures/64x64/leaf_ash.png

CVS: eye_candy/textures/64x64/leaf_maple.png

CVS: eye_candy/textures/64x64/leaf_oak.png

CVS: eye_candy/textures/64x64/petal.png

CVS: eye_candy/textures/64x64/shimmer1.png

CVS: eye_candy/textures/64x64/shimmer2.png

CVS: eye_candy/textures/64x64/shimmer3.png

CVS: eye_candy/textures/64x64/simple.png

CVS: eye_candy/textures/64x64/snowflake.png

CVS: eye_candy/textures/64x64/twinflare1.png

CVS: eye_candy/textures/64x64/twinflare2.png

CVS: eye_candy/textures/64x64/twinflare3.png

CVS: eye_candy/textures/64x64/twinflare4.png

CVS: eye_candy/textures/64x64/twinflare5.png

CVS: eye_candy/textures/64x64/void1.png

CVS: eye_candy/textures/64x64/void2.png

CVS: eye_candy/textures/64x64/void3.png

CVS: eye_candy/textures/64x64/water1.png

CVS: eye_candy/textures/64x64/water2.png

CVS: eye_candy/textures/64x64/water3.png

CVS: eye_candy/textures/64x64/water4.png

CVS: ----------------------------------------------------------------------

Share this post


Link to post
Share on other sites

Wow, nice :dry:

Soon we'll release a test client (I guess I will try to compile my client tomorrow).

 

For the unimplemented yet effects, I think it will be best to wait for them a few weeks, so we tests the ones we have now and find potential problems. If we have too many to test at once, we might forget to test a few and later on have client crashes or other problems.

 

The glowing swords: They are sent to the client in two ways:

1. Along with an actor info (what it is wearing, etc.) in the command: ADD_NEW_ENHANCED_ACTOR

2. When a player equips them, via ACTOR_WEAR_ITEM

 

They are removed with the opposite of those commands: ACTOR_UNWEAR_ITEM and REMOVE_ACTOR

 

The glowing weapons are as follow:

#define SWORD_1_FIRE 15

#define SWORD_2_FIRE 16

#define SWORD_2_COLD 17

#define SWORD_3_FIRE 18

#define SWORD_3_COLD 19

#define SWORD_3_MAGIC 20

#define SWORD_4_FIRE 21

#define SWORD_4_COLD 22

#define SWORD_4_MAGIC 23

#define SWORD_4_THERMAL 24

#define SWORD_5_FIRE 25

#define SWORD_5_COLD 26

#define SWORD_5_MAGIC 27

#define SWORD_5_THERMAL 28

#define SWORD_6_FIRE 29

#define SWORD_6_COLD 30

#define SWORD_6_MAGIC 31

#define SWORD_6_THERMAL 32

#define SWORD_7_FIRE 33

#define SWORD_7_COLD 34

#define SWORD_7_MAGIC 35

#define SWORD_7_THERMAL 36

 

(and some axes, etc.)

Maybe we should configure the glowing items in an XML or something.

Share this post


Link to post
Share on other sites

I've been looking forward to seeing this work in action, so I've compiled and logged onto the test server. WOW, floating leafs blowing around me! Now I can't wait to try out all the effects. :omg: The reason I'm posting, not just to congratulate you on such wonderful work, is to report a couple of minor build issues. I'm building on Linux BTW.

 

1) I had to remove line 72 "$(MAKE) -C eye_candy" from Makefile.linux otherwise, the build failed.

2) I had to change compiler to gcc/g++ 3.4 as I had linking issues with 3.3.

 

Thought this might help others save some time. I'm off to walk amongst the leafs again :dry:

Share this post


Link to post
Share on other sites

Hi,

 

I'm trying to build the client with the new effects on Windows / Visual Studio 2005 Express and I ran into several problems (probably because code was written under Linux?)

 

1. EYE_CANDY_WRAPPER_API needs to be defined in #ifdef WINDOWS section

2. types: u_int8_t, u_int16_t, u_int32_t, u_int64_t, int64_t are unknown

3. sys/time.h is not available

4. __attribute__ ((noinline)) causes syntax error

5. functions: fmax, copysign, remainderf are unknown

 

Also one thing I noticed is that the effects system is not longer turned off by removing the -DSFX (becuase of usage of ec_ functions in several other .c files), so with the current codes I'm not able to build a client at all. :omg:

 

I don't know if these are all incompabilities, because I stopped at point of compiling math_cache.cpp. I hope that helps anyone trying to build the client under Windows :dry:

Share this post


Link to post
Share on other sites

my turn :dry:

64bit issues... I get compile errors about loss of precision turning a pointer into an int. minimal compile fix below for 64bit users... a more correct fix may be a #define based on -DX86_64 (dunno about run performance, since running it segfaults, which may be this problem)

Index: eye_candy/effect_wind.cpp

===================================================================

RCS file: /cvsroot/elc/elc/eye_candy/effect_wind.cpp,v

retrieving revision 1.1

diff -u -r1.1 effect_wind.cpp

--- eye_candy/effect_wind.cpp 10 Mar 2007 06:12:29 -0000 1.1

+++ eye_candy/effect_wind.cpp 10 Mar 2007 14:41:42 -0000

@@ -407,7 +407,7 @@

{

WindEffect* e = (WindEffect*)effect;

const float time_offset = (float)((unsigned short)(get_time() / 10000)) * PI / 2000.0; // Translation: Convert to milliseconds, truncate the higher-order digits, convert to a float, make it wraparound in radians, and scale it down some.

- const unsigned short individual_offset = (unsigned short)(int)(void*)(this); // Based on the memory address in order to give each particle a unique bias.

+ const unsigned short individual_offset = (unsigned short)(long)(void*)(this); // Based on the memory address in order to give each particle a unique bias.

srand(individual_offset);

const float offset = randfloat() * 0.5;

const coord_t x = 1.0 * sin(offset + pos.x * 0.5283 + pos.z * 0.7111 + time_offset * 0.6817) * sin(offset + pos.x * 1.2019 + pos.z * 0.5985 + time_offset * 1.5927) * e->max_adjust / (fabs(pos.y - e->center.y) + 1);

Index: eye_candy/eye_candy.cpp

===================================================================

RCS file: /cvsroot/elc/elc/eye_candy/eye_candy.cpp,v

retrieving revision 1.1

diff -u -r1.1 eye_candy.cpp

--- eye_candy/eye_candy.cpp 10 Mar 2007 06:12:29 -0000 1.1

+++ eye_candy/eye_candy.cpp 10 Mar 2007 14:41:48 -0000

@@ -589,7 +589,7 @@

assert(flare_frequency);

if (flare_max == 1.0)

return 1.0;

- const int offset = (int)α //Unique to the particle.

+ const int offset = long(&alpha); //Unique to the particle.

math_cache.powf_0_1_rough_close(fabs(sin((pos.x + pos.y + pos.z + offset) / flare_frequency)), flare_exp);

const coord_t flare_val = 1.0 / (math_cache.powf_0_1_rough_close(fabs(sin((pos.x + pos.y + pos.z) / flare_frequency + offset)), flare_exp));

if (flare_val > flare_max)

Edited by ttlanhil

Share this post


Link to post
Share on other sites

Just had a few minutes playing using the new cvs client. Harvesting events are great fun by the way ;) I was in NC storage (which was packed) and experienced several client crashes. I have several core files and I think they may have been caused by different spell effects. The latests have this information:

 

Program terminated with signal 11, Segmentation fault.

#0 0x080ed367 in ec_create_selfmagic_shield2 (caster=0xb2800000, LOD=10) at eye_candy_wrapper.cpp:745

745 if (!ec_in_range(caster->x_pos, caster->y_pos, caster->z_pos, ec::SelfMagicEffect::get_max_end_time()))

(gdb) where

#0 0x080ed367 in ec_create_selfmagic_shield2 (caster=0xb2800000, LOD=10) at eye_candy_wrapper.cpp:745

#1 0x080e6799 in parse_special_effect (sfx=3, data=0xe9c3004) at special_effects.c:571

#2 0x080a610c in process_message_from_server (in_data=0xe9c3000 "O\004", data_length=6) at multiplayer.c:1338

#3 0x0809d60e in start_rendering () at main.c:110

#4 0x0809d8eb in main (argc=1, argv=0xbfe7a6e4) at main.c:237

Current language: auto; currently c++

 

This is a clean cvs build using the default compile options, on Debian Etch, nvidia graphics. I'll work though the other core files then enable more debug and see what I can find out.

 

Should I start a new thread to post these bug reports?

 

edit: looks like the call to ec_create_selfmagic_shield2() in special_effects.c is passing an uninitialised actor pointer, may be it should be passing caster rather than target, but I'm probably wrong

Edited by bluap

Share this post


Link to post
Share on other sites

Hi,

 

I'm trying to build the client with the new effects on Windows / Visual Studio 2005 Express and I ran into several problems (probably because code was written under Linux?)

Well, not windows, just Visual Studio I think.

 

@KarenRei: The types can be supplied with the SDL wrappers already in the EL client, instead of the standard headers, thus u_int8_t is Uint8, int64_t is Sint64, etc.

 

EDIT: Maybe I'm the only one with this problem, but I seem to have CRCRLF instead of CRLF or LF on the line endings in the version of eye_candy.cpp (and everything else in elc/eye_candy/) I just pulled from CVS... had to run them through a ruby script to rip out all of the line endings.

Edited by crusadingknight

Share this post


Link to post
Share on other sites

I had those EOLs as well (CVS should have taken care of them...), I could have dun fromdos on them, but gcc didn't care, so I left it alone (converting to native EOL can mean a cvs diff or cvs up will have difficulties)

Share this post


Link to post
Share on other sites

Wow, thanks everyone for all of this testing! This is exactly what I needed. I can't help with debugging on platforms other than Linux, but I can certainly help with everything else. I need to eat lunch and I have a few errands to run, and then I'll start taking a whack at the reported bugs.

 

Once again, thanks, everyone!

Share this post


Link to post
Share on other sites

Oh, I should add, one thing to look for: short effects (not ones that persist, like blowing leaves) that start but don't stop until you quit. I have debugging of the effects enabled currently, and it prints when effects start, stop, and are suspended/reactivated. The eye candy system is designed to clean out all traces of an effect once it's done.

Share this post


Link to post
Share on other sites

since the newest cvs segfaults regularly for me, I'm not using it atm... but looking at the leaves, something came to mind.

I added new weather a while back, the only part of that not done is being able to receive wind from the server (just need to work out the protocol and such with entropy when he has a bit of time spare, the code for the rain to use wind is already in place)... obviously, the same wind settings should be used for any of your effects. will there be any problems with this? is my proposed setup (link) going to provide enough options for all the effects you have?

Share this post


Link to post
Share on other sites

If you watch my leaves for a while, you'll notice three things.

 

1) It's not constant over time.

2) It's not constant over space.

3) There is also a varying vertical component.

 

The blowing is a composite of several factors. First, there is a "prevailing wind". This would be easy to have it come from the server. Leaves will tend, overall, to blow in that direction. Then there is the "current wind". This also doesn't vary spatially, but differs (somewhat randomly, but never changing too quickly) from the prevailing wind. Then there is the "local wind", which varies spatially.

 

In short, if we wanted this to be done serverside, we would either need an awfully lot of server messages, or we'd have to lose some blowing realism. Rather, I would propose that I split the effect into two: a wind effect, and a leaves/petals effect. The wind effect would be designed so that any part of EL's code could query it for the wind at a given location. The leaves effect would do this automatically. Does this sound like a reasonable solution?

 

Could you give me more information about your segfault? You say you can't run it all? Can you give me where it segfaults? I need this, as it doesn't segfault for me.

 

As for everyone else, I'll work on these, one at a time. :happy:

Share this post


Link to post
Share on other sites

I've talked to entropy, and the networking setup is a bit different to what I had written above. results of talking to him are here

 

currently my wind code has a set value from the server, as well as allowing up to 10%(current code in CVS expects this value to be set by the server, it will be coded to 10% when I update it) variance in speed and direction (just using rand, mostly it won't go up to the 10%... it's not that alive, but there's some activity in the wind regularly changing without server messages).

this could probably be improved upon, but the rain code I wrote is ready to use those values as well, so any changes to the formulas used shouldn't cause any trouble there.

only the 'local wind', which I'm assuming you mean considers the terrain and objects around, isn't covered... I'm wondering if that wind would be better for general use than 'current wind'

 

I don't think the segfault is related to your effects, since turning off shadow mapping allowed me to log in and run for a few minutes (rather than crash as soon as logging in)... I believe the backtrace was all in system libraries, rather than EL stuff (I'll see about tracking it down later, don't have libs with debugging symbols atm)

Edited by ttlanhil

Share this post


Link to post
Share on other sites

Update: The code should now respect -DSFX (didn't even notice that define before). All of the special effects code is not only not called if DSFX isn't defined; it won't even be built.

 

Next up: I'll try and work around those Windows build issues. However, note that I cannot test them, so this will be hit or miss. I have no windows boxes, no macs, and no 64-bit anythings. I'll do my best.

Share this post


Link to post
Share on other sites

Windows: I've attempted to fix the windows problems, but I can't test my fixes. Anyone with Windows want to try it again?

 

CR/LF: Dos2unix has now been run on everything in the eye_candy subdir.

 

"Shield" casting crash: I think you're exactly right; that should be caster, not target. I updated the code; let's see if that fixes it (too bad I can't cast the spells I'm coding effects for :happy: )

 

Keep the bugs/build problems coming!

 

Ttlanhil/Entropy: does my proposal (to split the wind effect up into a wind effect and a leaves effect, and have the wind effect be able to be called by any EL code to see what the wind is in a given location) sound like something that would be desired? The server would pass the prevailing wind with a signal, and the client would manage everything else.

 

Ttlanhil: The "local" wind doesn't take into account obstructions -- however, particles are setup so that they can. Rather, sit outside and watch leaves blowing around sometime. You'll notice that even in a big, open field, the leaves don't all blow in the same direction with the same speeds. The wind naturally varies in each location due to turbulence. That's what we get in this effect.

Edited by KarenRei

Share this post


Link to post
Share on other sites

The time for the wind and leaves has not come yet, since it involves rewritting and writting a lot of code for it.

 

Let's just focus on the stuff that we have now, then do the summoning stuff, and then release the client in May or so. After the May release, we can focus on the weather and other sfx.

Share this post


Link to post
Share on other sites

Hi,

 

Another attemp on Windows with VS2005 Express:

 

The -DSFX works now. I was able to compile the client with this off. I haven't tested the client compiled that way. Also most of what I have reported last time have been fixed. Thanks :icon13:

 

Now, for a new batch of problems:

 

1. #include <SDL/SDL.h> - actors.h, eye_candy_wrapper.h, eye_candy.h, eye_candy.cpp - SDL is included in global.h by <SDL.h> (without subdirectory). I think it should be kept consistent acrross the codes.

2. #define EYE_CANDY_WRAPPER_API

3. multiplayer.c - needs variables declaration beffore code (C requirement)

4. needs for #include <windows.h> - eye_candy.h -> otherwise GL.h causes preprocessor errors

5. #include "eye_candy.h" in match_cache.cpp - for remeinderf

6. Conversion pronblem (probably more of them still in code)

effect_breath.h - 'sqrt' : ambiguous call to overloaded function - changed value to double

effect_harvesting - 'sin' : ambiguous call to overloaded function - changed value to double

effect_breath,cpp - 'sqrt' : ambiguous call to overloaded function - changed value to double

7. random - uknown function - changed to rand in eye_candy.h

8. round - uknown function - implemented in eye_candy.h - not sure of implementation!!

 

Here is the patch for my changes:

Index: actors.h
===================================================================
RCS file: /cvsroot/elc/elc/actors.h,v
retrieving revision 1.73
diff -u -r1.73 actors.h
--- actors.h	10 Mar 2007 06:12:25 -0000	1.73
+++ actors.h	11 Mar 2007 06:23:43 -0000
@@ -6,9 +6,9 @@
#ifndef __ACTORS_H__
#define __ACTORS_H__

-#include <SDL/SDL.h>
-#include <SDL/SDL_net.h>
-#include <SDL/SDL_thread.h>
+#include <SDL.h>
+#include <SDL_net.h>
+#include <SDL_thread.h>
#include "cal_types.h"
#include "client_serv.h"

Index: eye_candy_wrapper.h
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy_wrapper.h,v
retrieving revision 1.3
diff -u -r1.3 eye_candy_wrapper.h
--- eye_candy_wrapper.h	11 Mar 2007 02:04:07 -0000	1.3
+++ eye_candy_wrapper.h	11 Mar 2007 06:31:41 -0000
@@ -14,7 +14,7 @@
#ifndef CAL_EYE_CANDY_WRAPPER_H
#define CAL_EYE_CANDY_WRAPPER_H

-#include <SDL/SDL.h>
+#include <SDL.h>

#ifdef __cplusplus
#include "eye_candy/eye_candy.h"
@@ -44,6 +44,8 @@
//****************************************************************************//

#ifdef WINDOWS
+
+#define EYE_CANDY_WRAPPER_API

#ifdef __MINGW32__

Index: multiplayer.c
===================================================================
RCS file: /cvsroot/elc/elc/multiplayer.c,v
retrieving revision 1.205
diff -u -r1.205 multiplayer.c
--- multiplayer.c	10 Mar 2007 23:44:09 -0000	1.205
+++ multiplayer.c	11 Mar 2007 06:35:05 -0000
@@ -406,6 +406,11 @@

void process_message_from_server (const Uint8 *in_data, int data_length)
{
+	ec_bounds bounds;
+	ec_reference ref1;
+	ec_reference ref2;
+	ec_effects eff_list;
+
 Uint8 text_buf[MAX_TCP_BUFFER];

 //see what kind of data we got
@@ -609,7 +614,7 @@
// NOTE: When actually calling functions for real, they should have their
//	   returned references saved, and freed when no longer needed.
///////////////////////////////////////////////////////////////////////////////
-				ec_bounds bounds = ec_create_bounds_list();
+				bounds = ec_create_bounds_list();
			 ec_add_polar_coords_bound(bounds, 0.0, 0.0, 8.0, 1.0);
			 ec_add_polar_coords_bound(bounds, 2.0, 0.0, 3.0, 1.0);
			 ec_add_polar_coords_bound(bounds, 5.0, 0.1, 1.5, 0.7);
@@ -635,11 +640,10 @@
//				ec_create_sword_of_ice(49.0, 70.0, 0.5, 49.5, 70.0, 0.0, 10);
//				ec_create_sword_of_magic(49.0, 70.0, 0.5, 49.5, 70.0, 0.0, 10);
//				ec_create_teleporter(49.0, 70.0, 0.0, 10);
-				ec_reference ref1;
-				ec_reference ref2;
+
			 ref1 = ec_create_wind_leaves(49.0, 70.0, 0.05, NULL, 1.0, bounds, 1.0, 0.0, 0.0);
			 ref2 = ec_create_wind_leaves(59.0, 70.0, 0.05, NULL, 1.0, bounds, 1.0, 0.0, 0.0);
-				ec_effects eff_list = ec_create_effects_list();
+				eff_list = ec_create_effects_list();
			 ec_add_effect(eff_list, ref2);
			 ec_add_wind_effect_list(ref1, eff_list);
			 ec_free_effects_list(eff_list);
Index: eye_candy/effect_breath.cpp
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/effect_breath.cpp,v
retrieving revision 1.3
diff -u -r1.3 effect_breath.cpp
--- eye_candy/effect_breath.cpp	11 Mar 2007 01:59:26 -0000	1.3
+++ eye_candy/effect_breath.cpp	11 Mar 2007 06:54:56 -0000
@@ -316,7 +316,7 @@
  mover = NULL;
  count = 0;
  count_scalar = 3000 / LOD;
-  size_scalar = scale * fastsqrt(LOD) / sqrt(10);
+  size_scalar = scale * fastsqrt(LOD) / sqrt(10.0);

  spawner = new FilledSphereSpawner(scale / 3.0);
  mover = new SmokeMover(this, 10.0);
Index: eye_candy/effect_breath.h
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/effect_breath.h,v
retrieving revision 1.3
diff -u -r1.3 effect_breath.h
--- eye_candy/effect_breath.h	11 Mar 2007 01:59:26 -0000	1.3
+++ eye_candy/effect_breath.h	11 Mar 2007 06:53:36 -0000
@@ -37,7 +37,7 @@
 else
   LOD = desired_LOD;
 count_scalar = 3000 / LOD;
-	size_scalar = scale * fastsqrt(LOD) / sqrt(10);
+	size_scalar = scale * fastsqrt(LOD) / sqrt(10.0);
  };
  static Uint64 get_max_end_time() { return 5000000; };
  virtual Uint64 get_expire_time() { return 5000000 + born; };
Index: eye_candy/effect_harvesting.cpp
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/effect_harvesting.cpp,v
retrieving revision 1.3
diff -u -r1.3 effect_harvesting.cpp
--- eye_candy/effect_harvesting.cpp	11 Mar 2007 01:59:26 -0000	1.3
+++ eye_candy/effect_harvesting.cpp	11 Mar 2007 06:52:55 -0000
@@ -107,9 +107,9 @@
 }
 case HarvestingEffect::RARE_STONE:
 {
-	  color[0] = 0.7 + 0.3 * sin(age / 530000);
-	  color[1] = 0.7 + 0.3 * sin(age / 970000 + 1.3);
-	  color[2] = 0.7 + 0.3 * sin(age / 780000 + 1.9);
+	  color[0] = 0.7 + 0.3 * sin(age / 530000.0);
+	  color[1] = 0.7 + 0.3 * sin(age / 970000.0 + 1.3);
+	  color[2] = 0.7 + 0.3 * sin(age / 780000.0 + 1.9);

   if (age < 700000)
   {
Index: eye_candy/eye_candy.cpp
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/eye_candy.cpp,v
retrieving revision 1.3
diff -u -r1.3 eye_candy.cpp
--- eye_candy/eye_candy.cpp	11 Mar 2007 01:59:27 -0000	1.3
+++ eye_candy/eye_candy.cpp	11 Mar 2007 07:25:26 -0000
@@ -2,12 +2,13 @@

// I N C L U D E S ////////////////////////////////////////////////////////////

-#include <SDL/SDL.h>
-#include <SDL/SDL_image.h>
+#include <SDL.h>
+#include <SDL_image.h>
#include <errno.h>

#include "eye_candy.h"
#include "math_cache.h"
+

namespace ec
{
Index: eye_candy/eye_candy.h
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/eye_candy.h,v
retrieving revision 1.3
diff -u -r1.3 eye_candy.h
--- eye_candy/eye_candy.h	11 Mar 2007 01:59:27 -0000	1.3
+++ eye_candy/eye_candy.h	11 Mar 2007 07:21:20 -0000
@@ -4,16 +4,18 @@
#define EYE_CANDY_H

// I N C L U D E S ////////////////////////////////////////////////////////////
-
+#ifdef WINDOWS
+	#include <windows.h>
+#endif
#include <vector>
#include <map>
#include <iostream>
#include <cassert>
-#include <SDL/SDL.h>
+#include <SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>
-#include <GL/glut.h>
+//#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>

@@ -72,11 +74,13 @@
float cube(const float f);
int cube(const int i);
#ifdef WINDOWS
-__declspec_noinline float fastsqrt(float f);
-__declspec_noinline float invsqrt(float f);
- #define copysign _copysign
- #define fmax(a, b) ((a < b) ? b : a)
- #define remainderf(a, b) (a - (float)round(a / b) * b)
+__declspec(noinline) float fastsqrt(float f);
+__declspec(noinline) float invsqrt(float f);
+#define copysign _copysign
+#define fmax(a, b) ((a < b) ? b : a)
+#define round(a) (a - floor(a) < 0.5f ? floor(a) : ceil(a)) // IS THIS OK??
+#define remainderf(a, b) (a - (float)round(a / b) * b)
+#define random rand
#else
__attribute__ ((noinline)) float fastsqrt(float f);
__attribute__ ((noinline)) float invsqrt(float f);
Index: eye_candy/math_cache.cpp
===================================================================
RCS file: /cvsroot/elc/elc/eye_candy/math_cache.cpp,v
retrieving revision 1.2
diff -u -r1.2 math_cache.cpp
--- eye_candy/math_cache.cpp	10 Mar 2007 23:44:11 -0000	1.2
+++ eye_candy/math_cache.cpp	11 Mar 2007 06:44:01 -0000
@@ -5,6 +5,7 @@
#include <iostream>
#include <math.h>

+#include "eye_candy.h"
#include "math_cache.h"

const double PI = 3.141592654;

Edited by Kindar Naar

Share this post


Link to post
Share on other sites

If you're in console mode, the effects are created but not destroyed until you leave console mode. I sat AFK in console mode yesterday for a while and when I left console the client crashed. I had already updated to the latest CVS so could not do a gdb trace. I reproduced the problem today. Sorry for the volume of text, I was AFK longer than I expected.

 

Here's the terminal output:

WindEffect (0xe955588) created.
WindEffect (0xe956e00) created.
Deactivating effect 0xe955588(7301 > 250)
Deactivating effect 0xe956e00(8381 > 250)
WindEffect (0xe955588) destroyed.
WindEffect (0xe956e00) destroyed.
BagEffect (0xf2db640) created.
Deactivating effect 0xf2db640(315.872 > 250)
BagEffect (0xf7715c8) created.
BagEffect (0xf409a38) created.
BagEffect (0xf3b0220) created.
SelfMagicEffect (0xe44f030) created.
SelfMagicEffect (0xe582260) created.
SelfMagicEffect (0xe4feb78) created.
SelfMagicEffect (0xe747540) created.
SelfMagicEffect (0xe59d2d0) created.
SelfMagicEffect (0xf299340) created.
BagEffect (0xf5567c8) created.
BagEffect (0xed9df20) created.
BagEffect (0xf152340) created.
BagEffect (0xf36a278) created.
BagEffect (0xf73c710) created.
BagEffect (0xe324118) created.
BagEffect (0xf6af640) created.
BagEffect (0xe324338) created.
BagEffect (0xf61b7d0) created.
BagEffect (0xf1dfd88) created.
BagEffect (0xe5b1000) created.
BagEffect (0xf0abf38) created.
BagEffect (0xe670c18) created.
BagEffect (0xf096330) created.
BagEffect (0xf73c698) created.
BagEffect (0xe670c88) created.
BagEffect (0xe322140) created.
BagEffect (0xe87b810) created.
BagEffect (0xe4a0dc8) created.
BagEffect (0xe565110) created.
BagEffect (0xf24b338) created.
BagEffect (0xed95950) created.
BagEffect (0xe8b25a0) created.
BagEffect (0xf36a1a0) created.
BagEffect (0xe8785e0) created.
BagEffect (0xe44bde8) created.
BagEffect (0xe4a3210) created.
BagEffect (0xe5b5040) created.
BagEffect (0xe44ab68) created.
BagEffect (0xe565080) created.
BagEffect (0xe5db5e0) created.
BagEffect (0xed638e8) created.
BagEffect (0xe321b18) created.
BagEffect (0xe5b4ca0) created.
BagEffect (0xe835048) created.
BagEffect (0xe4a0bd0) created.
BagEffect (0xedbb158) created.
BagEffect (0xe44bd78) created.
BagEffect (0xf27c920) created.
BagEffect (0xee082d0) created.
BagEffect (0xf61a478) created.
SelfMagicEffect (0xe9913a8) created.
SelfMagicEffect (0xf1510a8) created.
SelfMagicEffect (0xf73c428) created.
SelfMagicEffect (0xedebad8) created.
BagEffect (0xed63848) created.
BagEffect (0xed814e8) created.
BagEffect (0xf369400) created.
BagEffect (0xf0d05e8) created.
BagEffect (0xee080e8) created.
BagEffect (0xe4a0d30) created.
BagEffect (0xe4a3028) created.
SelfMagicEffect (0xe9b45e0) created.
BagEffect (0xe990228) created.
BagEffect (0xf249e80) created.
BagEffect (0xe55fce8) created.
SelfMagicEffect (0xe619260) created.
BagEffect (0xe5948c0) created.
SelfMagicEffect (0xe3a2640) created.
SelfMagicEffect (0xf345ad0) created.
BagEffect (0xf61b498) created.
BagEffect (0xe5db060) created.
BagEffect (0xedbbdf0) created.
BagEffect (0xe8aba78) created.
BagEffect (0xedbb0c0) created.
BagEffect (0xedec048) created.
SelfMagicEffect (0xe9b3c00) created.
SelfMagicEffect (0xe44ed08) created.
BagEffect (0xe3220b8) created.
SelfMagicEffect (0xe878540) created.
SelfMagicEffect (0xe8df900) created.
SelfMagicEffect (0xe4accf0) created.
SelfMagicEffect (0xe8923c8) created.
SelfMagicEffect (0xf09d870) created.
BagEffect (0xe4a0198) created.
SelfMagicEffect (0xedebf80) created.
BagEffect (0xe61ce00) created.
BagEffect (0xf6af5a8) created.
BagEffect (0xe9b4888) created.
BagEffect (0xf0cf9e0) created.
TargetMagicEffect (0xe564fe0) created(1).
TargetMagicEffect (0xe9b0aa0) created(1).
SelfMagicEffect (0xe73dab0) created.
SelfMagicEffect (0xe3a26d8) created.
TargetMagicEffect (0xe9b32b0) created(1).
TargetMagicEffect (0xf09d6d0) created(1).
TargetMagicEffect (0xe670b68) created(1).
TargetMagicEffect (0xe61a428) created(1).
TargetMagicEffect (0xe8adfd0) created(1).
TargetMagicEffect (0xf368f00) created(1).
TargetMagicEffect (0xf09f2a8) created(1).
TargetMagicEffect (0xe4aa590) created(1).
BagEffect (0xed80908) created.
BagEffect (0xf6a6ad0) created.
TargetMagicEffect (0xef3dc90) created(1).
BagEffect (0xf09f348) created.
BagEffect (0xed94b38) created.
TargetMagicEffect (0xe84a738) created(1).
BagEffect (0xe82d9a0) created.
TargetMagicEffect (0xe581a80) created(1).
BagEffect (0xe44e580) created.
TargetMagicEffect (0xe4aa3e0) created(1).
SelfMagicEffect (0xe1da7f8) created.
BagEffect (0xb62b058) created.
BagEffect (0xe3272f0) created.
SelfMagicEffect (0xe8e4de8) created.
BagEffect (0xe8ab728) created.
BagEffect (0xf09f230) created.
BagEffect (0xe618a20) created.
BagEffect (0xe749bb8) created.
BagEffect (0xf442cd8) created.
SelfMagicEffect (0xe8e69f0) created.
SelfMagicEffect (0xf085aa8) created.
BagEffect (0xe55c498) created.
BagEffect (0xed9d198) created.
BagEffect (0xea525a0) created.
BagEffect (0xf2361c8) created.
BagEffect (0xe44dff0) created.
Deactivating effect 0xf7715c8(315.872 > 250)
Deactivating effect 0xe44f030(7355.56 > 250)
Deactivating effect 0xe582260(3973.77 > 250)
Deactivating effect 0xe747540(6906.24 > 250)
Deactivating effect 0xf299340(7777.16 > 250)
Deactivating effect 0xf152340(311.043 > 250)
Deactivating effect 0xf36a278(311.043 > 250)
BagEffect (0xe324118) destroyed.
BagEffect (0xf6af640) destroyed.
BagEffect (0xe324338) destroyed.
BagEffect (0xf61b7d0) destroyed.
BagEffect (0xf1dfd88) destroyed.
Deactivating effect 0xe5b1000(299.051 > 250)
BagEffect (0xe5b1000) destroyed.
Deactivating effect 0xf0abf38(299.051 > 250)
BagEffect (0xf0abf38) destroyed.
BagEffect (0xe670c18) destroyed.
BagEffect (0xf096330) destroyed.
BagEffect (0xf73c698) destroyed.
BagEffect (0xe670c88) destroyed.
BagEffect (0xe322140) destroyed.
BagEffect (0xe87b810) destroyed.
BagEffect (0xe4a0dc8) destroyed.
BagEffect (0xe565110) destroyed.
BagEffect (0xf24b338) destroyed.
BagEffect (0xed95950) destroyed.
BagEffect (0xe8b25a0) destroyed.
BagEffect (0xf36a1a0) destroyed.
BagEffect (0xe8785e0) destroyed.
BagEffect (0xe44bde8) destroyed.
Deactivating effect 0xe4a3210(258.779 > 250)
BagEffect (0xe4a3210) destroyed.
Deactivating effect 0xe5b5040(258.779 > 250)
BagEffect (0xe5b5040) destroyed.
BagEffect (0xe44ab68) destroyed.
BagEffect (0xe565080) destroyed.
BagEffect (0xe5db5e0) destroyed.
BagEffect (0xed638e8) destroyed.
BagEffect (0xe321b18) destroyed.
BagEffect (0xe5b4ca0) destroyed.
BagEffect (0xe835048) destroyed.
BagEffect (0xe4a0bd0) destroyed.
BagEffect (0xedbb158) destroyed.
BagEffect (0xe44bd78) destroyed.
BagEffect (0xf27c920) destroyed.
BagEffect (0xee082d0) destroyed.
BagEffect (0xf61a478) destroyed.
SelfMagicEffect (0xe9913a8) destroyed.
Deactivating effect 0xf1510a8(6946.46 > 250)
SelfMagicEffect (0xf1510a8) destroyed.
SelfMagicEffect (0xf73c428) destroyed.
Deactivating effect 0xedebad8(7862.98 > 250)
SelfMagicEffect (0xedebad8) destroyed.
BagEffect (0xed63848) destroyed.
Deactivating effect 0xed814e8(294.456 > 250)
BagEffect (0xed814e8) destroyed.
BagEffect (0xf369400) destroyed.
Deactivating effect 0xf0d05e8(316.249 > 250)
BagEffect (0xf0d05e8) destroyed.
Deactivating effect 0xee080e8(316.249 > 250)
BagEffect (0xee080e8) destroyed.
BagEffect (0xe4a0d30) destroyed.
BagEffect (0xe4a3028) destroyed.
Deactivating effect 0xe9b45e0(inf > 250)
SelfMagicEffect (0xe9b45e0) destroyed.
BagEffect (0xe990228) destroyed.
Deactivating effect 0xf249e80(294.456 > 250)
BagEffect (0xf249e80) destroyed.
BagEffect (0xe55fce8) destroyed.
Deactivating effect 0xe619260(7027.28 > 250)
SelfMagicEffect (0xe619260) destroyed.
BagEffect (0xe5948c0) destroyed.
Deactivating effect 0xe3a2640(3976.04 > 250)
SelfMagicEffect (0xe3a2640) destroyed.
Deactivating effect 0xf345ad0(9588.58 > 250)
SelfMagicEffect (0xf345ad0) destroyed.
BagEffect (0xf61b498) destroyed.
BagEffect (0xe5db060) destroyed.
BagEffect (0xedbbdf0) destroyed.
BagEffect (0xe8aba78) destroyed.
BagEffect (0xedbb0c0) destroyed.
BagEffect (0xedec048) destroyed.
Deactivating effect 0xe9b3c00(3973.77 > 250)
SelfMagicEffect (0xe9b3c00) destroyed.
SelfMagicEffect (0xe44ed08) destroyed.
BagEffect (0xe3220b8) destroyed.
Deactivating effect 0xe878540(3945.24 > 250)
SelfMagicEffect (0xe878540) destroyed.
Deactivating effect 0xe8df900(3973.77 > 250)
SelfMagicEffect (0xe8df900) destroyed.
Deactivating effect 0xe4accf0(3973.77 > 250)
SelfMagicEffect (0xe4accf0) destroyed.
Deactivating effect 0xe8923c8(3816.82 > 250)
SelfMagicEffect (0xe8923c8) destroyed.
Deactivating effect 0xf09d870(304.581 > 250)
SelfMagicEffect (0xf09d870) destroyed.
BagEffect (0xe4a0198) destroyed.
Deactivating effect 0xedebf80(3973.77 > 250)
SelfMagicEffect (0xedebf80) destroyed.
BagEffect (0xe61ce00) destroyed.
BagEffect (0xf6af5a8) destroyed.
Deactivating effect 0xe9b4888(309.906 > 250)
BagEffect (0xe9b4888) destroyed.
Deactivating effect 0xf0cf9e0(309.906 > 250)
BagEffect (0xf0cf9e0) destroyed.
Deactivating effect 0xe564fe0(3973.77 > 250)
TargetMagicEffect (0xe564fe0) destroyed.
TargetMagicEffect (0xe9b0aa0) destroyed.
Deactivating effect 0xe73dab0(3945.24 > 250)
SelfMagicEffect (0xe73dab0) destroyed.
Deactivating effect 0xe3a26d8(322.761 > 250)
SelfMagicEffect (0xe3a26d8) destroyed.
Deactivating effect 0xe9b32b0(3952.52 > 250)
TargetMagicEffect (0xe9b32b0) destroyed.
TargetMagicEffect (0xf09d6d0) destroyed.
Deactivating effect 0xe670b68(3952.52 > 250)
TargetMagicEffect (0xe670b68) destroyed.
Deactivating effect 0xe61a428(3973.77 > 250)
TargetMagicEffect (0xe61a428) destroyed.
Deactivating effect 0xe8adfd0(3973.77 > 250)
TargetMagicEffect (0xe8adfd0) destroyed.
Deactivating effect 0xf368f00(304.581 > 250)
TargetMagicEffect (0xf368f00) destroyed.
Deactivating effect 0xf09f2a8(3973.77 > 250)
TargetMagicEffect (0xf09f2a8) destroyed.
Deactivating effect 0xe4aa590(3973.77 > 250)
TargetMagicEffect (0xe4aa590) destroyed.
BagEffect (0xed80908) destroyed.
BagEffect (0xf6a6ad0) destroyed.
Deactivating effect 0xef3dc90(3973.77 > 250)
TargetMagicEffect (0xef3dc90) destroyed.
BagEffect (0xf09f348) destroyed.
BagEffect (0xed94b38) destroyed.
Deactivating effect 0xe84a738(3973.77 > 250)
TargetMagicEffect (0xe84a738) destroyed.
Deactivating effect 0xe82d9a0(304.581 > 250)
BagEffect (0xe82d9a0) destroyed.
Deactivating effect 0xe581a80(3973.77 > 250)
TargetMagicEffect (0xe581a80) destroyed.
Deactivating effect 0xe44e580(304.581 > 250)
BagEffect (0xe44e580) destroyed.
Deactivating effect 0xe4aa3e0(3963.18 > 250)
*** glibc detected *** free(): invalid next size (fast): 0x0f0ab758 ***
Aborted (core dumped)

 

Here's the gdb output:

Program terminated with signal 6, Aborted.
#0  0xb7a0e947 in raise () from /lib/tls/libc.so.6
(gdb) where
#0  0xb7a0e947 in raise () from /lib/tls/libc.so.6
#1  0xb7a100c9 in abort () from /lib/tls/libc.so.6
#2  0xb7a4408a in __fsetlocking () from /lib/tls/libc.so.6
#3  0xb7a4b94f in mallopt () from /lib/tls/libc.so.6
#4  0xb7a4b9f2 in free () from /lib/tls/libc.so.6
#5  0xb78c43b1 in operator delete () from /usr/lib/libstdc++.so.6
#6  0x08111f47 in ~IFSLinearElement (this=0xf0ab758)
at eye_candy/eye_candy.h:758
#7  0x08102b66 in ~IFSParticleSpawner (this=0xe62c090)
at eye_candy/eye_candy.cpp:900
#8  0x0813c80e in ~SierpinskiIFSParticleSpawner (this=0xe62c090)
at eye_candy/effect_targetmagic.cpp:61
#9  0x08142530 in ~TargetMagicEffect (this=0xe4aa3e0)
at eye_candy/effect_targetmagic.cpp:548
#10 0x081097fb in ec::EyeCandy::idle (this=0x830d260)
at eye_candy/eye_candy.cpp:1387
#11 0x080e8eb9 in ec_idle () at eye_candy_wrapper.cpp:92
#12 0x0808650c in display_game_handler (win=0xb5e6740) at gamewin.c:674
#13 0x0807c75b in draw_window (win=0xb5e6740) at elwindows.c:1056
#14 0x0807cc9a in display_window (win_id=0) at elwindows.c:1204
#15 0x0807a17a in display_windows (level=1) at elwindows.c:54
#16 0x080742a1 in draw_scene () at draw_scene.c:98
#17 0x0809d678 in start_rendering () at main.c:123
---Type <return> to continue, or q <return> to quit---
#18 0x0809d8eb in main (argc=1, argv=0xbfc3c814) at main.c:237

 

I'll experiment more and see if it always crashes if effects are stacked while in console mode.

Share this post


Link to post
Share on other sites

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

×