cleffect beam_update doesn't seem to work


Renowned Adventurer
MSC Developer
Warriors of the North
Apr 20, 2013
Sometimes it seems to update, but only once, despite trying many times & putting it on timers, etc.

I can, however, get properties properly.

{ effect_beam_point_update //Called every frame

    callevent resolve_positions
    //infomsg all $getcl_beam(BEAM_ID,end) $getcl_beam(BEAM_ID,width)
    //Appears to be able to get properties properly

    //Tried on timer, in separate event, without quotes
    cleffect beam_update BEAM_ID "start" START_POS
    cleffect beam_update BEAM_ID "end" END_POS

{ resolve_positions //Will get the new positions for the tempents to go

    add TEST_ANG 2

    setvard START_POS $getcl(START_IDX,origin)
    vectoradd START_POS $relpos($getcl(START_IDX,angles),START_OFFS) //Adds the position relative to the angle

    //setvard END_POS $getcl(END_IDX,origin)
    //vectoradd END_POS $relpos($getcl(END_IDX,angles),END_OFFS)

    setvard END_POS $getcl(START_IDX,origin)
    vectoradd END_POS $relpos($vec(0,TEST_ANG,0),$vec(0,50,0))
EDIT: Just to clarify, this was done in a client side script
EDIT: I did try the width property too, but no others besides start and end.
EDIT: I should've expected this. I think I read somewhere that these don't work. If absolutely nothing can be done, I'll just make another fx. All I'm trying to do is have beam points follow the center of a monster, not the origin
EDIT again: The script provided is a snippet of the fx, it should beam from the center of START_IDX then spin the end position around it in a circle. I did this just to test if it was even working.
Last edited:


Staff member
Lead MSC Developer
MSC Developer
Apr 8, 2005
Dun think this function was actually tested... I can *kinda* get it to work, if I update both the start and end position - issue being, beam keeps its orientation. So if I have a beam that goes straight up and down, and try to move the end position in a circle and the start in the opposite angle, what I get is a straight beam moving around its axis, instead of a beam with two ends twisting around its axis, as one would expect.

Now there's also this mysterious "delta" factor - if I move that in the same fashion that I move the beam start, the beam turns on its side, and I get a kinda clock-hand effect, as the beam rotates around the axis.

Code looks fine, but it maybe these properties dun do what one would expect.

Actual test script I used (0x0x0 is exposed in walltest):
{ cl_beam_test
	cleffect beam_points (0,0,0) (0,0,64) lgtning.spr 999.9 2.0 0.01 1 1 30 (1,1,0,1)
	setvard TEST_BEAM game.script.last_beam_id
	setvard ROT_ANG 0
	callevent 0.5 cl_beam_test_loop

{ cl_beam_test_loop
	callevent 0.5 cl_beam_test_loop
	dbg cl_beam_test_loop TEST_BEAM $getcl_beam(TEST_BEAM,end)

	local L_END_VEC $vec(0,0,64)
	vectoradd L_END_VEC $relpos($vec(0,ROT_ANG,0),$vec(0,128,0))
	cleffect beam_update TEST_BEAM end L_END_VEC //this alone has no effect
	local L_START_VEC $vec(0,0,0)
	add L_ROT_ANG 180
	vectoradd L_START_VEC $relpos($vec(0,L_ROT_ANG,0),$vec(0,128,0))
	cleffect beam_update TEST_BEAM start L_START_VEC //rotates the entire beam, but does not change angles
	cleffect beam_update TEST_BEAM delta L_START_VEC //puts beam on its side, radiating angles
	add ROT_ANG 20
	if ROT_ANG > 359
	setvard ROT_ANG 0
If I adjust the delta and the start or the end, I can move one end of the beam, as directed, but not the other.... Hrmmm...