Mummy: Difference between revisions

From ZAMN Hacking
Content added Content deleted
No edit summary
No edit summary
 
Line 10: Line 10:


See [[Zombie#RAM map]].
See [[Zombie#RAM map]].

== Pseudocode ==

updateAnimation() {
this.cyclesUntilAnimUpdate -= 1
if (this.cyclesUntilAnimUpdate == 0) {
this.cyclesUntilAnimUpdate = 4
this.animationFrame = (this.animationFrame + 1) % 4
this.sprite.tileData.lowBytes = this.animations[this.direction][this.animationFrame]
this.sprite.tileData.bank = 0x90
if (this.direction < DOWN_LEFT) {
this.sprite.flipX = false
} else {
this.sprite.flipX = true
}
}
}
animations = {
{ 0xE1D4, 0xE1FD, 0xE226, 0xE24F },
{ 0xE278, 0xE2A1, 0xE2CA, 0xE2F3 },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 },
{ 0xE1D4, 0xE1FD, 0xE226, 0xE24F },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 },
{ 0xE118, 0xE149, 0xE172, 0xE1A3 }
}
init() {
{{ROM name|$81:8000}}()
this.animationFrame = 0
this.freezeTimer = 0
this.x = args.x
this.sprite.x = args.x
this.sprite.z = 0
this.y = args.y
this.sprite.y = args.y
this.sprite.tileData = $90:E118
this.sprite.alternatePalette = 6
this.sprite.visible = true
}
main() {
{{ROM name|$7E:00DE}} += 0x14
this.cyclesUntilAnimUpdate = 7
this.init()
{{ROM name|$81:832C}}(this.spawnAnimation)
this.sprite.type = MONSTER
zombie.wanderInRandomDirection_Hard()
this.health = 4
this.dontTargetTimer = -1
{{ROM name|$80:8475}}(zombie.collisionHandler)
this.deathStatus = 0
while (this.deathStatus == 0) {
{{ROM name|$80:8353}}(2)
zombie.checkForTarget_Hard()
this.state()
this.updateAnimation()
}
if (this.deathStatus == 0xF5F5) {
{{RAM name|$7E:1F66}} += 1
{{ROM name|$81:83A3}}(this.deathAnimation, this.deathStatus, 0x90)
}
{{ROM name|$7E:00DE}} -= 0x14
while ({{ROM name|$7E:00DE}} < 0) { }
{{ROM name|$80:BE41}}(this.sprite)
}
spawnAnimation = {
{ 0xE31C, 14 }, { 0xE35D, 14 }, { 0xE39E, 10 }, { 0xE1D4, 6 },
{ 0, 0 }
}
deathAnimation = {
{ 0xDDC2, 5 }, { 0xDDDB, 5 }, { 0xDE0C, 5 }, { 0xDE3D, 5 },
{ 0xDE66, 5 }, { 0xDE8F, 5 }, { 0xDEA8, 5 }, { 0xDEC1, 5 },
{ 0xDED2, 5 }, { 0xDEE3, 5 }, { 0xDEF4, 5 }, { 0, 0 }
}


[[Category:Respawning monster]]
[[Category:Respawning monster]]

Latest revision as of 01:07, 29 June 2024

Monster data
HP 5
Points 100
Entity data
Entity pointer $81:8C17

The mummy is a respawning monster.

Behavior[edit]

Mummies share most of their code with the hard version of zombies, and thus behave identically. The only differences are their starting health and graphics.

RAM map[edit]

See Zombie#RAM map.

Pseudocode[edit]

updateAnimation() {
	this.cyclesUntilAnimUpdate -= 1
	if (this.cyclesUntilAnimUpdate == 0) {
		this.cyclesUntilAnimUpdate = 4
		this.animationFrame = (this.animationFrame + 1) % 4

		this.sprite.tileData.lowBytes = this.animations[this.direction][this.animationFrame]
		this.sprite.tileData.bank = 0x90
		if (this.direction < DOWN_LEFT) {
			this.sprite.flipX = false
		} else {
			this.sprite.flipX = true
		}
	}
}

animations = {
	{ 0xE1D4,  0xE1FD,  0xE226,  0xE24F }, 
	{ 0xE278,  0xE2A1,  0xE2CA,  0xE2F3 }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }, 
	{ 0xE1D4,  0xE1FD,  0xE226,  0xE24F }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }, 
	{ 0xE118,  0xE149,  0xE172,  0xE1A3 }
}

init() {
	createMonsterSprite()
	this.animationFrame = 0
	this.freezeTimer = 0
	this.x = args.x
	this.sprite.x = args.x
	this.sprite.z = 0
	this.y = args.y
	this.sprite.y = args.y
	this.sprite.tileData = $90:E118
	this.sprite.alternatePalette = 6
	this.sprite.visible = true
}

main() {
	$7E:00DE += 0x14
	this.cyclesUntilAnimUpdate = 7
	this.init()
	showAnimation(this.spawnAnimation)
	this.sprite.type = MONSTER
	zombie.wanderInRandomDirection_Hard()
	this.health = 4
	this.dontTargetTimer = -1
	setCollisionHandler(zombie.collisionHandler)
	this.deathStatus = 0

	while (this.deathStatus == 0) {
		waitFrames(2)
		zombie.checkForTarget_Hard()
		this.state()
		this.updateAnimation()
	}

	if (this.deathStatus == 0xF5F5) {
		mummiesKilled += 1
		showMonsterDeath(this.deathAnimation, this.deathStatus, 0x90)
	}

	$7E:00DE -= 0x14
	while ($7E:00DE < 0) { }
	deleteSprite(this.sprite)
}

spawnAnimation = {
	{ 0xE31C, 14 }, { 0xE35D, 14 }, { 0xE39E, 10 }, { 0xE1D4, 6 },
	{ 0, 0 }
}

deathAnimation = {
	{ 0xDDC2, 5 }, { 0xDDDB, 5 }, { 0xDE0C, 5 }, { 0xDE3D, 5 },
	{ 0xDE66, 5 }, { 0xDE8F, 5 }, { 0xDEA8, 5 }, { 0xDEC1, 5 },
	{ 0xDED2, 5 }, { 0xDEE3, 5 }, { 0xDEF4, 5 }, { 0, 0 }
}