[Nintendogs + Cats] Various changes

* Converted images to webp
* Improved sprite system
* Sorted sprites
* Minor code cleanup
* Add "Display Case" item
This commit is contained in:
magiczocker10
2025-08-17 09:56:01 +02:00
committed by GitHub
parent e898060a6d
commit be6bbf69fe
8 changed files with 469 additions and 449 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 B

BIN
nintendogs+cats/icons.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

View File

@@ -1,335 +1,328 @@
// Hex, Name, Sprite pos X, Sprite pos Y, icon (1=dog, 2=cat, 3=music, 4=recycle) // items[ 0 ] = Item type
SavegameEditor.Constants.items = { // * 0 = food & drink
accessories: [ // * 1 = toys
[ '0x15F', 'Red Leather Collar', -128, -768 ], // * 2 = accessories
[ '0x160', 'Blue Leather Collar', -192, -128 ], // * 3 = furnitures
[ '0x161', 'Yellow Leather Collar', -832, -1024 ], // * 4 = leashes
[ '0x162', 'Green Leather Collar', -896, -384 ], // * 5 = bowls for drinks
[ '0x163', 'Brown Leather Collar', 0, -192 ], // * 6 = bowls for food
[ '0x164', 'White Leather Collar', -640, -960 ],
[ '0x165', 'Black Leather Collar', -320, -64 ], // items[ 1 ] = Item name
[ '0x166', 'Purple Leather Collar', -192, -704 ],
[ '0x17A', 'Black Polka-Dot Collar', -448, -64 ], // items[ 2 ] = Hex location in save file
[ '0x17C', 'Red Polka-Dot Collar', -320, -768 ],
[ '0x17B', 'Dot Collar', -128, -320 ], // items[ 3 ] = Prefixed icon
[ '0x170', 'Camo Collar', -384, -192 ], // * 1 = dog
[ '0x18E', 'Rainbow Collar', -384, -704 ], // * 2 = cat
[ '0x190', 'Striped Collar', -192, -896 ], // * 3 = music
[ '0x186', 'Woven Collar', -512, -1024 ], // * 4 = recycle
[ '0x17D', 'Flower Collar', -128, -384 ], SavegameEditor.Constants.items = [
[ '0x16F', 'Beaded Collar', -576, 0 ], [ 0, 'Water', '0xE5' ],
[ '0x16C', 'Hibiscus Flower Lei', -320, -448 ], [ 0, 'Milk', '0xE6' ],
[ '0x183', 'Star Collar', -896, -832 ], [ 0, 'Dry Food', '0xDD', 1 ],
[ '0x182', 'Heart Collar', -128, -448 ], [ 0, 'Wet Food', '0xDE', 1 ],
[ '0x16B', 'Lace Necklace', -1024, -448 ], [ 0, 'Diet Food', '0xDF', 1 ],
[ '0x177', 'Leather Necklace', -192, -512 ], [ 0, 'Premium Tinned Food', '0xE0', 1 ],
[ '0x172', 'Red Bell Collar', -640, -704 ], [ 0, 'Dry Food', '0xE1', 2 ],
[ '0x173', 'Blue Bell Collar', -768, -64 ], [ 0, 'Wet Food', '0xE2', 2 ],
[ '0x174', 'Green Bell Collar', -576, -384 ], [ 0, 'Diet Food', '0xE3', 2 ],
[ '0x175', 'Brown Bell Collar', -896, -128 ], [ 0, 'Premium Tinned Food', '0xE4', 2 ],
[ '0x17E', 'Green Japanese Print Collar', -768, -384 ], [ 0, 'Biscuits', '0xE7' ],
[ '0x180', 'Red Japanese Print Collar', 0, -768 ], [ 0, 'Puppy Biscuits', '0xEB', 1 ],
[ '0x17F', 'Blue Japanese Print Collar', -64, -128 ], [ 0, 'Bone Biscuits', '0xE9', 1 ],
[ '0x168', 'Red Spiked Collar', -448, -768 ], [ 0, 'Biscuit Bits', '0xEA', 1 ],
[ '0x167', 'Black Spiked Collar', -512, -64 ], [ 0, 'Beef Jerky', '0xE8', 1 ],
[ '0x189', 'Faux-Python Collar', -640, -320 ], [ 0, 'Heart Biscuits', '0xEC', 1 ],
[ '0x188', 'Faux-Leopard Collar', -576, -320 ], [ 0, 'Puppy Chews', '0xF2', 1 ],
[ '0x18A', 'Faux-Zebra Collar', -704, -320 ], [ 0, 'Fish Biscuits', '0xEF', 2 ],
[ '0x187', 'Faux-Crocodile Collar', -512, -320 ], [ 0, 'Fish Jerky', '0xEE', 2 ],
[ '0x184', 'Southwest Collar', -704, -832 ], [ 0, 'Surprise Biscuits', '0xF1' ],
[ '0x178', 'Glitzy Collar', -448, -384 ], [ 0, 'Chicken Jerky', '0xED', 2 ],
[ '0x176', 'Metal-Link Necklace', 0, -576 ], [ 0, 'Cat Grass', '0xF0', 2 ],
[ '0x18F', 'Silver Necklace', -384, -832 ], [ 0, 'Natural Bristle Brush', '0x159', 1 ],
[ '0x18D', 'Platinum Collar', -640, -640 ], [ 0, 'Wire Brush', '0x15A', 1 ],
[ '0x171', 'Classy Collar', -1024, -192 ], [ 0, 'Rubber Brush', '0x15B', 2 ],
[ '0x18C', 'Pearl Necklace', -832, -576 ], [ 0, 'Comb', '0x15C', 2 ],
[ '0x18B', 'Black Pearl Necklace', -384, -64 ], [ 0, 'Shampoo', '0x157' ],
[ '0x179', 'Diamond Collar', -640, -256 ], [ 0, 'Premium Shampoo', '0x158' ],
[ '0x181', 'Royal Heirloom Necklace', -1024, -768 ], [ 1, 'Tennis Ball', '0xA4' ],
[ '0x193', 'Victory Collar', -128, -960 ], [ 1, 'Pink Contrast Tennis Ball', '0xA6' ],
[ '0x16D', "Kid's Bandanna", -768, -448 ], [ 1, 'Blue Contrast Tennis Ball', '0xA5' ],
[ '0x16A', 'Fringed Leather Collar', -384, -384 ], [ 1, 'White Rubber Bone', '0xAE' ],
[ '0x16E', 'Bow Tie', -768, -128 ], [ 1, 'Blue Rubber Bone', '0xAF' ],
[ '0x169', "Chef's Scarf", -832, -192 ], [ 1, 'Pink Rubber Bone', '0xB0' ],
[ '0x191', "Lady's Scarf", 0, -512 ], [ 1, 'Meat Toy', '0xB1' ],
[ '0x192', "Man's Scarf", -576, -512 ], [ 1, 'Rubber Dumb-Bell', '0xB2' ],
[ '0x185', 'Red Woolly Scarf', -704, -768 ], [ 1, 'Bell Ball', '0xA7' ],
[ '0x1C9', 'Red Bows', -704, -704 ], [ 1, 'Squeaky Ball', '0xA8' ],
[ '0x1CA', 'Yellow Bows', -640, -1024 ], [ 1, 'Mushroom Toy', '0xA9' ],
[ '0x1CB', 'Red Chequered Bows', -832, -704 ], [ 1, 'Soft Cube', '0xAD' ],
[ '0x1CC', 'Blue Chequered Bows', -896, -64 ], [ 1, 'Burger Toy', '0xAC' ],
[ '0x1CD', 'Pink Polka-Dot Bows', -256, -640 ], [ 1, 'Football', '0xAA' ],
[ '0x1CE', 'Blue Polka-Dot Bows', -384, -128 ], [ 1, 'Beach Ball', '0xAB' ],
[ '0x1CF', 'Purple Pearl Bows', -256, -704 ], [ 1, 'Red Flying Disc', '0xBF' ],
[ '0x1D0', 'Green Pearl Bows', -960, -384 ], [ 1, 'Blue Flying Disc', '0xC0' ],
[ '0x1D1', 'Black Striped Bows', -576, -64 ], [ 1, 'Orange Flying Disc', '0xC1' ],
[ '0x1D2', 'Red Striped Bows', -512, -768 ], [ 1, 'Green Flying Disc', '0xC2' ],
[ '0x1D3', 'Tricolour Bows', 0, -960 ], [ 1, 'White Pro Flying Disc', '0xC5' ],
[ '0x1D4', 'Fancy Bow', -320, -320 ], [ 1, 'Pink Pro Flying Disc', '0xC6' ],
[ '0x1C8', 'Red Rose', -384, -768 ], [ 1, 'Yellow Pro Flying Disc', '0xC4' ],
[ '0x1C7', 'Pink Rose', -384, -640 ], [ 1, 'Light Blue Pro Flying Disc', '0xC3' ],
[ '0x1C5', 'Red Hibiscus Flower', -1024, -704 ], [ 1, 'Lollipop Disc', '0xCA' ],
[ '0x1C4', 'White Hibiscus Flower', -512, -960 ], [ 1, 'Pot Lid', '0xC9' ],
[ '0x1C6', 'Sunflower', -448, -896 ], [ 1, 'Pizza Disc', '0xC8' ],
[ '0x19F', 'Red Cap', -768, -704 ], [ 1, 'Hoop', '0xCB' ],
[ '0x19E', 'Yellow Cap', -704, -1024 ], [ 1, 'Rainbow Flying Disc', '0xC7' ],
[ '0x1A0', 'Black Cap', -64, -64 ], [ 1, 'Blue Boomerang', '0xFE' ],
[ '0x1A9', 'Newsboy Cap', -384, -576 ], [ 1, 'Yellow Boomerang', '0xFF' ],
[ '0x1B1', 'Leather Cap', -64, -512 ], [ 1, 'Red Lure', '0x100' ],
[ '0x196', 'Red Woolly Hat', -640, -768 ], [ 1, 'Blue Lure', '0x101' ],
[ '0x194', 'Yellow Woolly Hat', -1088, -64 ], [ 1, 'Yellow Lure', '0x102' ],
[ '0x195', 'Black Woolly Hat', -704, -64 ], [ 1, 'Pink Lure', '0x103' ],
[ '0x197', 'White Woolly Hat', 0, -1024 ], [ 1, 'White Pro Lure', '0x106' ],
[ '0x1B0', 'Beanie', -640, 0 ], [ 1, 'Green Pro Lure', '0x105' ],
[ '0x1A3', 'Beret', -896, 0 ], [ 1, 'Orange Pro Lure', '0x107' ],
[ '0x1B9', 'Sun Visor', -384, -896 ], [ 1, 'Blue Pro Lure', '0x104' ],
[ '0x1B2', 'Straw Hat', -64, -896 ], [ 1, 'Meat Lure', '0x109' ],
[ '0x1A5', 'White Bucket Hat', -448, -960 ], [ 1, 'Bunny Doll Lure', '0x10B' ],
[ '0x1A6', 'Black Bucket Hat', 0, -64 ], [ 1, 'Banana Lure', '0x10A' ],
[ '0x1A7', 'Beige Bucket Hat', -768, 0 ], [ 1, 'Ballet Shoe Lure', '0x108' ],
[ '0x19B', 'Brown Safari Hat', -64, -192 ], [ 1, 'Rainbow Lure', '0x10C' ],
[ '0x19C', 'White Safari Hat', -896, -960 ], [ 1, 'Balloon', '0x122' ],
[ '0x1B7', 'Black Top Hat', -640, -64 ], [ 1, 'Bubble Blower', '0x123' ],
[ '0x1B8', 'White Top Hat', -1024, -960 ], [ 1, 'Pink Feather Cat Wand', '0x11B' ],
[ '0x1A4', 'Fedora', -896, -320 ], [ 1, 'Blue Feather Cat Wand', '0x11C' ],
[ '0x1A8', 'Bonnet', -640, -128 ], [ 1, 'Green Feather Cat Wand', '0x11D' ],
[ '0x1AC', 'Feathered Green Hat', -768, -320 ], [ 1, 'Dancing Feather Cat Wand', '0x11F' ],
[ '0x1AD', 'Feathered Purple Hat', -832, -320 ], [ 1, 'Hopping Mouse Cat Wand', '0x11E' ],
[ '0x1B5', 'Pointy Hat', -768, -640 ], [ 1, 'Flying Butterfly Cat Wand', '0x121' ],
[ '0x1B6', "Santa's Hat", -192, -832 ], [ 1, 'Jumping Fish Cat Wand', '0x120' ],
[ '0x1AA', "Chef's Hat", -768, -192 ], [ 1, 'Wind-Up Miss Chickie', '0x124' ],
[ '0x1BB', 'Viking Hat', -320, -960 ], [ 1, 'Wind-Up Mr Froggins', '0x125' ],
[ '0x1B4', 'Party Hat', -704, -576 ], [ 1, 'Wind-Up Sir Nibbles', '0x126' ],
[ '0x19D', 'Headpiece', 0, -448 ], [ 1, 'Mario Kart', '0xBA' ],
[ '0x1AF', 'Stunt Helmet', -320, -896 ], [ 1, 'Peach Kart', '0xBC' ],
[ '0x1A2', 'Origami Hat', -640, -576 ], [ 1, 'Yoshi Kart', '0xBB' ],
[ '0x19A', 'Pompadour Wig', -832, -640 ], [ 1, 'RC Helicopter', '0xBD' ],
[ '0x1B3', 'Bowl Cut Wig', -832, -128 ], [ 1, 'Combat Copter', '0xBE' ],
[ '0x1A1', 'Rainbow Wig', -576, -704 ], [ 1, 'Leather Shoe', '0xB3' ],
[ '0x1AE', 'Strawberry Hood', -128, -896 ], [ 1, 'High Heel', '0xB4' ],
[ '0x1BA', 'Tiara', -896, -896 ], [ 1, 'Stuffed Dog', '0xB9' ],
[ '0x1AB', 'Crown', -320, -256 ], [ 1, 'Tippy Toy', '0xB5' ],
[ '0x1BC', 'Victory Crown', -192, -960 ], [ 1, 'Promise Ring', '0xB7' ],
[ '0x198', "Mario's Hat", -768, -512 ], [ 1, 'Gold Bar', '0xB6' ],
[ '0x199', "Luigi's Hat", -512, -512 ], [ 1, 'Piggy Bank', '0xB8' ],
[ '0x1BD', 'Toad Hat', -1024, -896 ], [ 1, 'AR Camera', '0x15D' ],
[ '0x1BF', "Hero's Hat", -256, -448 ], [ 1, 'RoboPup Voucher', '0x15E' ],
[ '0x1C1', 'Red Pikmin Hat', -256, -768 ], [ 1, 'Keyboard', '0x14A' ],
[ '0x1C2', 'Blue Pikmin Hat', -320, -128 ], [ 1, 'Dog & Cat', '0x14B', 3 ],
[ '0x1C3', 'Yellow Pikmin Hat', -960, -1024 ], [ 1, 'Frantic Frolics', '0x14C', 3 ],
[ '0x1C0', 'Power Suit Helmet', -960, -640 ], [ 1, 'Up in the Clouds', '0x14D', 3 ],
[ '0x1BE', 'Kirby Hat', -832, -448 ], [ 1, 'Surprise Beat', '0x14E', 3 ],
[ '0x1D5', 'Scholar Glasses', -256, -832 ], [ 1, 'Telephone', '0x14F', 3 ],
[ '0x1E3', 'Business Glasses', -320, -192 ], [ 1, 'Club Dog', '0x151', 3 ],
[ '0x1DA', 'Red Fashion Specs', -896, -704 ], [ 1, 'The Flea Waltz', '0x150', 3 ],
[ '0x1DB', 'Black Fashion Specs', -128, -64 ], [ 1, 'Danse des mirlitons', '0x152', 3 ],
[ '0x1DC', 'Cop Sunglasses', -256, -256 ], [ 1, 'Maple Leaf Rag', '0x153', 3 ],
[ '0x1D6', 'White Sunglasses', -960, -960 ], [ 1, 'Csikós Post', '0x154', 3 ],
[ '0x1D7', 'Yellow Sunglasses', -1088, 0 ], [ 1, "Skaters' Waltz", '0x155', 3 ],
[ '0x1D8', 'Red Sunglasses', -576, -768 ], [ 1, 'Thank You', '0x156', 3 ],
[ '0x1DD', 'Sporty Sunglasses', -768, -832 ], [ 1, 'Wooden Stick', '0x127', 4 ],
[ '0x1E0', 'Black Film Star Shades', -192, -64 ], [ 1, 'Metal Bolt', '0x128', 4 ],
[ '0x1DF', 'Brown Film Star Shades', -960, -128 ], [ 1, 'Rubber Tyre Chunk', '0x129', 4 ],
[ '0x1E1', 'Pink Film Star Shades', -64, -640 ], [ 1, 'Leather Key Ring', '0x12A', 4 ],
[ '0x1E2', 'Star Shades', -960, -832 ], [ 1, 'Plastic Bottle', '0x12B', 4 ],
[ '0x1D9', 'Heart Shades', -192, -448 ], [ 1, 'Stardust', '0x12C', 4 ],
[ '0x1DE', 'Masquerade Mask', -832, -512 ], [ 2, 'Red Leather Collar', '0x15F' ],
[ '0x1E4', 'Victory Specs', -256, -960 ] [ 2, 'Blue Leather Collar', '0x160' ],
], [ 2, 'Yellow Leather Collar', '0x161' ],
bowlsdrink: [ [ 2, 'Green Leather Collar', '0x162' ],
[ '0x13E', 'Stainless Steel Bowl', -1088, -192 ], [ 2, 'Brown Leather Collar', '0x163' ],
[ '0x13F', 'Green Bowl', -1088, -256 ], [ 2, 'White Leather Collar', '0x164' ],
[ '0x140', 'Yellow Bowl', -1088, -320 ], [ 2, 'Black Leather Collar', '0x165' ],
[ '0x141', 'Red Bowl', -1088, -384 ], [ 2, 'Purple Leather Collar', '0x166' ],
[ '0x142', 'Urushi Bowl', -1088, -448 ], [ 2, 'Black Polka-Dot Collar', '0x17A' ],
[ '0x143', 'White Polka-Dot Bowl', -1088, -512 ], [ 2, 'Red Polka-Dot Collar', '0x17C' ],
[ '0x144', 'High-Class Bowl', -1088, -576 ], [ 2, 'Dot Collar', '0x17B' ],
[ '0x145', 'Wooden Bowl', -1088, -640 ] [ 2, 'Camo Collar', '0x170' ],
], [ 2, 'Rainbow Collar', '0x18E' ],
bowlsfood: [ [ 2, 'Striped Collar', '0x190' ],
[ '0x13E', 'White Bowl', -1088, -704 ], [ 2, 'Woven Collar', '0x186' ],
[ '0x13F', 'Green Bowl', -1088, -768 ], [ 2, 'Flower Collar', '0x17D' ],
[ '0x140', 'Yellow Bowl', -1088, -832 ], [ 2, 'Beaded Collar', '0x16F' ],
[ '0x141', 'Red Bowl', -1088, -896 ], [ 2, 'Hibiscus Flower Lei', '0x16C' ],
[ '0x142', 'Pottery Bowl', -1088, -960 ], [ 2, 'Star Collar', '0x183' ],
[ '0x143', 'Pink Polka-Dot Bowl', -1088, -1024 ], [ 2, 'Heart Collar', '0x182' ],
[ '0x144', 'Japanese-Style Bowl', -0, -1088 ], [ 2, 'Lace Necklace', '0x16B' ],
[ '0x145', 'Wooden Bowl', -64, -1088 ] [ 2, 'Leather Necklace', '0x177' ],
], [ 2, 'Red Bell Collar', '0x172' ],
fooddrink: [ [ 2, 'Blue Bell Collar', '0x173' ],
[ '0xE5', 'Water', -384, -960 ], [ 2, 'Green Bell Collar', '0x174' ],
[ '0xE6', 'Milk', -64, -576 ], [ 2, 'Brown Bell Collar', '0x175' ],
[ '0xDD', 'Dry Food', -960, -256, 1 ], [ 2, 'Green Japanese Print Collar', '0x17E' ],
[ '0xDE', 'Wet Food', 0, -320, 1 ], [ 2, 'Red Japanese Print Collar', '0x180' ],
[ '0xDF', 'Diet Food', -896, -256, 1 ], [ 2, 'Blue Japanese Print Collar', '0x17F' ],
[ '0xE0', 'Premium Tinned Food', -1024, -256, 1 ], [ 2, 'Red Spiked Collar', '0x168' ],
[ '0xE1', 'Dry Food', -512, -192, 2 ], [ 2, 'Black Spiked Collar', '0x167' ],
[ '0xE2', 'Wet Food', -704, -192, 2 ], [ 2, 'Faux-Python Collar', '0x189' ],
[ '0xE3', 'Diet Food', -448, -192, 2 ], [ 2, 'Faux-Leopard Collar', '0x188' ],
[ '0xE4', 'Premium Tinned Food', -640, -192, 2 ], [ 2, 'Faux-Zebra Collar', '0x18A' ],
[ '0xE7', 'Biscuits', -1024, 0 ], [ 2, 'Faux-Crocodile Collar', '0x187' ],
[ '0xEB', 'Puppy Biscuits', -64, -704, 1 ], [ 2, 'Southwest Collar', '0x184' ],
[ '0xE9', 'Bone Biscuits', -576, -128, 1 ], [ 2, 'Glitzy Collar', '0x178' ],
[ '0xEA', 'Biscuit Bits', -960, 0, 1 ], [ 2, 'Metal-Link Necklace', '0x176' ],
[ '0xE8', 'Beef Jerky', -704, 0, 1 ], [ 2, 'Silver Necklace', '0x18F' ],
[ '0xEC', 'Heart Biscuits', -64, -448, 1 ], [ 2, 'Platinum Collar', '0x18D' ],
[ '0xF2', 'Puppy Chews', -128, -704, 1 ], [ 2, 'Classy Collar', '0x171' ],
[ '0xEF', 'Fish Biscuits', -960, -320, 2 ], [ 2, 'Pearl Necklace', '0x18C' ],
[ '0xEE', 'Fish Jerky', 0, -384, 2 ], [ 2, 'Black Pearl Necklace', '0x18B' ],
[ '0xF1', 'Surprise Biscuits', -576, -896 ], [ 2, 'Diamond Collar', '0x179' ],
[ '0xED', 'Chicken Jerky', -960, -192, 2 ], [ 2, 'Royal Heirloom Necklace', '0x181' ],
[ '0xF0', 'Cat Grass', -576, -192, 2 ], [ 2, 'Victory Collar', '0x193' ],
[ '0x159', 'Natural Bristle Brush', -320, -576, 1 ], [ 2, "Kid's Bandanna", '0x16D' ],
[ '0x15A', 'Wire Brush', -320, -1024, 1 ], [ 2, 'Fringed Leather Collar', '0x16A' ],
[ '0x15B', 'Rubber Brush', 0, -832, 2 ], [ 2, 'Bow Tie', '0x16E' ],
[ '0x15C', 'Comb', -64, -256, 2 ], [ 2, "Chef's Scarf", '0x169' ],
[ '0x157', 'Shampoo', -320, -832 ], [ 2, "Lady's Scarf", '0x191' ],
[ '0x158', 'Premium Shampoo', -1024, -640 ] [ 2, "Man's Scarf", '0x192' ],
], [ 2, 'Red Woolly Scarf', '0x185' ],
furnitures: [ [ 2, 'Red Bows', '0x1C9' ],
[ '0x1E5', 'Wicker Dog Bed', -64, -1024 ], [ 2, 'Yellow Bows', '0x1CA' ],
[ '0x1FE', 'Plush Dog Bed', -704, -640 ], [ 2, 'Red Chequered Bows', '0x1CB' ],
[ '0x201', 'Miniature Bed', -128, -576 ], [ 2, 'Blue Chequered Bows', '0x1CC' ],
[ '0x1F0', 'Comfy Couch', -192, -256 ], [ 2, 'Pink Polka-Dot Bows', '0x1CD' ],
[ '0x1F6', 'Antique Sofa', -128, 0 ], [ 2, 'Blue Polka-Dot Bows', '0x1CE' ],
[ '0x202', 'Fancy Settee', -384, -320 ], [ 2, 'Purple Pearl Bows', '0x1CF' ],
[ '0x1FD', 'Leather Sofa', -320, -512 ], [ 2, 'Green Pearl Bows', '0x1D0' ],
[ '0x1EF', 'Armchair', -192, 0 ], [ 2, 'Black Striped Bows', '0x1D1' ],
[ '0x1FB', 'Designer Chair', -576, -256 ], [ 2, 'Red Striped Bows', '0x1D2' ],
[ '0x1F5', 'Koopa Shell Chair', -960, -448 ], [ 2, 'Tricolour Bows', '0x1D3' ],
[ '0x1FC', 'Chest of Drawers', -896, -192 ], [ 2, 'Fancy Bow', '0x1D4' ],
[ '0x1F7', 'Antique Chest', -64, 0 ], [ 2, 'Red Rose', '0x1C8' ],
[ '0x1EE', 'Wooden Cabinet', -384, -1024 ], [ 2, 'Pink Rose', '0x1C7' ],
[ '0x1EC', 'Bookcase', -704, -128 ], [ 2, 'Red Hibiscus Flower', '0x1C5' ],
[ '0x1ED', 'Dresser', -192, -320 ], [ 2, 'White Hibiscus Flower', '0x1C4' ],
[ '0x1E7', 'Display Shelves', -832, -256 ], [ 2, 'Sunflower', '0x1C6' ],
[ '0x1E8', 'Japanese Step Chest', -576, -448 ], [ 2, 'Red Cap', '0x19F' ],
[ '0x203', 'Fancy Wardrobe', -448, -320 ], [ 2, 'Yellow Cap', '0x19E' ],
[ '0x204', 'Starship Cabinet', 0, -896 ], [ 2, 'Black Cap', '0x1A0' ],
[ '0x1F2', 'Dining Table Set', -704, -256 ], [ 2, 'Newsboy Cap', '0x1A9' ],
[ '0x1F4', 'Mushroom Table Set', -192, -576 ], [ 2, 'Leather Cap', '0x1B1' ],
[ '0x1EA', 'Refrigerator', -768, -768 ], [ 2, 'Red Woolly Hat', '0x196' ],
[ '0x1E9', 'Retro Fan', -832, -768 ], [ 2, 'Yellow Woolly Hat', '0x194' ],
[ '0x205', 'Electronic Fan', -256, -320 ], [ 2, 'Black Woolly Hat', '0x195' ],
[ '0x1F1', 'Oil Heater', -448, -576 ], [ 2, 'White Woolly Hat', '0x197' ],
[ '0x1FA', 'Fish Bowl', -1024, -320 ], [ 2, 'Beanie', '0x1B0' ],
[ '0x1F8', 'Arowana Aquarium', -256, 0 ], [ 2, 'Beret', '0x1A3' ],
[ '0x1EB', 'Piano', -896, -576 ], [ 2, 'Sun Visor', '0x1B9' ],
[ '0x1F3', 'Retro TV', -896, -768 ], [ 2, 'Straw Hat', '0x1B2' ],
[ '0x1F9', 'Flat-Screen TV', -64, -384 ], [ 2, 'White Bucket Hat', '0x1A5' ],
[ '0x1FF', 'Slim Cat Tower', -576, -832 ], [ 2, 'Black Bucket Hat', '0x1A6' ],
[ '0x200', 'Simple Cat Tower', -448, -832 ], [ 2, 'Beige Bucket Hat', '0x1A7' ],
[ '0x1E6', 'Kitty Tree House', -896, -448 ] [ 2, 'Brown Safari Hat', '0x19B' ],
], [ 2, 'White Safari Hat', '0x19C' ],
interiors: [ [ 2, 'Black Top Hat', '0x1B7' ],
[ '0x208', 'Scandinavian' ], [ 2, 'White Top Hat', '0x1B8' ],
[ '0x209', 'Japanese' ], [ 2, 'Fedora', '0x1A4' ],
[ '0x20A', 'Asian' ], [ 2, 'Bonnet', '0x1A8' ],
[ '0x20B', 'Modern' ], [ 2, 'Feathered Green Hat', '0x1AC' ],
[ '0x20C', 'Country' ], [ 2, 'Feathered Purple Hat', '0x1AD' ],
[ '0x20D', 'Luxerious House' ], [ 2, 'Pointy Hat', '0x1B5' ],
[ '0x20E', 'Fairy Tale' ], [ 2, "Santa's Hat", '0x1B6' ],
[ '0x20F', 'Mario House' ], [ 2, "Chef's Hat", '0x1AA' ],
[ '0x210', 'Futuristic' ] [ 2, 'Viking Hat', '0x1BB' ],
], [ 2, 'Party Hat', '0x1B4' ],
leashes: [ [ 2, 'Headpiece', '0x19D' ],
[ '0x12D', 'Red Leash', -64, -768 ], [ 2, 'Stunt Helmet', '0x1AF' ],
[ '0x12E', 'White Leash', -576, -960 ], [ 2, 'Origami Hat', '0x1A2' ],
[ '0x12F', 'Blue Leash', -128, -128 ], [ 2, 'Pompadour Wig', '0x19A' ],
[ '0x130', 'Yellow Leash', -768, -1024 ], [ 2, 'Bowl Cut Wig', '0x1B3' ],
[ '0x131', 'Green Leash', -832, -384 ], [ 2, 'Rainbow Wig', '0x1A1' ],
[ '0x132', 'Pink Leash', -128, -640 ], [ 2, 'Strawberry Hood', '0x1AE' ],
[ '0x133', 'Brown Leash', -1024, -128 ], [ 2, 'Tiara', '0x1BA' ],
[ '0x134', 'Black Leash', -256, -64 ] [ 2, 'Crown', '0x1AB' ],
], [ 2, 'Victory Crown', '0x1BC' ],
toys: [ [ 2, "Mario's Hat", '0x198' ],
[ '0xA4', 'Tennis Ball', -704, -896 ], [ 2, "Luigi's Hat", '0x199' ],
[ '0xA6', 'Pink Contrast Tennis Ball', -1024, -576 ], [ 2, 'Toad Hat', '0x1BD' ],
[ '0xA5', 'Blue Contrast Tennis Ball', -960, -64 ], [ 2, "Hero's Hat", '0x1BF' ],
[ '0xAE', 'White Rubber Bone', -832, -960 ], [ 2, 'Red Pikmin Hat', '0x1C1' ],
[ '0xAF', 'Blue Rubber Bone', -512, -128 ], [ 2, 'Blue Pikmin Hat', '0x1C2' ],
[ '0xB0', 'Pink Rubber Bone', -448, -640 ], [ 2, 'Yellow Pikmin Hat', '0x1C3' ],
[ '0xB1', 'Meat Toy', -960, -512 ], [ 2, 'Power Suit Helmet', '0x1C0' ],
[ '0xB2', 'Rubber Dumb-Bell', -64, -832 ], [ 2, 'Kirby Hat', '0x1BE' ],
[ '0xA7', 'Bell Ball', -832, 0 ], [ 2, 'Scholar Glasses', '0x1D5' ],
[ '0xA8', 'Squeaky Ball', -832, -832 ], [ 2, 'Business Glasses', '0x1E3' ],
[ '0xA9', 'Mushroom Toy', -256, -576 ], [ 2, 'Red Fashion Specs', '0x1DA' ],
[ '0xAD', 'Soft Cube', -640, -832 ], [ 2, 'Black Fashion Specs', '0x1DB' ],
[ '0xAC', 'Burger Toy', -256, -192 ], [ 2, 'Cop Sunglasses', '0x1DC' ],
[ '0xAA', 'Football', -256, -384 ], [ 2, 'White Sunglasses', '0x1D6' ],
[ '0xAB', 'Beach Ball', -512, 0 ], [ 2, 'Yellow Sunglasses', '0x1D7' ],
[ '0xBF', 'Red Flying Disc', -960, -704 ], [ 2, 'Red Sunglasses', '0x1D8' ],
[ '0xC0', 'Blue Flying Disc', 0, -128 ], [ 2, 'Sporty Sunglasses', '0x1DD' ],
[ '0xC1', 'Orange Flying Disc', -512, -576 ], [ 2, 'Black Film Star Shades', '0x1E0' ],
[ '0xC2', 'Green Flying Disc', -704, -384 ], [ 2, 'Brown Film Star Shades', '0x1DF' ],
[ '0xC5', 'White Pro Flying Disc', -704, -960 ], [ 2, 'Pink Film Star Shades', '0x1E1' ],
[ '0xC6', 'Pink Pro Flying Disc', -320, -640 ], [ 2, 'Star Shades', '0x1E2' ],
[ '0xC4', 'Yellow Pro Flying Disc', -1024, -1024 ], [ 2, 'Heart Shades', '0x1D9' ],
[ '0xC3', 'Light Blue Pro Flying Disc', -384, -512 ], [ 2, 'Masquerade Mask', '0x1DE' ],
[ '0xCA', 'Lollipop Disc', -448, -512 ], [ 2, 'Victory Specs', '0x1E4' ],
[ '0xC9', 'Pot Lid', -896, -640 ], [ 3, 'Wicker Dog Bed', '0x1E5' ],
[ '0xC8', 'Pizza Disc', -512, -640 ], [ 3, 'Plush Dog Bed', '0x1FE' ],
[ '0xCB', 'Hoop', -448, -448 ], [ 3, 'Miniature Bed', '0x201' ],
[ '0xC7', 'Rainbow Flying Disc', -448, -704 ], [ 3, 'Comfy Couch', '0x1F0' ],
[ '0xFE', 'Blue Boomerang', -832, -64 ], [ 3, 'Antique Sofa', '0x1F6' ],
[ '0xFF', 'Yellow Boomerang', -576, -1024 ], [ 3, 'Fancy Settee', '0x202' ],
[ '0x100', 'Red Lure', -192, -768 ], [ 3, 'Leather Sofa', '0x1FD' ],
[ '0x101', 'Blue Lure', -256, -128 ], [ 3, 'Armchair', '0x1EF' ],
[ '0x102', 'Yellow Lure', -896, -1024 ], [ 3, 'Designer Chair', '0x1FB' ],
[ '0x103', 'Pink Lure', -192, -640 ], [ 3, 'Koopa Shell Chair', '0x1F5' ],
[ '0x106', 'White Pro Lure', -768, -960 ], [ 3, 'Chest of Drawers', '0x1FC' ],
[ '0x105', 'Green Pro Lure', -1024, -384 ], [ 3, 'Antique Chest', '0x1F7' ],
[ '0x107', 'Orange Pro Lure', -576, -576 ], [ 3, 'Wooden Cabinet', '0x1EE' ],
[ '0x104', 'Blue Pro Lure', -448, -128 ], [ 3, 'Bookcase', '0x1EC' ],
[ '0x109', 'Meat Lure', -896, -512 ], [ 3, 'Dresser', '0x1ED' ],
[ '0x10B', 'Bunny Doll Lure', -192, -192 ], [ 3, 'Display Shelves', '0x1E7' ],
[ '0x10A', 'Banana Lure', -448, 0 ], [ 3, 'Japanese Step Chest', '0x1E8' ],
[ '0x108', 'Ballet Shoe Lure', -320, 0 ], [ 3, 'Fancy Wardrobe', '0x203' ],
[ '0x10C', 'Rainbow Lure', -512, -704 ], [ 3, 'Display Case', '0x206' ],
[ '0x122', 'Balloon', -384, 0 ], [ 3, 'Starship Cabinet', '0x204' ],
[ '0x123', 'Bubble Blower', -128, -192 ], [ 3, 'Dining Table Set', '0x1F2' ],
[ '0x11B', 'Pink Feather Cat Wand', 0, -640 ], [ 3, 'Mushroom Table Set', '0x1F4' ],
[ '0x11C', 'Blue Feather Cat Wand', -1024, -64 ], [ 3, 'Refrigerator', '0x1EA' ],
[ '0x11D', 'Green Feather Cat Wand', -640, -384 ], [ 3, 'Retro Fan', '0x1E9' ],
[ '0x11F', 'Dancing Feather Cat Wand', -448, -256 ], [ 3, 'Electronic Fan', '0x205' ],
[ '0x11E', 'Hopping Mouse Cat Wand', -512, -448 ], [ 3, 'Oil Heater', '0x1F1' ],
[ '0x121', 'Flying Butterfly Cat Wand', -192, -384 ], [ 3, 'Fish Bowl', '0x1FA' ],
[ '0x120', 'Jumping Fish Cat Wand', -640, -448 ], [ 3, 'Arowana Aquarium', '0x1F8' ],
[ '0x124', 'Wind-Up Miss Chickie', -128, -1024 ], [ 3, 'Piano', '0x1EB' ],
[ '0x125', 'Wind-Up Mr Froggins', -192, -1024 ], [ 3, 'Retro TV', '0x1F3' ],
[ '0x126', 'Wind-Up Sir Nibbles', -256, -1024 ], [ 3, 'Flat-Screen TV', '0x1F9' ],
[ '0xBA', 'Mario Kart', -704, -512 ], [ 3, 'Simple Cat Tower', '0x200' ],
[ '0xBC', 'Peach Kart', -768, -576 ], [ 3, 'Slim Cat Tower', '0x1FF' ],
[ '0xBB', 'Yoshi Kart', -1088, -128 ], [ 3, 'Kitty Tree House', '0x1E6' ],
[ '0xBD', 'RC Helicopter', -320, -704 ], [ 4, 'Red Leash', '0x12D' ],
[ '0xBE', 'Combat Copter', -128, -256 ], [ 4, 'White Leash', '0x12E' ],
[ '0xB3', 'Leather Shoe', -256, -512 ], [ 4, 'Blue Leash', '0x12F' ],
[ '0xB4', 'High Heel', -384, -448 ], [ 4, 'Yellow Leash', '0x130' ],
[ '0xB9', 'Stuffed Dog', -256, -896 ], [ 4, 'Green Leash', '0x131' ],
[ '0xB5', 'Tippy Toy', -960, -896 ], [ 4, 'Pink Leash', '0x132' ],
[ '0xB7', 'Promise Ring', 0, -704 ], [ 4, 'Brown Leash', '0x133' ],
[ '0xB6', 'Gold Bar', -512, -384 ], [ 4, 'Black Leash', '0x134' ],
[ '0xB8', 'Piggy Bank', -960, -576 ], [ 5, 'Stainless Steel Bowl', '0x136' ],
[ '0x15D', 'AR Camera', 0, 0 ], [ 5, 'Green Bowl', '0x137' ],
[ '0x15E', 'RoboPup Voucher', -960, -768 ], [ 5, 'Yellow Bowl', '0x138' ],
[ '0x14A', 'Keyboard', -704, -448 ], [ 5, 'Red Bowl', '0x139' ],
[ '0x14B', 'Dog & Cat', -64, -320, 3 ], [ 5, 'Urushi Bowl', '0x13A' ],
[ '0x14C', 'Frantic Frolics', -320, -384, 3, 3 ], [ 5, 'White Polka-Dot Bowl', '0x13B' ],
[ '0x14D', 'Up in the Clouds', -64, -960, 3 ], [ 5, 'High-Class Bowl', '0x13C' ],
[ '0x14E', 'Surprise Beat', -512, -896, 3 ], [ 5, 'Wooden Bowl', '0x13D' ],
[ '0x14F', 'Telephone', -640, -896, 3 ], [ 6, 'White Bowl', '0x13E' ],
[ '0x151', 'Club Dog', 0, -256, 3 ], [ 6, 'Green Bowl', '0x13F' ],
[ '0x150', 'The Flea Waltz', -832, -896, 3 ], [ 6, 'Yellow Bowl', '0x140' ],
[ '0x152', 'Danse des mirlitons', -512, -256, 3 ], [ 6, 'Red Bowl', '0x141' ],
[ '0x153', 'Maple Leaf Rag', -640, -512, 3 ], [ 6, 'Pottery Bowl', '0x142' ],
[ '0x154', 'Csikós Post', -384, -256, 3 ], [ 6, 'Pink Polka-Dot Bowl', '0x143' ],
[ '0x155', "Skaters' Waltz", -512, -832, 3 ], [ 6, 'Japanese-Style Bowl', '0x144' ],
[ '0x156', 'Thank You', -768, -896, 3 ], [ 6, 'Wooden Bowl', '0x145' ]
[ '0x127', 'Wooden Stick', -448, -1024, 4 ], ];
[ '0x128', 'Metal Bolt', -1024, -512, 4 ],
[ '0x129', 'Rubber Tyre Chunk', -128, -832, 4 ],
[ '0x12A', 'Leather Key Ring', -128, -512, 4 ],
[ '0x12B', 'Plastic Bottle', -576, -640, 4 ],
[ '0x12C', 'Stardust', -1024, -832, 4 ]
]
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 KiB

BIN
nintendogs+cats/items.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB

View File

@@ -53,20 +53,6 @@
display: block; display: block;
} }
.item-icon {
background-image: url( ./items.png );
background-repeat: no-repeat;
background-size: 576px;
display: inline-block;
height: 32px;
image-rendering: pixelated;
margin-right: 6px;
pointer-events: none;
user-select: none;
vertical-align: middle;
width: 32px;
}
.item-name { .item-name {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
@@ -74,7 +60,7 @@
} }
.item-name[ data-icon ]::before { .item-name[ data-icon ]::before {
background-image: url( ./icons.png ); background-image: url( ./icons.webp );
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 68px; background-size: 68px;
content: ''; content: '';
@@ -104,6 +90,19 @@
background-position-x: -51px; background-position-x: -51px;
} }
.item-icon {
background-image: url( ./items.webp );
background-size: 576px;
background-repeat: no-repeat;
display: inline-block;
height: 32px;
margin-right: 6px;
pointer-events: none;
user-select: none;
vertical-align: middle;
width: 32px;
}
/* Fix */ /* Fix */
.columns.c1, .columns.c1,
.columns.one { .columns.one {
@@ -117,7 +116,7 @@
.columns.c3, .columns.c3,
.columns.three { .columns.three {
width: calc( 100% / 12 * 3 ); width: 25%;
} }
.columns.c4, .columns.c4,
@@ -132,7 +131,7 @@
.columns.c6, .columns.c6,
.columns.six { .columns.six {
width: calc( 100% / 12 * 6 ); width: 50%;
} }
.columns.c7, .columns.c7,
@@ -147,7 +146,7 @@
.columns.c9, .columns.c9,
.columns.nine { .columns.nine {
width: calc( 100% / 12 * 9 ); width: 75%;
} }
.columns.c10, .columns.c10,

View File

@@ -98,7 +98,18 @@ SavegameEditor = {
PET_PERSONALITIES_OFFSET_DOG2: 0x1FA, PET_PERSONALITIES_OFFSET_DOG2: 0x1FA,
PET_PERSONALITIES_OFFSET_CAT1: 0x1EE, PET_PERSONALITIES_OFFSET_CAT1: 0x1EE,
PET_PERSONALITIES_OFFSET_CAT2: 0x1F2, PET_PERSONALITIES_OFFSET_CAT2: 0x1F2,
WALKING_COUNTER_OFFSET: 0x215 WALKING_COUNTER_OFFSET: 0x215,
interiors: [
[ '0x208', 'Scandinavian' ],
[ '0x209', 'Japanese' ],
[ '0x20A', 'Asian' ],
[ '0x20B', 'Modern' ],
[ '0x20C', 'Country' ],
[ '0x20D', 'Luxerious House' ],
[ '0x20E', 'Fairy Tale' ],
[ '0x20F', 'Mario House' ],
[ '0x210', 'Futuristic' ]
]
}, },
_write_money: function () { _write_money: function () {
@@ -141,7 +152,7 @@ SavegameEditor = {
getValue( e.target.id ) getValue( e.target.id )
); );
document.getElementsByClassName( 'pet' + index + '_name' )[ 0 ].innerText = getValue( e.target.id ); document.getElementsByClassName( `pet${ index }_name` )[ 0 ].innerText = getValue( e.target.id );
}, },
_write_u_number: function ( e, n, o, g ) { _write_u_number: function ( e, n, o, g ) {
const index = Number( ( e.target.id ).match( reg )[ 0 ] ); const index = Number( ( e.target.id ).match( reg )[ 0 ] );
@@ -150,7 +161,7 @@ SavegameEditor = {
pet_offset = 0; pet_offset = 0;
} }
const offset = pet_offset + SavegameEditor.Constants[ o ]; const offset = pet_offset + SavegameEditor.Constants[ o ];
tempFile[ 'writeU' + n ]( tempFile[ `writeU${ n }` ](
offset, offset,
Number( getValue( e.target.id ) ) Number( getValue( e.target.id ) )
); );
@@ -159,7 +170,7 @@ SavegameEditor = {
SavegameEditor._write_u_number( e, Number( e.target.parentElement.dataset.size ), e.target.parentElement.dataset.var, e.target.parentElement.dataset.global ); SavegameEditor._write_u_number( e, Number( e.target.parentElement.dataset.size ), e.target.parentElement.dataset.var, e.target.parentElement.dataset.global );
}, },
_getPetData( petOffset, val, size ) { _getPetData( petOffset, val, size ) {
return tempFile[ 'readU' + ( size || 8 ) ]( SavegameEditor.Constants.PET_OFFSET[ petOffset ] + SavegameEditor.Constants[ val ] ); return tempFile[ `readU${ size || 8 }` ]( SavegameEditor.Constants.PET_OFFSET[ petOffset ] + SavegameEditor.Constants[ val ] );
}, },
_mark_as_changed( e ) { _mark_as_changed( e ) {
e.target.dataset.data_changed = true; e.target.dataset.data_changed = true;
@@ -174,47 +185,71 @@ SavegameEditor = {
getValue( 'interiors' ) getValue( 'interiors' )
); );
}, },
appendItem: function ( rowtype ) { setPos: function ( node, pos ) {
const items = SavegameEditor.Constants.items, const size = 64, // Sprite height
rowname = rowtype[ 0 ], scale = 0.5, // height scaled down to 32px
rt = get( 'row-' + rowname ), tiles = 18,
min = [ 'bowlsfood', 'bowlsdrink' ].includes( rowname ) ? 1 : 0, left = pos % tiles * size * scale,
options = []; top = Math.floor( pos / tiles ) * size * scale;
if ( rowname === 'interiors' ) { node.style.backgroundPosition = `-${ left }px -${ top }px`;
items[ rowname ].forEach( ( item ) => { },
options.push( item[ 1 ] ); appendItems: function () {
} ); const itemTypes = [
rt.append( [ 'fooddrink', 99 ],
col( 8, span( 'Active interior' ) ), [ 'toys', 99 ],
col( 4, select( 'interiors', options, SavegameEditor.updateInterior ) ) [ 'accessories', 99 ],
); [ 'furnitures', 99 ],
} [ 'leashes', 99 ],
items[ rowname ].forEach( ( item, index ) => { [ 'bowlsdrink', 1 ],
if ( item[ 2 ] === undefined ) { [ 'bowlsfood', 1 ]
rt.append( col( 3, span( item[ 1 ] ) ) ); ];
} else { SavegameEditor.Constants.items.forEach( ( item, index ) => {
const itemIcon = document.createElement( 'span' ), const type = itemTypes[ item[ 0 ] ],
itemCol = col( 3, itemIcon ), rowname = type[ 0 ],
itemName = itemCol.appendChild( document.createElement( 'span' ) ); min = [ 'bowlsfood', 'bowlsdrink' ].includes( rowname ) ? 1 : 0,
itemIcon.className = 'item-icon'; row = get( `row-${ rowname }` ),
itemIcon.style.backgroundPosition = `${ item[ 2 ] / 2 }px ${ item[ 3 ] / 2 }px`; itemIcon = document.createElement( 'span' ),
itemName.className = 'item-name'; itemCol = col( 3, itemIcon ),
itemName.textContent = item[ 1 ]; itemName = itemCol.appendChild( document.createElement( 'span' ) ),
if ( item[ 4 ] ) { itemInput = inputNumber( `supplies_${ index }`, index === 0 ? min : 0, type[ 1 ], tempFile.readU8( Number( item[ 2 ] ) ) );
itemName.dataset.icon = item[ 4 ]; itemIcon.className = 'item-icon';
} itemName.className = 'item-name';
rt.append( itemCol ); itemName.textContent = item[ 1 ];
SavegameEditor.setPos( itemIcon, index );
if ( item[ 3 ] ) {
itemName.dataset.icon = item[ 3 ];
} }
rt.append( row.append( itemCol );
col( 1, inputNumber( 'supplies_' + rowname + '_' + index + '_amount', index === 0 ? min : 0, rowtype[ 1 ], tempFile.readU8( Number( item[ 0 ] ) ) ) ) row.append(
col( 1, itemInput )
); );
get( 'number-supplies_' + rowname + '_' + index + '_amount' ).dataset.offset = item[ 0 ]; itemInput.dataset.offset = item[ 0 ];
get( 'number-supplies_' + rowname + '_' + index + '_amount' ).addEventListener( 'change', SavegameEditor._write_supply_amount ); itemInput.addEventListener( 'change', SavegameEditor._write_supply_amount );
} ); } );
const lastRow = SavegameEditor.Constants.items[ rowname ].length % 3; itemTypes.forEach( ( type ) => {
if ( lastRow !== 0 ) { const rowname = type[ 0 ],
rt.append( col( ( 3 - lastRow ) * 4, span( '' ) ) ); row = get( `row-${ rowname }` ),
} lastRow = row.childElementCount % 6;
if ( lastRow !== 0 ) {
row.append( col( ( 6 - lastRow ) * 2, span( '' ) ) );
}
} );
},
appendInteriors: function () {
const options = [],
row = get( 'row-interiors' );
SavegameEditor.Constants.interiors.forEach( ( interior, index ) => {
const input = inputNumber( `interiors_${ index }`, 0, interior[ 1 ], tempFile.readU8( Number( interior[ 0 ] ) ) );
row.append(
col( 3, span( interior[ 1 ] ) ),
col( 1, input )
);
input.dataset.offset = interior[ 0 ];
input.addEventListener( 'change', SavegameEditor._write_supply_amount );
options.push( interior[ 1 ] );
} );
row.prepend( col( 4, select( 'interiors', options, SavegameEditor.updateInterior ) ) );
row.prepend( col( 8, span( 'Active interior' ) ) );
}, },
preload: function () { preload: function () {
setNumericRange( 'money', 0, 9999999 ); setNumericRange( 'money', 0, 9999999 );
@@ -247,16 +282,8 @@ SavegameEditor = {
get( 'number-pedometer' ).addEventListener( 'change', SavegameEditor._write_pedometer ); get( 'number-pedometer' ).addEventListener( 'change', SavegameEditor._write_pedometer );
get( 'number-walking-counter' ).addEventListener( 'change', SavegameEditor._write_walking_counter ); get( 'number-walking-counter' ).addEventListener( 'change', SavegameEditor._write_walking_counter );
[ SavegameEditor.appendItems();
[ 'fooddrink', 99 ], SavegameEditor.appendInteriors();
[ 'toys', 99 ],
[ 'accessories', 99 ],
[ 'furnitures', 99 ],
[ 'leashes', 99 ],
[ 'bowlsdrink', 1 ],
[ 'bowlsfood', 1 ],
[ 'interiors', 1 ]
].forEach( SavegameEditor.appendItem );
}, },
/* load function */ /* load function */
@@ -300,7 +327,7 @@ SavegameEditor = {
const pet_tab_input = document.createElement( 'input' ); const pet_tab_input = document.createElement( 'input' );
pet_tab_input.name = 'pet_tabgroup'; pet_tab_input.name = 'pet_tabgroup';
pet_tab_input.type = 'radio'; pet_tab_input.type = 'radio';
pet_tab_input.id = 'pet_tab' + i; pet_tab_input.id = `pet_tab${ i }`;
pet_tab_input.className = 'pet_tab'; pet_tab_input.className = 'pet_tab';
if ( first_pet ) { if ( first_pet ) {
pet_tab_input.checked = true; pet_tab_input.checked = true;
@@ -309,20 +336,20 @@ SavegameEditor = {
pet_tabs.insertBefore( pet_tab_input, pet_tabs_content_seperator ); pet_tabs.insertBefore( pet_tab_input, pet_tabs_content_seperator );
const pet_tab_label = document.createElement( 'label' ); const pet_tab_label = document.createElement( 'label' );
pet_tab_label.className = 'pet_label'; pet_tab_label.className = 'pet_label';
pet_tab_label.setAttribute( 'for', 'pet_tab' + i ); pet_tab_label.setAttribute( 'for', `pet_tab${ i }` );
pet_tabs.insertBefore( pet_tab_label, pet_tabs_content_seperator ); pet_tabs.insertBefore( pet_tab_label, pet_tabs_content_seperator );
const templateClone = template.content.cloneNode( true ); const templateClone = template.content.cloneNode( true );
templateClone.querySelector( '.row' ).id = 'row-pet' + i; templateClone.querySelector( '.row' ).id = `row-pet${ i }`;
for ( const ele of templateClone.querySelectorAll( '.update-name' ) ) { for ( const ele of templateClone.querySelectorAll( '.update-name' ) ) {
if ( ( ele.id || '' ).includes( 'petX' ) ) { if ( ( ele.id || '' ).includes( 'petX' ) ) {
ele.id = ele.id.replace( /petX/g, 'pet' + i ); ele.id = ele.id.replace( /petX/g, `pet${ i }` );
} }
if ( ele.getAttribute( 'for' ) ) { if ( ele.getAttribute( 'for' ) ) {
ele.setAttribute( 'for', ele.getAttribute( 'for' ).replace( /petX/g, 'pet' + i ) ); ele.setAttribute( 'for', ele.getAttribute( 'for' ).replace( /petX/g, `pet${ i }` ) );
} }
if ( ( ele.dataset && ele.dataset.var || '' ).includes( 'PETX' ) ) { if ( ( ele.dataset && ele.dataset.var || '' ).includes( 'PETX' ) ) {
ele.dataset.var = ele.dataset.var.replace( /PETX/g, 'PET' + i ); ele.dataset.var = ele.dataset.var.replace( /PETX/g, `PET${ i }` );
} }
} }
const breed = SavegameEditor._getPetData( i - 1, 'PET_BREED_OFFSET' ); const breed = SavegameEditor._getPetData( i - 1, 'PET_BREED_OFFSET' );
@@ -352,9 +379,9 @@ SavegameEditor = {
); );
if ( breedImgTmp ) { if ( breedImgTmp ) {
breedImg = breedImgTmp.cloneNode(); breedImg = breedImgTmp.cloneNode();
breedImg.id = 'petimage' + i; breedImg.id = `petimage${ i }`;
} }
get( 'container-pet' + i + '-breed' ).appendChild( breedImg ); get( `container-pet${ i }-breed` ).appendChild( breedImg );
const breedImg2 = breedImg.cloneNode(); const breedImg2 = breedImg.cloneNode();
breedImg2.id = ''; breedImg2.id = '';
pet_tab_label.appendChild( breedImg2 ); pet_tab_label.appendChild( breedImg2 );
@@ -382,59 +409,59 @@ SavegameEditor = {
} ); } );
}; };
dialogbtn.innerText = 'Change'; dialogbtn.innerText = 'Change';
get( 'container-pet' + i + '-breed' ).appendChild( dialogbtn ); get( `container-pet${ i }-breed` ).appendChild( dialogbtn );
get( 'container-pet' + i + '-gender' ).appendChild( select( 'pet' + i + '-gender', SavegameEditor.Constants.GENDERS, SavegameEditor._write_pet_value ) ); get( `container-pet${ i }-gender` ).appendChild( select( `pet${ i }-gender`, SavegameEditor.Constants.GENDERS, SavegameEditor._write_pet_value ) );
setValue( 'pet' + i + '-name', tempFile.readU16String( SavegameEditor.Constants.PET_OFFSET[ i - 1 ] + SavegameEditor.Constants.PET_NAME_OFFSET, 10 ) ); setValue( `pet${ i }-name`, tempFile.readU16String( SavegameEditor.Constants.PET_OFFSET[ i - 1 ] + SavegameEditor.Constants.PET_NAME_OFFSET, 10 ) );
const pet_tab_label_name = document.createElement( 'span' ); const pet_tab_label_name = document.createElement( 'span' );
pet_tab_label_name.innerText = getValue( 'pet' + i + '-name' ); pet_tab_label_name.innerText = getValue( `pet${ i }-name` );
pet_tab_label_name.className = 'pet' + i + '_name'; pet_tab_label_name.className = `pet${ i }_name`;
pet_tab_label.appendChild( pet_tab_label_name ); pet_tab_label.appendChild( pet_tab_label_name );
setValue( 'pet' + i + '-gender', SavegameEditor._getPetData( i - 1, 'PET_GENDER_OFFSET' ) ); setValue( `pet${ i }-gender`, SavegameEditor._getPetData( i - 1, 'PET_GENDER_OFFSET' ) );
get( 'input-pet' + i + '-name' ).addEventListener( 'change', SavegameEditor._write_pet_name ); get( `input-pet${ i }-name` ).addEventListener( 'change', SavegameEditor._write_pet_name );
setNumericRange( 'pet' + i + '-disc-played', 0, 2 ); setNumericRange( `pet${ i }-disc-played`, 0, 2 );
setValue( 'pet' + i + '-disc-played', tempFile.readU8( SavegameEditor.Constants[ 'PET' + i + '_COMP_DISC_PLAYED' ] ) ); setValue( `pet${ i }-disc-played`, tempFile.readU8( SavegameEditor.Constants[ `PET${ i }_COMP_DISC_PLAYED` ] ) );
get( 'number-pet' + i + '-disc-played' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-disc-played` ).addEventListener( 'change', SavegameEditor._write_pet_value );
setNumericRange( 'pet' + i + '-lure-played', 0, 2 ); setNumericRange( `pet${ i }-lure-played`, 0, 2 );
setValue( 'pet' + i + '-lure-played', tempFile.readU8( SavegameEditor.Constants[ 'PET' + i + '_COMP_LURE_PLAYED' ] ) ); setValue( `pet${ i }-lure-played`, tempFile.readU8( SavegameEditor.Constants[ `PET${ i }_COMP_LURE_PLAYED` ] ) );
get( 'number-pet' + i + '-lure-played' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-lure-played` ).addEventListener( 'change', SavegameEditor._write_pet_value );
setNumericRange( 'pet' + i + '-obed-played', 0, 2 ); setNumericRange( `pet${ i }-obed-played`, 0, 2 );
setValue( 'pet' + i + '-obed-played', tempFile.readU8( SavegameEditor.Constants[ 'PET' + i + '_COMP_OBED_PLAYED' ] ) ); setValue( `pet${ i }-obed-played`, tempFile.readU8( SavegameEditor.Constants[ `PET${ i }_COMP_OBED_PLAYED` ] ) );
get( 'number-pet' + i + '-obed-played' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-obed-played` ).addEventListener( 'change', SavegameEditor._write_pet_value );
if ( isDog ) { if ( isDog ) {
get( 'container-pet' + i + '-disc' ).appendChild( select( 'pet' + i + '-disc', SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) ); get( `container-pet${ i }-disc` ).appendChild( select( `pet${ i }-disc`, SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) );
setValue( 'pet' + i + '-disc', SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED1' ) ); setValue( `pet${ i }-disc`, SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED1' ) );
get( 'container-pet' + i + '-lure' ).appendChild( select( 'pet' + i + '-lure', SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) ); get( `container-pet${ i }-lure` ).appendChild( select( `pet${ i }-lure`, SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) );
setValue( 'pet' + i + '-lure', SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED3' ) ); setValue( `pet${ i }-lure`, SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED3' ) );
get( 'container-pet' + i + '-obedience' ).appendChild( select( 'pet' + i + '-obedience', SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) ); get( `container-pet${ i }-obedience` ).appendChild( select( `pet${ i }-obedience`, SavegameEditor.Constants.PET_COMP_RANKS, SavegameEditor._write_pet_value ) );
setValue( 'pet' + i + '-obedience', SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED2' ) ); setValue( `pet${ i }-obedience`, SavegameEditor._getPetData( i - 1, 'PET_COMP_HIGHEST_PLAYED2' ) );
} else { } else {
get( 'pet' + i + '_comp_outer' ).style.display = 'none'; get( `pet${ i }_comp_outer` ).style.display = 'none';
} }
const personality = SavegameEditor.Constants.personalities[ SavegameEditor._getPetData( i - 1, 'PET_PERSONALITIES_OFFSET_' + ( isDog ? 'DOG' : 'CAT' ) + '1', 8 ) ][ SavegameEditor._getPetData( i - 1, 'PET_PERSONALITIES_OFFSET_' + ( isDog ? 'DOG' : 'CAT' ) + '2', 8 ) ]; const personality = SavegameEditor.Constants.personalities[ SavegameEditor._getPetData( i - 1, 'PET_PERSONALITIES_OFFSET_' + ( isDog ? 'DOG' : 'CAT' ) + '1', 8 ) ][ SavegameEditor._getPetData( i - 1, 'PET_PERSONALITIES_OFFSET_' + ( isDog ? 'DOG' : 'CAT' ) + '2', 8 ) ];
setValue( 'pet' + i + '-personality', personality[ Number( SavegameEditor._getPetData( i - 1, 'PET_GENDER_OFFSET' ) ) ] ); setValue( `pet${ i }-personality`, personality[ Number( SavegameEditor._getPetData( i - 1, 'PET_GENDER_OFFSET' ) ) ] );
// Experimental // Experimental
setNumericRange( 'pet' + i + '-hunger', 0, 17529 ); setNumericRange( `pet${ i }-hunger`, 0, 17529 );
setNumericRange( 'pet' + i + '-thirst', 0, 17529 ); setNumericRange( `pet${ i }-thirst`, 0, 17529 );
setNumericRange( 'pet' + i + '-coat', 0, 17529 ); setNumericRange( `pet${ i }-coat`, 0, 17529 );
setValue( 'pet' + i + '-hunger', SavegameEditor._getPetData( i - 1, 'PET_HUNGER_OFFSET', 16 ) ); setValue( `pet${ i }-hunger`, SavegameEditor._getPetData( i - 1, 'PET_HUNGER_OFFSET', 16 ) );
setValue( 'pet' + i + '-thirst', SavegameEditor._getPetData( i - 1, 'PET_THIRST_OFFSET', 16 ) ); setValue( `pet${ i }-thirst`, SavegameEditor._getPetData( i - 1, 'PET_THIRST_OFFSET', 16 ) );
setValue( 'pet' + i + '-coat', SavegameEditor._getPetData( i - 1, 'PET_COAT_OFFSET', 16 ) ); setValue( `pet${ i }-coat`, SavegameEditor._getPetData( i - 1, 'PET_COAT_OFFSET', 16 ) );
get( 'number-pet' + i + '-hunger' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-hunger` ).addEventListener( 'change', SavegameEditor._write_pet_value );
get( 'number-pet' + i + '-thirst' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-thirst` ).addEventListener( 'change', SavegameEditor._write_pet_value );
get( 'number-pet' + i + '-coat' ).addEventListener( 'change', SavegameEditor._write_pet_value ); get( `number-pet${ i }-coat` ).addEventListener( 'change', SavegameEditor._write_pet_value );
setNumericRange( 'pet' + i + '-level', 0, 99999 ); setNumericRange( `pet${ i }-level`, 0, 99999 );
const points = SavegameEditor._getPetData( i - 1, ( isDog ? 'PET_POINTS_OFFSET_DOG' : 'PET_POINTS_OFFSET_CAT' ), 32 ); const points = SavegameEditor._getPetData( i - 1, ( isDog ? 'PET_POINTS_OFFSET_DOG' : 'PET_POINTS_OFFSET_CAT' ), 32 );
for ( let j = 0; j < level_borders.length; j++ ) { for ( let j = 0; j < level_borders.length; j++ ) {
if ( points >= level_borders[ j ][ 0 ] && points <= level_borders[ j ][ 1 ] ) { if ( points >= level_borders[ j ][ 0 ] && points <= level_borders[ j ][ 1 ] ) {
setValue( 'pet' + i + '-level', j ); setValue( `pet${ i }-level`, j );
break; break;
} }
} }
const level_ele = get( 'number-pet' + i + '-level' ); const level_ele = get( `number-pet${ i }-level` );
level_ele.dataset.is_dog = isDog; level_ele.dataset.is_dog = isDog;
level_ele.addEventListener( 'change', SavegameEditor._mark_as_changed ); level_ele.addEventListener( 'change', SavegameEditor._mark_as_changed );
} }

View File

@@ -217,6 +217,7 @@ struct furnitures_t {
u8 item0x1F0 @ 0x1F0 [[name("Comfy Couch")]]; u8 item0x1F0 @ 0x1F0 [[name("Comfy Couch")]];
u8 item0x1FB @ 0x1FB [[name("Designer Chair")]]; u8 item0x1FB @ 0x1FB [[name("Designer Chair")]];
u8 item0x1F2 @ 0x1F2 [[name("Dining Table Set")]]; u8 item0x1F2 @ 0x1F2 [[name("Dining Table Set")]];
u8 item0x206 @ 0x206 [[name("Display Case")]];
u8 item0x1E7 @ 0x1E7 [[name("Display Shelves")]]; u8 item0x1E7 @ 0x1E7 [[name("Display Shelves")]];
u8 item0x1ED @ 0x1ED [[name("Dresser")]]; u8 item0x1ED @ 0x1ED [[name("Dresser")]];
u8 item0x205 @ 0x205 [[name("Electronic Fan")]]; u8 item0x205 @ 0x205 [[name("Electronic Fan")]];