Skip to content

Parameters of custom-defined events are lost when placed off grid #120

Description

@onetruepurple

Spoilers for upcoming Bash content, oops.

I've set up several decorative "skull on a pole" events with extra parameters to rotate and shade the sprite.

However it appears that placing the custom event without snapping it to the grid causes the parameters to be lost:

Image

From left to right:

  • the event placed in the regular manner,
  • the event placed off grid,
  • the event placed on the grid, but using the "don't snap" option.
Image

I'm assuming this is a bug but it's possible I'm missing something in my code (robert downey jr: cooba really struggles with parameters and bit lengths)

///@Event 182=Big Skull Left  |+|Scenery |Skull |Left |Angle:-8 |Darkness:2
///@Event 143=Big Skull Right  |+|Scenery |Skull |Right |Angle:-8 |Darkness:2
///@Event 177=Small Skull Left  |+|Scenery |skull |left |Angle:-8 |Darkness:2
///@Event 170=Small Skull Right  |+|Scenery |skull |right |Angle:-8 |Darkness:2

class SpikeSkull : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::STEADYLIGHT, false);
		
		int angleParam = jjParameterGet(int(obj.xPos/32), int(obj.yPos/32), 0, 8);
		int darknessParam = jjParameterGet(int(obj.xPos/32), int(obj.yPos/32), 8, 2);
		
		//close enough
		int angle = 1023 - (angleParam*4);
		int darkness = 128 - (darknessParam*24);
		
		jjDrawRotatedSpriteFromCurFrame(
			obj.xPos,
			obj.yPos,
			obj.curFrame,
			angle,
			1,
			1,
			SPRITE::BRIGHTNESS,
			darkness,
			4
		);
		
		jjDrawString(obj.xPos, obj.yPos + 16, "" + angleParam + " => " + angle);
		jjDrawString(obj.xPos, obj.yPos + 28, "" + darknessParam + " => " + darkness);
		
		obj.lightType = LIGHT::NONE;
		obj.light = 0;
	}
}

void onLevelLoad() {
	jjPIXELMAP BigSkullLeft(0, 0, 64, 256);
	jjPIXELMAP BigSkullRight(64, 0, 64, 256);
	
	jjPIXELMAP SmallSkullLeft(128, 0, 32, 128);
	jjPIXELMAP SmallSkullRight(128, 128, 32, 128);
	
	array<jjPIXELMAP@> Skulls = {
		BigSkullLeft,
		BigSkullRight,
		SmallSkullLeft,
		SmallSkullRight
	};
	
	for (uint i = 0; i < 4; i++) {
		jjANIMFRAME@ frame = jjAnimFrames[jjAnimations[jjAnimSets[ANIM::PICKUPS].firstAnim + 15 + i].firstFrame];
		Skulls[i].trim();
		Skulls[i].save(frame);
		frame.hotSpotX = -frame.width/2;
		frame.hotSpotY = -frame.height + 14;
	}
	
	jjObjectPresets[OBJECT::CHEESE].behavior = 
	jjObjectPresets[OBJECT::CHERRY].behavior = 
	jjObjectPresets[OBJECT::CHICKENLEG].behavior = 
	jjObjectPresets[OBJECT::CHIPS].behavior = SpikeSkull();
	
	jjObjectPresets[OBJECT::CHEESE].playerHandling = 
	jjObjectPresets[OBJECT::CHERRY].playerHandling = 
	jjObjectPresets[OBJECT::CHICKENLEG].playerHandling = 
	jjObjectPresets[OBJECT::CHIPS].playerHandling = HANDLING::PARTICLE;
	
	jjObjectPresets[OBJECT::CHEESE].bulletHandling = 
	jjObjectPresets[OBJECT::CHERRY].bulletHandling = 
	jjObjectPresets[OBJECT::CHICKENLEG].bulletHandling = 
	jjObjectPresets[OBJECT::CHIPS].bulletHandling = HANDLING::IGNOREBULLET;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions