From c30b724d83cbbbd8a86b9e998307eb1d0f1a0f9d Mon Sep 17 00:00:00 2001 From: pmje2o5iu <2795177278@qq.com> Date: Mon, 11 Dec 2023 15:10:44 +0800 Subject: [PATCH] Update minion.c --- src/NetHack_3.7/src/minion.c | 46 ++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/NetHack_3.7/src/minion.c b/src/NetHack_3.7/src/minion.c index f7b99bb..cb4e158 100644 --- a/src/NetHack_3.7/src/minion.c +++ b/src/NetHack_3.7/src/minion.c @@ -16,22 +16,22 @@ static const int elementals[4] = { void newemin(struct monst *mtmp) { - if (!mtmp->mextra) - mtmp->mextra = newmextra(); - if (!EMIN(mtmp)) { - EMIN(mtmp) = (struct emin *) alloc(sizeof(struct emin)); - (void) memset((genericptr_t) EMIN(mtmp), 0, sizeof(struct emin)); + if (!mtmp->mextra) // If the monster does not have an mextra structure + mtmp->mextra = newmextra(); // Create a new mextra structure for the monster + if (!EMIN(mtmp)) { // If the monster does not have an emin structure + EMIN(mtmp) = (struct emin *) alloc(sizeof(struct emin)); // Allocate memory for the emin structure + (void) memset((genericptr_t) EMIN(mtmp), 0, sizeof(struct emin)); // Initialize the emin structure with zeros } } void free_emin(struct monst *mtmp) { - if (mtmp->mextra && EMIN(mtmp)) { - free((genericptr_t) EMIN(mtmp)); - EMIN(mtmp) = (struct emin *) 0; + if (mtmp->mextra && EMIN(mtmp)) { // If the monster has an mextra structure and an emin structure + free((genericptr_t) EMIN(mtmp)); // Free the memory allocated for the emin structure + EMIN(mtmp) = (struct emin *) 0; // Set the emin pointer to null } - mtmp->isminion = 0; + mtmp->isminion = 0; // Set the isminion flag to 0 to indicate that the monster is not a minion } /* count the number of monsters on the level */ @@ -42,15 +42,15 @@ monster_census(boolean spotted) /* seen|sensed vs all */ int count = 0; for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { - if (DEADMONSTER(mtmp)) + if (DEADMONSTER(mtmp)) // If the monster is dead, skip to the next monster continue; - if (mtmp->isgd && mtmp->mx == 0) + if (mtmp->isgd && mtmp->mx == 0) // If the monster is a guardian and is not on the map, skip to the next monster continue; - if (spotted && !canspotmon(mtmp)) + if (spotted && !canspotmon(mtmp)) // If spotted flag is true and the monster is not visible, skip to the next monster continue; - ++count; + ++count; // Increment the count } - return count; + return count; // Return the final count } /* mon summons a monster */ @@ -133,11 +133,11 @@ msummon(struct monst *mon) * If this daemon is unique and being re-summoned (the only way we * could get this far with an extinct dtype), try another. */ - if ((gm.mvitals[dtype].mvflags & G_GONE) != 0) { - dtype = ndemon(atyp); - if (dtype == NON_PM) - return 0; - } + if ((gm.mvitals[dtype].mvflags & G_GONE) != 0) { // Check if the monster type is flagged as gone + dtype = ndemon(atyp); // Generate a new demon monster type + if (dtype == NON_PM) // If the generated type is not a valid monster type + return 0; // Return 0 to indicate failure +} /* some candidates can generate a group of monsters, so simple count of non-null makemon() result is not sufficient */ @@ -426,12 +426,12 @@ lminion(void) struct permonst *ptr; for (tryct = 0; tryct < 20; tryct++) { - ptr = mkclass(S_ANGEL, 0); - if (ptr && !is_lord(ptr)) - return monsndx(ptr); + ptr = mkclass(S_ANGEL, 0); // Generate a random monster class of angels + if (ptr && !is_lord(ptr)) // If a valid non-lord monster is generated + return monsndx(ptr); // Return the monster number } - return NON_PM; + return NON_PM; // Return NON_PM if no valid non-lord monster can be generated after 20 tries } int