From 7fac0d3be558f642548633e84937b0d214baaa89 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Mon, 12 Aug 2019 18:22:48 +0200 Subject: [PATCH] Parse mob data --- lihzahrd/entities/__init__.py | 5 + lihzahrd/entities/entitytype.py | 654 +++++++++++++++++++++++++++++ lihzahrd/entities/mob.py | 18 + lihzahrd/{npcs => entities}/npc.py | 14 +- lihzahrd/fileutils/pointers.py | 8 +- lihzahrd/npcs/__init__.py | 3 - lihzahrd/tiles/blocktype.py | 1 - lihzahrd/world.py | 36 +- 8 files changed, 724 insertions(+), 15 deletions(-) create mode 100644 lihzahrd/entities/__init__.py create mode 100644 lihzahrd/entities/entitytype.py create mode 100644 lihzahrd/entities/mob.py rename lihzahrd/{npcs => entities}/npc.py (50%) delete mode 100644 lihzahrd/npcs/__init__.py diff --git a/lihzahrd/entities/__init__.py b/lihzahrd/entities/__init__.py new file mode 100644 index 0000000..17b8aa4 --- /dev/null +++ b/lihzahrd/entities/__init__.py @@ -0,0 +1,5 @@ +from .npc import NPC +from .mob import Mob +from .entitytype import EntityType + +__all__ = ["NPC", "Mob", "EntityType"] diff --git a/lihzahrd/entities/entitytype.py b/lihzahrd/entities/entitytype.py new file mode 100644 index 0000000..ca4b035 --- /dev/null +++ b/lihzahrd/entities/entitytype.py @@ -0,0 +1,654 @@ +import enum + + +class EntityType(enum.IntEnum): + """An enumeration of all entity types. + + From https://github.com/tModLoader/tModLoader/wiki/Vanilla-NPC-IDs .""" + BIG_HORNET_STINGY = -65 + LITTLE_HORNET_STINGY = -64 + BIG_HORNET_SPIKEY = -63 + LITTLE_HORNET_SPIKEY = -62 + BIG_HORNET_LEAFY = -61 + LITTLE_HORNET_LEAFY = -60 + BIG_HORNET_HONEY = -59 + LITTLE_HORNET_HONEY = -58 + BIG_HORNET_FATTY = -57 + LITTLE_HORNET_FATTY = -56 + BIG_RAIN_ZOMBIE = -55 + SMALL_RAIN_ZOMBIE = -54 + BIG_PANTLESS_SKELETON = -53 + SMALL_PANTLESS_SKELETON = -52 + BIG_MISASSEMBLED_SKELETON = -51 + SMALL_MISASSEMBLED_SKELETON = -50 + BIG_HEADACHE_SKELETON = -49 + SMALL_HEADACHE_SKELETON = -48 + BIG_SKELETON = -47 + SMALL_SKELETON = -46 + BIG_FEMALE_ZOMBIE = -45 + SMALL_FEMALE_ZOMBIE = -44 + DEMON_EYE2 = -43 + PURPLE_EYE2 = -42 + GREEN_EYE2 = -41 + DIALATED_EYE2 = -40 + SLEEPY_EYE2 = -39 + CATARACT_EYE2 = -38 + BIG_TWIGGY_ZOMBIE = -37 + SMALL_TWIGGY_ZOMBIE = -36 + BIG_SWAMP_ZOMBIE = -35 + SMALL_SWAMP_ZOMBIE = -34 + BIG_SLIMED_ZOMBIE = -33 + SMALL_SLIMED_ZOMBIE = -32 + BIG_PINCUSHION_ZOMBIE = -31 + SMALL_PINCUSHION_ZOMBIE = -30 + BIG_BALD_ZOMBIE = -29 + SMALL_BALD_ZOMBIE = -28 + BIG_ZOMBIE = -27 + SMALL_ZOMBIE = -26 + BIG_CRIMSLIME = -25 + LITTLE_CRIMSLIME = -24 + BIG_CRIMERA = -23 + LITTLE_CRIMERA = -22 + GIANT_MOSS_HORNET = -21 + BIG_MOSS_HORNET = -20 + LITTLE_MOSS_HORNET = -19 + TINY_MOSS_HORNET = -18 + BIG_STINGER = -17 + LITTLE_STINGER = -16 + HEAVY_SKELETON = -15 + BIG_BONED = -14 + SHORT_BONES = -13 + BIG_EATER = -12 + LITTLE_EATER = -11 + JUNGLE_SLIME = -10 + YELLOW_SLIME = -9 + RED_SLIME = -8 + PURPLE_SLIME = -7 + BLACK_SLIME = -6 + BABY_SLIME = -5 + PINKY = -4 + GREEN_SLIME = -3 + SLIMER2 = -2 + SLIMELING = -1 + BLUE_SLIME = 1 + DEMON_EYE = 2 + ZOMBIE = 3 + EYEOF_CTHULHU = 4 + SERVANTOF_CTHULHU = 5 + EATEROF_SOULS = 6 + DEVOURER_HEAD = 7 + DEVOURER_BODY = 8 + DEVOURER_TAIL = 9 + GIANT_WORM_HEAD = 10 + GIANT_WORM_BODY = 11 + GIANT_WORM_TAIL = 12 + EATEROF_WORLDS_HEAD = 13 + EATEROF_WORLDS_BODY = 14 + EATEROF_WORLDS_TAIL = 15 + MOTHER_SLIME = 16 + MERCHANT = 17 + NURSE = 18 + ARMS_DEALER = 19 + DRYAD = 20 + SKELETON = 21 + GUIDE = 22 + METEOR_HEAD = 23 + FIRE_IMP = 24 + BURNING_SPHERE = 25 + GOBLIN_PEON = 26 + GOBLIN_THIEF = 27 + GOBLIN_WARRIOR = 28 + GOBLIN_SORCERER = 29 + CHAOS_BALL = 30 + ANGRY_BONES = 31 + DARK_CASTER = 32 + WATER_SPHERE = 33 + CURSED_SKULL = 34 + SKELETRON_HEAD = 35 + SKELETRON_HAND = 36 + OLD_MAN = 37 + DEMOLITIONIST = 38 + BONE_SERPENT_HEAD = 39 + BONE_SERPENT_BODY = 40 + BONE_SERPENT_TAIL = 41 + HORNET = 42 + MAN_EATER = 43 + UNDEAD_MINER = 44 + TIM = 45 + BUNNY = 46 + CORRUPT_BUNNY = 47 + HARPY = 48 + CAVE_BAT = 49 + KING_SLIME = 50 + JUNGLE_BAT = 51 + DOCTOR_BONES = 52 + THE_GROOM = 53 + CLOTHIER = 54 + GOLDFISH = 55 + SNATCHER = 56 + CORRUPT_GOLDFISH = 57 + PIRANHA = 58 + LAVA_SLIME = 59 + HELLBAT = 60 + VULTURE = 61 + DEMON = 62 + BLUE_JELLYFISH = 63 + PINK_JELLYFISH = 64 + SHARK = 65 + VOODOO_DEMON = 66 + CRAB = 67 + DUNGEON_GUARDIAN = 68 + ANTLION = 69 + SPIKE_BALL = 70 + DUNGEON_SLIME = 71 + BLAZING_WHEEL = 72 + GOBLIN_SCOUT = 73 + BIRD = 74 + PIXIE = 75 + NONE2 = 76 + ARMORED_SKELETON = 77 + MUMMY = 78 + DARK_MUMMY = 79 + LIGHT_MUMMY = 80 + CORRUPT_SLIME = 81 + WRAITH = 82 + CURSED_HAMMER = 83 + ENCHANTED_SWORD = 84 + MIMIC = 85 + UNICORN = 86 + WYVERN_HEAD = 87 + WYVERN_LEGS = 88 + WYVERN_BODY = 89 + WYVERN_BODY2 = 90 + WYVERN_BODY3 = 91 + WYVERN_TAIL = 92 + GIANT_BAT = 93 + CORRUPTOR = 94 + DIGGER_HEAD = 95 + DIGGER_BODY = 96 + DIGGER_TAIL = 97 + SEEKER_HEAD = 98 + SEEKER_BODY = 99 + SEEKER_TAIL = 100 + CLINGER = 101 + ANGLER_FISH = 102 + GREEN_JELLYFISH = 103 + WEREWOLF = 104 + BOUND_GOBLIN = 105 + BOUND_WIZARD = 106 + GOBLIN_TINKERER = 107 + WIZARD = 108 + CLOWN = 109 + SKELETON_ARCHER = 110 + GOBLIN_ARCHER = 111 + VILE_SPIT = 112 + WALLOF_FLESH = 113 + WALLOF_FLESH_EYE = 114 + THE_HUNGRY = 115 + THE_HUNGRY_II = 116 + LEECH_HEAD = 117 + LEECH_BODY = 118 + LEECH_TAIL = 119 + CHAOS_ELEMENTAL = 120 + SLIMER = 121 + GASTROPOD = 122 + BOUND_MECHANIC = 123 + MECHANIC = 124 + RETINAZER = 125 + SPAZMATISM = 126 + SKELETRON_PRIME = 127 + PRIME_CANNON = 128 + PRIME_SAW = 129 + PRIME_VICE = 130 + PRIME_LASER = 131 + BALD_ZOMBIE = 132 + WANDERING_EYE = 133 + THE_DESTROYER = 134 + THE_DESTROYER_BODY = 135 + THE_DESTROYER_TAIL = 136 + ILLUMINANT_BAT = 137 + ILLUMINANT_SLIME = 138 + PROBE = 139 + POSSESSED_ARMOR = 140 + TOXIC_SLUDGE = 141 + SANTA_CLAUS = 142 + SNOWMAN_GANGSTA = 143 + MISTER_STABBY = 144 + SNOW_BALLA = 145 + NONE3 = 146 + ICE_SLIME = 147 + PENGUIN = 148 + PENGUIN_BLACK = 149 + ICE_BAT = 150 + LAVABAT = 151 + GIANT_FLYING_FOX = 152 + GIANT_TORTOISE = 153 + ICE_TORTOISE = 154 + WOLF = 155 + RED_DEVIL = 156 + ARAPAIMA = 157 + VAMPIRE_BAT = 158 + VAMPIRE = 159 + TRUFFLE = 160 + ZOMBIE_ESKIMO = 161 + FRANKENSTEIN = 162 + BLACK_RECLUSE = 163 + WALL_CREEPER = 164 + WALL_CREEPER_WALL = 165 + SWAMP_THING = 166 + UNDEAD_VIKING = 167 + CORRUPT_PENGUIN = 168 + ICE_ELEMENTAL = 169 + PIGRON_CORRUPTION = 170 + PIGRON_HALLOW = 171 + RUNE_WIZARD = 172 + CRIMERA = 173 + HERPLING = 174 + ANGRY_TRAPPER = 175 + MOSS_HORNET = 176 + DERPLING = 177 + STEAMPUNKER = 178 + CRIMSON_AXE = 179 + PIGRON_CRIMSON = 180 + FACE_MONSTER = 181 + FLOATY_GROSS = 182 + CRIMSLIME = 183 + SPIKED_ICE_SLIME = 184 + SNOW_FLINX = 185 + PINCUSHION_ZOMBIE = 186 + SLIMED_ZOMBIE = 187 + SWAMP_ZOMBIE = 188 + TWIGGY_ZOMBIE = 189 + CATARACT_EYE = 190 + SLEEPY_EYE = 191 + DIALATED_EYE = 192 + GREEN_EYE = 193 + PURPLE_EYE = 194 + LOST_GIRL = 195 + NYMPH = 196 + ARMORED_VIKING = 197 + LIHZAHRD = 198 + LIHZAHRD_CRAWLER = 199 + FEMALE_ZOMBIE = 200 + HEADACHE_SKELETON = 201 + MISASSEMBLED_SKELETON = 202 + PANTLESS_SKELETON = 203 + SPIKED_JUNGLE_SLIME = 204 + MOTH = 205 + ICY_MERMAN = 206 + DYE_TRADER = 207 + PARTY_GIRL = 208 + CYBORG = 209 + BEE = 210 + BEE_SMALL = 211 + PIRATE_DECKHAND = 212 + PIRATE_CORSAIR = 213 + PIRATE_DEADEYE = 214 + PIRATE_CROSSBOWER = 215 + PIRATE_CAPTAIN = 216 + COCHINEAL_BEETLE = 217 + CYAN_BEETLE = 218 + LAC_BEETLE = 219 + SEA_SNAIL = 220 + SQUID = 221 + QUEEN_BEE = 222 + ZOMBIE_RAINCOAT = 223 + FLYING_FISH = 224 + UMBRELLA_SLIME = 225 + FLYING_SNAKE = 226 + PAINTER = 227 + WITCH_DOCTOR = 228 + PIRATE = 229 + GOLDFISH_WALKER = 230 + HORNET_FATTY = 231 + HORNET_HONEY = 232 + HORNET_LEAFY = 233 + HORNET_SPIKEY = 234 + HORNET_STINGY = 235 + JUNGLE_CREEPER = 236 + JUNGLE_CREEPER_WALL = 237 + BLACK_RECLUSE_WALL = 238 + BLOOD_CRAWLER = 239 + BLOOD_CRAWLER_WALL = 240 + BLOOD_FEEDER = 241 + BLOOD_JELLY = 242 + ICE_GOLEM = 243 + RAINBOW_SLIME = 244 + GOLEM = 245 + GOLEM_HEAD = 246 + GOLEM_FIST_LEFT = 247 + GOLEM_FIST_RIGHT = 248 + GOLEM_HEAD_FREE = 249 + ANGRY_NIMBUS = 250 + EYEZOR = 251 + PARROT = 252 + REAPER = 253 + ZOMBIE_MUSHROOM = 254 + ZOMBIE_MUSHROOM_HAT = 255 + FUNGO_FISH = 256 + ANOMURA_FUNGUS = 257 + MUSHI_LADYBUG = 258 + FUNGI_BULB = 259 + GIANT_FUNGI_BULB = 260 + FUNGI_SPORE = 261 + PLANTERA = 262 + PLANTERAS_HOOK = 263 + PLANTERAS_TENTACLE = 264 + SPORE = 265 + BRAINOF_CTHULHU = 266 + CREEPER = 267 + ICHOR_STICKER = 268 + RUSTY_ARMORED_BONES_AXE = 269 + RUSTY_ARMORED_BONES_FLAIL = 270 + RUSTY_ARMORED_BONES_SWORD = 271 + RUSTY_ARMORED_BONES_SWORD_NO_ARMOR = 272 + BLUE_ARMORED_BONES = 273 + BLUE_ARMORED_BONES_MACE = 274 + BLUE_ARMORED_BONES_NO_PANTS = 275 + BLUE_ARMORED_BONES_SWORD = 276 + HELL_ARMORED_BONES = 277 + HELL_ARMORED_BONES_SPIKE_SHIELD = 278 + HELL_ARMORED_BONES_MACE = 279 + HELL_ARMORED_BONES_SWORD = 280 + RAGGED_CASTER = 281 + RAGGED_CASTER_OPEN_COAT = 282 + NECROMANCER = 283 + NECROMANCER_ARMORED = 284 + DIABOLIST_RED = 285 + DIABOLIST_WHITE = 286 + BONE_LEE = 287 + DUNGEON_SPIRIT = 288 + GIANT_CURSED_SKULL = 289 + PALADIN = 290 + SKELETON_SNIPER = 291 + TACTICAL_SKELETON = 292 + SKELETON_COMMANDO = 293 + ANGRY_BONES_BIG = 294 + ANGRY_BONES_BIG_MUSCLE = 295 + ANGRY_BONES_BIG_HELMET = 296 + BIRD_BLUE = 297 + BIRD_RED = 298 + SQUIRREL = 299 + MOUSE = 300 + RAVEN = 301 + SLIME_MASKED = 302 + BUNNY_SLIMED = 303 + HOPPIN_JACK = 304 + SCARECROW1 = 305 + SCARECROW2 = 306 + SCARECROW3 = 307 + SCARECROW4 = 308 + SCARECROW5 = 309 + SCARECROW6 = 310 + SCARECROW7 = 311 + SCARECROW8 = 312 + SCARECROW9 = 313 + SCARECROW10 = 314 + HEADLESS_HORSEMAN = 315 + GHOST = 316 + DEMON_EYE_OWL = 317 + DEMON_EYE_SPACESHIP = 318 + ZOMBIE_DOCTOR = 319 + ZOMBIE_SUPERMAN = 320 + ZOMBIE_PIXIE = 321 + SKELETON_TOP_HAT = 322 + SKELETON_ASTONAUT = 323 + SKELETON_ALIEN = 324 + MOURNING_WOOD = 325 + SPLINTERLING = 326 + PUMPKING = 327 + PUMPKING_BLADE = 328 + HELLHOUND = 329 + POLTERGEIST = 330 + ZOMBIE_XMAS = 331 + ZOMBIE_SWEATER = 332 + SLIME_RIBBON_WHITE = 333 + SLIME_RIBBON_YELLOW = 334 + SLIME_RIBBON_GREEN = 335 + SLIME_RIBBON_RED = 336 + BUNNY_XMAS = 337 + ZOMBIE_ELF = 338 + ZOMBIE_ELF_BEARD = 339 + ZOMBIE_ELF_GIRL = 340 + PRESENT_MIMIC = 341 + GINGERBREAD_MAN = 342 + YETI = 343 + EVERSCREAM = 344 + ICE_QUEEN = 345 + SANTA_NK1 = 346 + ELF_COPTER = 347 + NUTCRACKER = 348 + NUTCRACKER_SPINNING = 349 + ELF_ARCHER = 350 + KRAMPUS = 351 + FLOCKO = 352 + STYLIST = 353 + WEBBED_STYLIST = 354 + FIREFLY = 355 + BUTTERFLY = 356 + WORM = 357 + LIGHTNING_BUG = 358 + SNAIL = 359 + GLOWING_SNAIL = 360 + FROG = 361 + DUCK = 362 + DUCK2 = 363 + DUCK_WHITE = 364 + DUCK_WHITE2 = 365 + SCORPION_BLACK = 366 + SCORPION = 367 + TRAVELLING_MERCHANT = 368 + ANGLER = 369 + DUKE_FISHRON = 370 + DETONATING_BUBBLE = 371 + SHARKRON = 372 + SHARKRON2 = 373 + TRUFFLE_WORM = 374 + TRUFFLE_WORM_DIGGER = 375 + SLEEPING_ANGLER = 376 + GRASSHOPPER = 377 + CHATTERING_TEETH_BOMB = 378 + CULTIST_ARCHER_BLUE = 379 + CULTIST_ARCHER_WHITE = 380 + BRAIN_SCRAMBLER = 381 + RAY_GUNNER = 382 + MARTIAN_OFFICER = 383 + FORCE_BUBBLE = 384 + GRAY_GRUNT = 385 + MARTIAN_ENGINEER = 386 + MARTIAN_TURRET = 387 + MARTIAN_DRONE = 388 + GIGA_ZAPPER = 389 + SCUTLIX_RIDER = 390 + SCUTLIX = 391 + MARTIAN_SAUCER = 392 + MARTIAN_SAUCER_TURRET = 393 + MARTIAN_SAUCER_CANNON = 394 + MARTIAN_SAUCER_CORE = 395 + MOON_LORD_HEAD = 396 + MOON_LORD_HAND = 397 + MOON_LORD_CORE = 398 + MARTIAN_PROBE = 399 + MOON_LORD_FREE_EYE = 400 + MOON_LORD_LEECH_BLOB = 401 + STARDUST_WORM_HEAD = 402 + STARDUST_WORM_BODY = 403 + STARDUST_WORM_TAIL = 404 + STARDUST_CELL_BIG = 405 + STARDUST_CELL_SMALL = 406 + STARDUST_JELLYFISH_BIG = 407 + STARDUST_JELLYFISH_SMALL = 408 + STARDUST_SPIDER_BIG = 409 + STARDUST_SPIDER_SMALL = 410 + STARDUST_SOLDIER = 411 + SOLAR_CRAWLTIPEDE_HEAD = 412 + SOLAR_CRAWLTIPEDE_BODY = 413 + SOLAR_CRAWLTIPEDE_TAIL = 414 + SOLAR_DRAKOMIRE = 415 + SOLAR_DRAKOMIRE_RIDER = 416 + SOLAR_SROLLER = 417 + SOLAR_CORITE = 418 + SOLAR_SOLENIAN = 419 + NEBULA_BRAIN = 420 + NEBULA_HEADCRAB = 421 + NEBULA_BEAST = 423 + NEBULA_SOLDIER = 424 + VORTEX_RIFLEMAN = 425 + VORTEX_HORNET_QUEEN = 426 + VORTEX_HORNET = 427 + VORTEX_LARVA = 428 + VORTEX_SOLDIER = 429 + ARMED_ZOMBIE = 430 + ARMED_ZOMBIE_ESKIMO = 431 + ARMED_ZOMBIE_PINCUSSION = 432 + ARMED_ZOMBIE_SLIMED = 433 + ARMED_ZOMBIE_SWAMP = 434 + ARMED_ZOMBIE_TWIGGY = 435 + ARMED_ZOMBIE_CENX = 436 + CULTIST_TABLET = 437 + CULTIST_DEVOTE = 438 + CULTIST_BOSS = 439 + CULTIST_BOSS_CLONE = 440 + GOLD_BIRD = 442 + GOLD_BUNNY = 443 + GOLD_BUTTERFLY = 444 + GOLD_FROG = 445 + GOLD_GRASSHOPPER = 446 + GOLD_MOUSE = 447 + GOLD_WORM = 448 + BONE_THROWING_SKELETON = 449 + BONE_THROWING_SKELETON2 = 450 + BONE_THROWING_SKELETON3 = 451 + BONE_THROWING_SKELETON4 = 452 + SKELETON_MERCHANT = 453 + CULTIST_DRAGON_HEAD = 454 + CULTIST_DRAGON_BODY1 = 455 + CULTIST_DRAGON_BODY2 = 456 + CULTIST_DRAGON_BODY3 = 457 + CULTIST_DRAGON_BODY4 = 458 + CULTIST_DRAGON_TAIL = 459 + BUTCHER = 460 + CREATURE_FROM_THE_DEEP = 461 + FRITZ = 462 + NAILHEAD = 463 + CRIMSON_BUNNY = 464 + CRIMSON_GOLDFISH = 465 + PSYCHO = 466 + DEADLY_SPHERE = 467 + DR_MAN_FLY = 468 + THE_POSSESSED = 469 + CRIMSON_PENGUIN = 470 + GOBLIN_SUMMONER = 471 + SHADOW_FLAME_APPARITION = 472 + BIG_MIMIC_CORRUPTION = 473 + BIG_MIMIC_CRIMSON = 474 + BIG_MIMIC_HALLOW = 475 + BIG_MIMIC_JUNGLE = 476 + MOTHRON = 477 + MOTHRON_EGG = 478 + MOTHRON_SPAWN = 479 + MEDUSA = 480 + GREEK_SKELETON = 481 + GRANITE_GOLEM = 482 + GRANITE_FLYER = 483 + ENCHANTED_NIGHTCRAWLER = 484 + GRUBBY = 485 + SLUGGY = 486 + BUGGY = 487 + TARGET_DUMMY = 488 + BLOOD_ZOMBIE = 489 + DRIPPLER = 490 + PIRATE_SHIP = 491 + PIRATE_SHIP_CANNON = 492 + LUNAR_TOWER_STARDUST = 493 + CRAWDAD = 494 + CRAWDAD2 = 495 + GIANT_SHELLY = 496 + GIANT_SHELLY2 = 497 + SALAMANDER = 498 + SALAMANDER2 = 499 + SALAMANDER3 = 500 + SALAMANDER4 = 501 + SALAMANDER5 = 502 + SALAMANDER6 = 503 + SALAMANDER7 = 504 + SALAMANDER8 = 505 + SALAMANDER9 = 506 + LUNAR_TOWER_NEBULA = 507 + LUNAR_TOWER_VORTEX = 422 + TAX_COLLECTOR = 441 + WALKING_ANTLION = 508 + FLYING_ANTLION = 509 + DUNE_SPLICER_HEAD = 510 + DUNE_SPLICER_BODY = 511 + DUNE_SPLICER_TAIL = 512 + TOMB_CRAWLER_HEAD = 513 + TOMB_CRAWLER_BODY = 514 + TOMB_CRAWLER_TAIL = 515 + SOLAR_FLARE = 516 + LUNAR_TOWER_SOLAR = 517 + SOLAR_SPEARMAN = 518 + SOLAR_GOOP = 519 + MARTIAN_WALKER = 520 + ANCIENT_CULTIST_SQUIDHEAD = 521 + ANCIENT_LIGHT = 522 + ANCIENT_DOOM = 523 + DESERT_GHOUL = 524 + DESERT_GHOUL_CORRUPTION = 525 + DESERT_GHOUL_CRIMSON = 526 + DESERT_GHOUL_HALLOW = 527 + DESERT_LAMIA_LIGHT = 528 + DESERT_LAMIA_DARK = 529 + DESERT_SCORPION_WALK = 530 + DESERT_SCORPION_WALL = 531 + DESERT_BEAST = 532 + DESERT_DJINN = 533 + DEMON_TAX_COLLECTOR = 534 + SLIME_SPIKED = 535 + THE_BRIDE = 536 + SAND_SLIME = 537 + SQUIRREL_RED = 538 + SQUIRREL_GOLD = 539 + PARTY_BUNNY = 540 + SAND_ELEMENTAL = 541 + SAND_SHARK = 542 + SANDSHARK_CORRUPT = 543 + SANDSHARK_CRIMSON = 544 + SANDSHARK_HALLOW = 545 + TUMBLEWEED = 546 + DD2ATTACKER_TEST = 547 + DD2ETERNIA_CRYSTAL = 548 + DD2LANE_PORTAL = 549 + DD2BARTENDER = 550 + DD2BETSY = 551 + DD2GOBLIN_T1 = 552 + DD2GOBLIN_T2 = 553 + DD2GOBLIN_T3 = 554 + DD2GOBLIN_BOMBER_T1 = 555 + DD2GOBLIN_BOMBER_T2 = 556 + DD2GOBLIN_BOMBER_T3 = 557 + DD2WYVERN_T1 = 558 + DD2WYVERN_T2 = 559 + DD2WYVERN_T3 = 560 + DD2JAVELINST_T1 = 561 + DD2JAVELINST_T2 = 562 + DD2JAVELINST_T3 = 563 + DD2DARK_MAGE_T1 = 564 + DD2DARK_MAGE_T3 = 565 + DD2SKELETON_T1 = 566 + DD2SKELETON_T3 = 567 + DD2WITHER_BEAST_T2 = 568 + DD2WITHER_BEAST_T3 = 569 + DD2DRAKIN_T2 = 570 + DD2DRAKIN_T3 = 571 + DD2KOBOLD_WALKER_T2 = 572 + DD2KOBOLD_WALKER_T3 = 573 + DD2KOBOLD_FLYER_T2 = 574 + DD2KOBOLD_FLYER_T3 = 575 + DD2OGRE_T2 = 576 + DD2OGRE_T3 = 577 + DD2LIGHTNING_BUG_T3 = 578 + BARTENDER_UNCONSCIOUS = 579 + + def __repr__(self): + return f"{self.__class__.__name__}.{self.name}" diff --git a/lihzahrd/entities/mob.py b/lihzahrd/entities/mob.py new file mode 100644 index 0000000..a71178b --- /dev/null +++ b/lihzahrd/entities/mob.py @@ -0,0 +1,18 @@ +import typing +from .entitytype import EntityType +from ..fileutils import Coordinates + + +class Mob: + """A Mob somewhere in the world.""" + def __init__(self, + type_: int, + position: Coordinates, ): + self.type: int = type_ + """The type of mob this object represents.""" + + self.position: Coordinates = position + """The position of the mob in the game world.""" + + def __repr__(self): + return f"" diff --git a/lihzahrd/npcs/npc.py b/lihzahrd/entities/npc.py similarity index 50% rename from lihzahrd/npcs/npc.py rename to lihzahrd/entities/npc.py index a88e38c..aa2b296 100644 --- a/lihzahrd/npcs/npc.py +++ b/lihzahrd/entities/npc.py @@ -1,18 +1,26 @@ import typing +from .entitytype import EntityType from ..fileutils import Coordinates class NPC: """A NPC somewhere in the world.""" def __init__(self, - sprite_id: int, + type_: EntityType, name: str, position: Coordinates, home: typing.Optional[Coordinates] = None): - self.sprite_id: int = sprite_id + self.type: EntityType = type_ + """The NPC this object represents.""" + self.name: str = name + """The name of this NPC.""" + self.position: Coordinates = position + """The position of the mob in the game world.""" + self.home: typing.Optional[Coordinates] = home + """The coordinates of the home of this NPC, or None if the NPC is homeless.""" def __repr__(self): - return f"" + return f"" diff --git a/lihzahrd/fileutils/pointers.py b/lihzahrd/fileutils/pointers.py index 5633731..0bd6a8c 100644 --- a/lihzahrd/fileutils/pointers.py +++ b/lihzahrd/fileutils/pointers.py @@ -8,7 +8,9 @@ class Pointers: chests: int, signs: int, npcs: int, - entities: int, + tile_entities: int, + pressure_plates: int, + town_manager: int, footer: int, *unknown): self.file_format: int = 0 @@ -17,6 +19,8 @@ class Pointers: self.chests: int = chests self.signs: int = signs self.npcs: int = npcs - self.entities: int = entities + self.tile_entities: int = tile_entities + self.pressure_plates: int = pressure_plates + self.town_manager: int = town_manager self.footer: int = footer self.unknown: typing.List[int] = list(unknown) diff --git a/lihzahrd/npcs/__init__.py b/lihzahrd/npcs/__init__.py deleted file mode 100644 index 0747258..0000000 --- a/lihzahrd/npcs/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .npc import NPC - -__all__ = ["NPC"] diff --git a/lihzahrd/tiles/blocktype.py b/lihzahrd/tiles/blocktype.py index 86ddd92..04246df 100644 --- a/lihzahrd/tiles/blocktype.py +++ b/lihzahrd/tiles/blocktype.py @@ -475,7 +475,6 @@ class BlockType(enum.IntEnum): CONTAINERS2 = 467 FAKE_CONTAINERS2 = 468 TABLES2 = 469 - COUNT = 470 def __repr__(self): return f"{self.__class__.__name__}.{self.name}" diff --git a/lihzahrd/world.py b/lihzahrd/world.py index 4575319..5733eaf 100644 --- a/lihzahrd/world.py +++ b/lihzahrd/world.py @@ -6,7 +6,7 @@ from .header import * from .tiles import * from .chests import * from .signs import * -from .npcs import * +from .entities import * from .timer import Timer @@ -45,6 +45,9 @@ class World: cultist_delay: int, tiles: typing.List[typing.List[Tile]], chests: typing.List[Chest], + signs: typing.List[Sign], + npcs: typing.List[NPC], + mobs: typing.List[Mob], unknown_file_format_data: bytearray, unknown_world_header_data: bytearray, unknown_world_tiles_data: bytearray, @@ -131,9 +134,19 @@ class World: self.anglers_quest: AnglerQuest = anglers_quest """Information about today's Angler's Quest.""" - self.chests: typing.List[Chest] = chests - self.tiles: typing.List[typing.List[Tile]] = tiles + """A matrix of all the tiles present in the world.""" + + self.chests: typing.List[Chest] = chests + """A list of all the containers (chests, barrels) in the world.""" + + self.signs: typing.List[Sign] = signs + """A list of all non-empty signs in the world.""" + + self.npcs: typing.List[NPC] = npcs + """A list of all the NPCs currently living in the world, including the Old Man.""" + + self.mobs: typing.List[Mob] = mobs self.clouds: Clouds = clouds self.cultist_delay: int = cultist_delay @@ -528,11 +541,12 @@ class World: unknown_signs_data = f.read_until(pointers.npcs) - with Timer("NPCs", display=True): + with Timer("Entities", display=True): npcs = [] + mobs = [] while f.bool(): - npc_sprite_id = f.int4() + npc_type = EntityType(f.int4()) npc_name = f.string() npc_position = Coordinates(f.single(), f.single()) is_homeless = f.bool() @@ -540,12 +554,22 @@ class World: if is_homeless: npc_home = None - npc = NPC(sprite_id=npc_sprite_id, + npc = NPC(type_=npc_type, name=npc_name, position=npc_position, home=npc_home) npcs.append(npc) + while f.bool(): + mob_type = EntityType(f.int4()) + mob_position = Coordinates(f.single(), f.single()) + + mob = Mob(type_=npc_type, + position=npc_position) + mobs.append(mob) + + unknown_npcs_data = f.read_until(pointers) + world = World(version=version, savefile_type=savefile_type, revision=revision, is_favorite=is_favorite, name=name, generator=generator, uuid_=uuid_, id_=id_, bounds=bounds, size=world_size, is_expert=is_expert, created_on=created_on, styles=world_styles, backgrounds=backgrounds,