void scriptAddToInventory(char *name, int quiet) { int i; Entity *e; e = addPermanentItem(name, 0, 0); for (i=0;i<MAX_INVENTORY_ITEMS;i++) { if (inventory.item[i].inUse == FALSE) { inventory.item[i] = *e; inventory.item[i].face = RIGHT; inventory.item[i].thinkTime = 0; setEntityAnimationByID(&inventory.item[i], 0); if (quiet == FALSE) { setInfoBoxMessage(60, 255, 255, 255, _("Picked up %s"), _(inventory.item[i].objectiveName)); } break; } } e->inUse = FALSE; }
static void blendFinish() { Entity *e; self->thinkTime--; if (self->thinkTime <= 0) { self->health = 0; stopSound(self->mental); playSoundToMap("sound/item/ping", -1, self->x, self->y, 0); e = addPermanentItem(self->requires, self->x + self->w / 2, self->y + self->h / 2); e->x -= e->w / 2; e->dirY = ITEM_JUMP_HEIGHT; self->action = &entityWait; setEntityAnimation(self, "ATTACK_1"); } }
static void addLegendarySword() { Entity *e; e = addPermanentItem("weapon/legendary_sword", 0, 0); e->x = self->x; e->y = self->y; e->flags |= DO_NOT_PERSIST; e->action = &swordWait; e->touch = NULL; e->draw = &drawLoopingAnimationToMap; e->head = self; setEntityAnimation(e, "STICK_IN_CHAOS"); self->action = &initialise; }
Entity *addEntityFromResource(char *type, char *name, int startX, int startY) { Entity *e = NULL; if (strcmpignorecase(type, "ITEM") == 0 || strcmpignorecase(type, "SHIELD") == 0 || strcmpignorecase(type, "WEAPON") == 0) { e = addPermanentItem(name, startX, startY); } else if (strcmpignorecase(type, "TEMP_ITEM") == 0 || strcmpignorecase(type, "HEALTH") == 0) { e = addTemporaryItem(name, startX, startY, LEFT, 0, 0); } else if (strcmpignorecase(type, "PLAYER") == 0) { e = loadPlayer(startX, startY, NULL); } else if (strcmpignorecase(type, "PLAYER_WEAPON") == 0) { setPlayerWeaponName(name); } else if (strcmpignorecase(type, "PLAYER_SHIELD") == 0) { setPlayerShieldName(name); } else if (strcmpignorecase(type, "KEY_ITEM") == 0) { e = addKeyItem(name, startX, startY); } else if (strcmpignorecase(type, "ENEMY") == 0) { e = addEnemy(name, startX, startY); } else if (strcmpignorecase(type, "NPC") == 0) { e = addNPC(name, startX, startY); } else if (strcmpignorecase(type, "AUTO_LIFT") == 0 || strcmpignorecase(type, "MANUAL_LIFT") == 0) { e = addLift(name, startX, startY, getEntityTypeByName(type)); } else if (strcmpignorecase(type, "SPAWNER") == 0) { e = addSpawner(startX, startY, name); } else if (strcmpignorecase(type, "TARGET") == 0) { addTarget(startX, startY, name); } else if (strcmpignorecase(type, "PRESSURE_PLATE") == 0) { e = addPressurePlate(name, startX, startY); } else if (strcmpignorecase(type, "TELEPORTER") == 0) { e = addTeleporter(name, startX, startY); } else if (strcmpignorecase(type, "AUTO_DOOR") == 0 || strcmpignorecase(type, "MANUAL_DOOR") == 0) { e = addDoor(name, startX, startY, getEntityTypeByName(type)); } else if (strcmpignorecase(type, "WEAK_WALL") == 0) { e = addWeakWall(name, startX, startY); } else if (strcmpignorecase(type, "TRAP_DOOR") == 0) { e = addTrapDoor(name, startX, startY); } else if (strcmpignorecase(type, "CONVEYOR_BELT") == 0) { e = addConveyorBelt(name, startX, startY); } else if (strcmpignorecase(type, "SWITCH") == 0) { e = addSwitch(name, startX, startY); } else if (strcmpignorecase(type, "SCRIPT_LINE_DEF") == 0 || strcmpignorecase(type, "LINE_DEF") == 0) { e = addLineDef(type, name, startX, startY); } else if (strcmpignorecase(type, "LEVEL_EXIT") == 0) { e = addLevelExit(name, startX, startY); } else if (strcmpignorecase(type, "SAVE_POINT") == 0) { /* Save points don't spawn for replays */ if (game.gameType == NORMAL) { e = addSavePoint(startX, startY); } } else if (strcmpignorecase(type, "TRIGGER") == 0) { addTriggerFromResource(key, value); } else if (strcmpignorecase(type, "GLOBAL_TRIGGER") == 0) { addGlobalTriggerFromResource(key, value); } else if (strcmpignorecase(type, "MAP_TRIGGER") == 0) { addMapTriggerFromResource(key, value); } else if (strcmpignorecase(type, "OBJECTIVE") == 0) { addObjectiveFromResource(key, value); } else if (strcmpignorecase(type, "ACTION_POINT") == 0) { e = addActionPoint(name, startX, startY); } else if (strcmpignorecase(type, "FALLING_PLATFORM") == 0) { e = addFallingPlatform(startX, startY, name); } else if (strcmpignorecase(type, "VANISHING_PLATFORM") == 0) { e = addVanishingPlatform(startX, startY, name); } else if (strcmpignorecase(type, "ANTI_GRAVITY") == 0) { e = addAntiGravityField(startX, startY, name); } else { showErrorAndExit("Unknown Entity type %s", type); } return e; }
static void takeDamage(Entity *other, int damage) { Entity *e, *temp; if (!(self->flags & INVULNERABLE)) { if (strcmpignorecase(other->name, "weapon/pickaxe") == 0) { self->health--; if (self->health > 0) { setCustomAction(self, &flashWhite, 6, 0, 0); } else { self->health = 0; self->touch = NULL; e = addPermanentItem("item/purple_gem", self->x + self->w / 2, self->y); e->dirX = other->face == LEFT ? -6 : 6; e->dirY = ITEM_JUMP_HEIGHT; self->active = FALSE; setEntityAnimation(self, "WALK"); fireTrigger(self->objectiveName); self->mental = 15; } } else { playSoundToMap("sound/common/dink", -1, self->x, self->y, 0); if (other->reactToBlock != NULL) { temp = self; self = other; self->reactToBlock(temp); self = temp; } damage = 0; if (other->type != PROJECTILE && prand() % 10 == 0) { setInfoBoxMessage(60, 255, 255, 255, _("This weapon is not having any effect...")); } } setCustomAction(self, &invulnerableNoFlash, HIT_INVULNERABLE_TIME, 0, 0); } }