The easiest way to do really weird things that doesn't fit into the standard move data would be to hijack the "aniobject" argument (mvd_ANIMATIONOBJECT slot of move data). It's intended to be used just for visual effect controllers, but nothing's stopping you from creating an object which in turn sets up a totem, or does other weird stuff (a boss could have a move that plays a cutscene, for instance). The only thing to keep in mind is that it needs to be a child of parent_battleeffect if you want the battle to pause until the object is destroyed (i.e. it's gonna be around for more than one frame). Do the behavior you want to achieve in the step event, since we set some variables after creating it (and thus they're not accessible in the create event).
Also the code you're running is probably not doing what you think you're doing...
The function is amp_generate_monster(slot,species,level). First argument is slot, if you just put an "1" there it's always going to overwrite whatever's in the second party slot (array numbering starts at 0 in Game Maker). You want to ask the engine for an unoccupied slot, so you probably want
var slot = amp_get_new_enemy_id(); amp_generate_monster(slot, monster_totem_1, 1) var totem = instance_create_depth(xx,yy,dd,obj_battlemonster) totem.amp_id = slot totem.name = monster_get_name(totem.amp_id) totem.sprite_index = monster_get_battlesprite(totem.amp_id)
xx, yy and dd are the X, Y and depth values to create the totem on, you'd have to compute them somehow. For this you could use the fact that effect object you created has a variable "user" set by the battle controller, which is the ID of whoever ran this move, so if you e.g. want the totem to spawn in front of the user, you'd do something like:
var xx, yy, dd; xx = user.x + user.sprite_width*0.5 yy = user.y + 10 dd = user.depth + (user.side == side_ENEMY)? -10 : 10;
(potentially you might also wanna use the "target" variable which is the move's target, e.g. if you could create a totem that affects someone else in a multibattle)