isaacscript-common
Version:
Helper functions and features for IsaacScript mods.
135 lines (134 loc) • 6.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addHeart = addHeart;
exports.devilAngel = devilAngel;
exports.listEntities = listEntities;
exports.listGridEntities = listGridEntities;
exports.movePlayer = movePlayer;
exports.spawnTrapdoorOrCrawlSpace = spawnTrapdoorOrCrawlSpace;
exports.warpToRoomType = warpToRoomType;
exports.warpNextToRoomType = warpNextToRoomType;
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
const cachedClasses_1 = require("../../../../core/cachedClasses");
const HealthType_1 = require("../../../../enums/HealthType");
const direction_1 = require("../../../../functions/direction");
const gridEntities_1 = require("../../../../functions/gridEntities");
const levelGrid_1 = require("../../../../functions/levelGrid");
const logEntities_1 = require("../../../../functions/logEntities");
const playerHealth_1 = require("../../../../functions/playerHealth");
const roomData_1 = require("../../../../functions/roomData");
const rooms_1 = require("../../../../functions/rooms");
const types_1 = require("../../../../functions/types");
const roomTypeNames_1 = require("../../../../objects/roomTypeNames");
const DEFAULT_MOVE_UNITS = 0.5;
function addHeart(params, healthType) {
let numHearts = healthType === HealthType_1.HealthType.MAX_HEARTS ? 2 : 1;
if (params !== "") {
const num = (0, types_1.parseIntSafe)(params);
if (num === undefined) {
print("That is an invalid amount of hearts to add.");
return;
}
numHearts = num;
}
const player = Isaac.GetPlayer();
(0, playerHealth_1.addPlayerHealthType)(player, healthType, numHearts);
}
function devilAngel(useDevil) {
const level = cachedClasses_1.game.GetLevel();
const devilAngelRoomData = (0, roomData_1.getRoomData)(isaac_typescript_definitions_1.GridRoom.DEVIL);
if (devilAngelRoomData !== undefined) {
const roomType = devilAngelRoomData.Type;
const conflictingType = useDevil ? isaac_typescript_definitions_1.RoomType.ANGEL : isaac_typescript_definitions_1.RoomType.DEVIL;
if (roomType === conflictingType) {
// Delete the room data, which will allow the `Level.InitializeDevilAngelRoom` method to work.
const roomDescriptor = (0, roomData_1.getRoomDescriptor)(isaac_typescript_definitions_1.GridRoom.DEVIL);
roomDescriptor.Data = undefined;
}
}
if (useDevil) {
level.InitializeDevilAngelRoom(false, true);
}
else {
level.InitializeDevilAngelRoom(true, false);
}
(0, rooms_1.changeRoom)(isaac_typescript_definitions_1.GridRoom.DEVIL);
}
function listEntities(params, includeBackgroundEffects) {
let entityTypeFilter;
if (params !== "") {
entityTypeFilter = (0, types_1.parseIntSafe)(params);
if (entityTypeFilter === undefined) {
print("That is an invalid entity type to filter by.");
return;
}
}
(0, logEntities_1.logAllEntities)(includeBackgroundEffects, entityTypeFilter);
print('Logged the entities in the room to the "log.txt" file.');
}
function listGridEntities(params, includeWalls) {
let gridEntityTypeFilter;
if (params !== "") {
gridEntityTypeFilter = (0, types_1.parseIntSafe)(params);
if (gridEntityTypeFilter === undefined) {
print("That is an invalid grid entity type to filter by.");
return;
}
}
(0, logEntities_1.logAllGridEntities)(includeWalls, gridEntityTypeFilter);
print('Logged the grid entities in the room to the "log.txt" file.');
}
function movePlayer(params, direction) {
let amount = DEFAULT_MOVE_UNITS;
if (params !== "") {
const num = (0, types_1.parseIntSafe)(params);
if (num === undefined) {
print("That is an invalid amount of units to move.");
return;
}
amount = num;
}
const player = Isaac.GetPlayer();
const vector = (0, direction_1.directionToVector)(direction);
const modifiedVector = vector.mul(amount);
player.Position = player.Position.add(modifiedVector);
}
function spawnTrapdoorOrCrawlSpace(trapdoor) {
const room = cachedClasses_1.game.GetRoom();
const player = Isaac.GetPlayer();
const position = room.FindFreeTilePosition(player.Position, 0);
const gridEntityType = trapdoor
? isaac_typescript_definitions_1.GridEntityType.TRAPDOOR
: isaac_typescript_definitions_1.GridEntityType.CRAWL_SPACE;
(0, gridEntities_1.spawnGridEntity)(gridEntityType, position);
}
function warpToRoomType(roomType) {
const roomTypeName = roomTypeNames_1.ROOM_TYPE_NAMES[roomType];
const gridIndexes = (0, levelGrid_1.getRoomGridIndexesForType)(roomType);
const firstGridIndex = gridIndexes[0];
if (firstGridIndex === undefined) {
print(`There are no ${roomTypeName}s on this floor.`);
return;
}
(0, rooms_1.changeRoom)(firstGridIndex);
print(`Warped to room type: ${roomTypeName} (${roomType})`);
}
function warpNextToRoomType(roomType) {
const roomTypeName = roomTypeNames_1.ROOM_TYPE_NAMES[roomType];
const gridIndexes = (0, levelGrid_1.getRoomGridIndexesForType)(roomType);
const firstGridIndex = gridIndexes[0];
if (firstGridIndex === undefined) {
print(`There are no ${roomTypeName}s on this floor.`);
return;
}
const adjacentRoomGridIndexes = (0, levelGrid_1.getRoomAdjacentGridIndexes)(firstGridIndex);
for (const [_doorSlot, roomGridIndex] of adjacentRoomGridIndexes) {
const roomData = (0, roomData_1.getRoomData)(roomGridIndex);
if (roomData !== undefined && roomData.Type === isaac_typescript_definitions_1.RoomType.DEFAULT) {
(0, rooms_1.changeRoom)(roomGridIndex);
print(`Warped next to room type: ${roomTypeName} (${roomType})`);
return;
}
}
print(`Failed to find the room next to room type: ${roomTypeName} (${roomType})`);
}