Mummy: Difference between revisions

From ZAMN Hacking
Content deleted Content added
Created page with "{{Infobox Monster|img=Mummy.png|hp=5|points=100}} {{Infobox Entity|entity_pointer=$81:8C17}} The mummy is a respawning monster. Category:Respawning monster Category:Monster Category:Entity"
 
No edit summary
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:
{{Infobox Entity|entity_pointer=$81:8C17}}
{{Infobox Entity|entity_pointer=$81:8C17}}
The mummy is a [[respawning monster]].
The mummy is a [[respawning monster]].

== Behavior ==

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

== 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 = 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
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()
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]]
[[Category:Monster]]
[[Category:Entity]]

Revision as of 20:17, 13 July 2024

Monster data
HP 5
Points 100
Special {{{special}}}
Resists {{{resists}}}
Weak to {{{weak_to}}}
Entity data
Entity pointer $81:8C17

The mummy is a respawning monster.

Behavior

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

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 = 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
	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()
		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 }
}