Created
April 7, 2019 23:32
-
-
Save lmcintyre/770582cbd14d140abbfeb8ab7c993b90 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
folder key (xx/XXXX) suffix type | |
00 wl(l|m|s) wall | |
00 wlc wall unknown | |
01 rf(l|m|s) roof | |
01 rfc roof unknown | |
02 dor door | |
03 wid window | |
04 fnc fence | |
05 osg ornament signboard | |
06 orf ornament, roof | |
07 owl ornament, wall | |
0000 ------------------------- ? | |
0001 ------------------------- merchant | |
0002 ------------------------- restaurant | |
0003 ------------------------- armor shop | |
0004 ------------------------- weapon shop | |
0005 ------------------------- moogle | |
0006 ------------------------- chocobo | |
0007 ------------------------- paissa | |
0008 ------------------------- carbuncle | |
0009 ------------------------- shirogane castle walls | |
0010 ------------------------- otter | |
house part sgb format | |
bgcommon/hou/craft/bil/01/0008/asset/rfl_t4_m0008.sgb | |
placeholder based | |
bgcommon/hou/craft/bil/xx/XXXX/asset/yyy_t4_mXXXX.sgb | |
spawning house format? | |
bgcommon/hou/dyna/com/(l|m|s)_(rof|wal|wid|etc)/XXXX/asset/com_(l|m|s)_(part)XXXX.sgb | |
bgcommon/hou/dyna/(com|e1h0|s1h0|w1h0|f1h0)/(l|m|s)_(rof|wal|wid...)/XXXX/asset/(com|e1h0|s1h0|w1h0|f1h0)_(l|m|s)_(part)XXXX.sgb | |
window, door have format com_(co|ci|ca|cb)_ | |
presumably outdoor/indoor or a/b | |
almost not necessary due to e1h0_30_l_house.sgb etc | |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | |
Create a house? | |
From packets, we need | |
roof rof | |
facade wal | |
window wid | |
door dor | |
----------- From folders, we need | |
fence c_fnc | |
Let's make a carbuncle house: | |
bgcommon/hou/dyna/com/l_rof/0008/asset/com_l_rof0008.sgb | |
bgcommon/hou/dyna/com/l_wal/0008/asset/com_l_wal0008.sgb | |
bgcommon/hou/dyna/com/wid/0008/asset/com_co_wid0008.sgb | |
bgcommon/hou/dyna/com/dor/0008/asset/com_co_dor0008.sgb | |
bgcommon/hou/dyna/com/c_fnc/0008/asset/com_f_fnc0008a.sgb | |
bgcommon/hou/dyna/com/c_fnc/0008/asset/com_f_fnc0008b.sgb | |
bgcommon/hou/dyna/com/c_fnc/0008/asset/com_f_fnc0008c.sgb | |
bgcommon/hou/dyna/com/c_fnc/0008/asset/com_f_fnc0008d.sgb | |
From test it looks like something must be controlling where fnc, dor, and wid go. | |
In Carbuncle test, the house and walls were in the right spot, but the door, windows, and fence was messed up. | |
Latest lead: | |
bgcommon/hou/craft/bil/house/bil_l_house.sgb | |
bil_l_base.mdl | |
Notes on bil_l_base | |
Mesh part headers at 604 (0x25C) | |
String offsets in bgcommon/hou/craft/bil/house/bgparts/bil_l_base.mdl for mtrl names start at 652 in Definition part (652 in 010 that is open) | |
Parts in bil_l_house do not follow same folder convention as hou/dyna, what is this? | Not sure what I meant by this | |
bil_l_base.mdl | |
ModelDefinition [unknowns] | |
EAD70242 0300 0000 0000 0300 0000 [0000 0000 0000 0000 0107 0000 00 10 0024 744A 0000 0000 0000 0000 0202 0000 0000 0000 0000 0000 0000 0000] | |
ModelHeaders (3) | |
0000 0200 8296 3346 0000 1044 0200 0000 0300 0000 0000 0000 0200 0000 0000 0000 8437 0000 0000 0000 0000 0000 88320000 70110000 FC04 0000 8437 0000 | |
0000 0000 5209 CA47 0000 1045 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 00000000 0000 0000 0000 0000 | |
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000000 00000000 0000 0000 0000 0000 | |
Random additional 120 bytes (40 byte chunks, just for organization) no idea why it is there, messes up Coinach | |
0000 0000 0000 0000 0200 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 | |
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 | |
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 | |
MeshHeaders (3) | |
1F010000 E0040000 0000 0000 0000 FF00 00000000 00000000 F8080000 00000000 08 10 00 02 | |
60000000 08010000 0100 0000 0000 FF00 E0040000 E81A0000 E81D0000 00000000 08 10 00 02 | |
9C000000 D0020000 0200 0000 0000 FF00 E8050000 E8230000 C8280000 00000000 08 10 00 02 | |
Material string offsets (3 materials) | |
00000000 3C000000 78000000 | |
Bone indices, int32 0, no bones, no further data | |
00000000 | |
Padding... (bytes to skip) [skipped] | |
(03) [00 00 00] | |
Bounding boxes | |
0000C8C1 000000C0 0000A8C1 0000803F 0000C841 00000000 0000A841 0000803F | |
0000C8C1 000000C0 0000A8C1 0000803F 0000C841 00000000 0000A841 0000803F | |
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
Fixed loading this and osg_t4_(anything) by skipping 120 bytes after modelheaders if the filename has "bil_" and "_base", or "osg_t4" | |
Turns out bil really does mean company workshop. Was the models for that. | |
Now that things load, look in 020000 for anything referencing how to build a house. iirc there was a an .sgb | |
in there like e1h0_l_house.sgb or something. Try looking for it again, it might have instructions on how to put together a real house. | |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
Path things | |
For Blueprint: | |
bg/ffxiv/(e1h0|s1h0|w1h0|f1h0)/hou/dyna/house/(e1h0|s1h0|w1h0|f1h0)_(plotnum)_(l|m|s)_house.sgb | |
Thinking that maybe the game loads this for empty plots. | |
When a plot needs to be not-empty, the game loads this, but replaces the loaded SGBs with: Correct asset? | |
For example, | |
bg/ffxiv/est_e1/hou/dyna/house/e1h0_30_l_house.sgb | |
bg/ffxiv/sea_s1/hou/dyna/house/s1h0_03_s_house.sgb | |
bg/ffxiv/sea_s1/hou/dyna/house/s1h0_01_m_house.sgb | |
bg/ffxiv/sea_s1/hou/dyna/house/s1h0_02_l_house.sgb | |
loads | |
bg/ffxiv/est_e1/hou/dyna/l_rof/0000/asset/e1h0_l_rof0000.sgb (this does not reference a model) | |
but if the plot should not be empty, | |
For HousingExterior.json: | |
(bg|common if region com)/(ffxiv/region id or /com if com)/hou/dyna(/com if com)/l_rof/XXXX/asset/(region id)_l_rofXXXX.sgb | |
bg/ffxiv/(est_e1|sea_s1|fst_f1|wil_w1)/hou/dyna/(.*?)/(0000)/asset/(e1h0|s1h0|f1h0|w1h0)_(.*?)(0000)(\w?).sgb | |
Missing opt aspects. osg, orf, owl are in format | |
bgcommon/hou/dyna/opt/rf/0012/asset/opt_rf_m0012.sgb | |
From | |
bgcommon/hou/dyna/opt/rf/0000/asset/opt_rf_m0000.sgb | |
Patterns: | |
bg/ffxiv/(est_e1|sea_s1|fst_f1|wil_w1)/hou/dyna/(.*?)/(0000)/asset/(e1h0|s1h0|f1h0|w1h0)_(.*?)(0000)(\w?).sgb | |
bgcommon/hou/dyna/(e1h0|s1h0|f1h0|w1h0)/(.*?)/(0000)/asset/(e1h0|s1h0|f1h0|w1h0)_(.*?)(0000)(\w?).sgb | |
bgcommon/hou/dyna/opt/(.*?)/(0000)/asset/opt_(.*?)(0000).sgb | |
Function handles the rest | |
HousingInterior: | |
2nd column (1) in HousingInterior is the model/tex key | |
bgcommon/hou/dyna/(part)/00XX/(pathformat) | |
9 walls mat/wl material/rom_wl_200XXa.mtrl | |
10 floor mat/fl material/rom_fl_200XXa.mtrl | |
11 lamp lmp/lp asset/lmp_s0_m00XX.sgb | |
HousingExterior: | |
1st column is 100% asset id, follows 1/1/1 2/2/2 3/3/3 4/4/4 5/5/5... etc pattern for 3rd column 20 entries | |
Not only this, but can map as such: | |
If 3rd column is 20 | |
0001 merchant | |
0002 restaurant | |
0003 armor shop | |
0004 weapon shop | |
0005 moogle | |
0006 chocobo | |
0007 paissa | |
0008 carbuncle | |
0009 shirogane castle walls | |
0010 otter | |
If not | |
0001 wood | |
0002 composite | |
0003 stone | |
Second column (1) is Fixturetype | |
1 roof | |
2 wall | |
3 windows | |
4 door | |
5 roof decoration | |
6 wall decoration | |
7 signboard | |
8 fence | |
3rd column must be some kind of intended use | |
Can predict path for part with this | |
20 United bgcommon/hou/dyna/com/(part)/XXXX/asset/(partetc) | |
22 Riviera bg/ffxiv/sea_s1/hou/dyna/(part)/XXXX/asset/(partetc) | |
23 Glade bg/ffxiv/fst_f1/hou/dyna/(part)/XXXX/asset/(partetc) | |
24 Oasis bg/ffxiv/wil_w1/hou/dyna/(part)/XXXX/asset/(partetc) | |
2402 Hingan bg/ffxiv/est_e1/hou/dyna/(part)/XXXX/asset/(partetc) | |
513-534 door | |
1025-1090 roof | |
1537-1558 roofdec | |
2049-2070 signboard | |
2561-2582 windows | |
3073-3097 fence | |
3585-3641 walls | |
4097-4118 walldec | |
opt_ prefix assets have different fixturekeys and always have 20 for intendeduse | |
riviera placard 2049 1 | - riviera | |
riviera hanging placard 2050 2 | - riviera | |
riviera banner 2051 3 | - riviera | |
glade hanging placards 2052 4 | - glade | |
glade placard 2053 5 | - glade | |
glade banner 2054 6 | - glade | |
oasis hanging placard 2055 7 | - oasis | |
oasis placard 2056 8 | - oasis | |
oasis banner 2057 9 | - oasis | |
weapon shop 2058 11 | - united | |
armor shop 2059 12 | - united | |
merchant 2060 13 | - united | |
restaurant 2061 14 | - united | |
moogle 2062 15 | - united | |
chocobo 2063 16 | - united | |
paissa 2064 17 | - united | |
carbuncle 2065 18 | - united | |
shirogane c 2066 19 | - united | |
hingan placard mokuzo 2067 101 | - hingan | |
hingan placard nanpu 2068 102 | - hingan | |
hingan placard kura zukuri 2069 103 | - hingan | |
otter 2070 20 | - united | |
TODO: maybe index the transforms in blueprints rather than keeping them separate | |
on retail, a large house info being put onto a small plot will put the objects at | |
the positions for a small house, probably because it just reads "put a ____ wall at this plot" and | |
size doesn't matter | |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
CSV Relations | |
VaseFlower.csv contains values that map interior wall indexes (texturekeys) to their string representations | |
^ Unnecessary with stains | |
PlaceName.csv contains the string of the place theme that int 20, 22, 24, 2402 map to. For example, 2402 is Hingan themed and PlaceName 2402 is Hingashi | |
Items.csv contains the key of the housing type in the Stain column. | |
For example, | |
Riviera Mansion Walls (Composite) has Stain of 3599. This key in HousingExterior maps to 3599,2,2,22,2,bg/ffxiv/sea_s1/hou/dyna/l_wal/0002/asset/s1h0_l_wal0002.sgb | |
Oasis Cottage Permit (Stone) has Stain of 262165. This key in HousingPreset maps to "oasis stone cottage" and refers to all items IDs from Item.csv (and thus, Stains) to create the house. | |
Carbuncle House Walls has Stain of 327703. This key in HousingUnitedExterior provides each of the values necessary to create a Carbuncle house. | |
Because Stains always end up mapping to a model key in HousingExterior, and we know how to create house paths based on these keys, we can create houses from item IDs, which also allows us to map strings to models. | |
Extends to all housing items. Furniture, yard items, exterior, interior. | |
HousingLandSet.csv contains house sizes, 0-2, for all plots, 0-60. Unsure of what follows. Plot costs? Height is wrong, but might need it for house placement. | |
Plot spaces are a somewhat better solution, but could use above to determine plot locations to dynamically support new districts | |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
SGB Difference in contained SGBs: | |
check sgbdifferences.png for a better thing | |
or, screenshot_690.png if you're lazy which you are | |
large: | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000a.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000b.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000c.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000d.sgb | |
bgcommon/hou/dyna/s1h0/dor/0000/asset/s1h0_co_dor0000.sgb | |
bgcommon/hou/dyna/s1h0/wid/0000/asset/s1h0_co_wid0000.sgb | |
bgcommon/hou/dyna/opt/rf/0000/asset/opt_rf_m0000.sgb | |
bgcommon/hou/dyna/opt/sg/0000/asset/opt_sg_m0000.sgb | |
bgcommon/hou/dyna/opt/wl/0000/asset/opt_wl_m0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_rof/0000/asset/s1h0_s_rof0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/m_rof/0000/asset/s1h0_m_rof0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/m_wal/0000/asset/s1h0_m_wal0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/l_rof/0000/asset/s1h0_l_rof0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/l_wal/0000/asset/s1h0_l_wal0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_wal/0000/asset/s1h0_s_wal0000.sgb | |
bgcommon/hou/dyna/s1h0/dor/0000/asset/s1h0_ca_dor0000.sgb | |
bgcommon/hou/common/blank/asset/com_l_blank.sgb | |
medium: | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000a.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000b.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000c.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000d.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_wal/0000/asset/s1h0_s_wal0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_rof/0000/asset/s1h0_s_rof0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/m_wal/0000/asset/s1h0_m_wal0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/m_rof/0000/asset/s1h0_m_rof0000.sgb | |
bgcommon/hou/dyna/s1h0/dor/0000/asset/s1h0_co_dor0000.sgb | |
bgcommon/hou/dyna/s1h0/wid/0000/asset/s1h0_co_wid0000.sgb | |
bgcommon/hou/dyna/opt/rf/0000/asset/opt_rf_m0000.sgb | |
bgcommon/hou/dyna/opt/wl/0000/asset/opt_wl_m0000.sgb | |
bgcommon/hou/dyna/opt/sg/0000/asset/opt_sg_m0000.sgb | |
bgcommon/hou/common/blank/asset/com_m_blank.sgb | |
small: | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000a.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000b.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000c.sgb | |
bg/ffxiv/sea_s1/hou/dyna/c_fnc/0000/asset/s1h0_f_fnc0000d.sgb | |
bgcommon/hou/dyna/s1h0/dor/0000/asset/s1h0_co_dor0000.sgb | |
bgcommon/hou/dyna/s1h0/wid/0000/asset/s1h0_co_wid0000.sgb | |
bgcommon/hou/dyna/opt/rf/0000/asset/opt_rf_m0000.sgb | |
bgcommon/hou/dyna/opt/sg/0000/asset/opt_sg_m0000.sgb | |
bgcommon/hou/dyna/opt/wl/0000/asset/opt_wl_m0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_wal/0000/asset/s1h0_s_wal0000.sgb | |
bg/ffxiv/sea_s1/hou/dyna/s_rof/0000/asset/s1h0_s_rof0000.sgb | |
bgcommon/hou/common/blank/asset/com_s_blank.sgb | |
---------------------------------------------------------------------------------------------------------- | |
In-game text for fixture info. Might want to instead use the int in item search/ui category | |
Housing is 64-80 in ItemUICategory, sounds easiest. Get all rows from Item with that range, | |
keep track of the id, string name and stain | |
Exterior Fixtures | |
Construction Permit | |
Roof | |
Exterior Wall | |
Window | |
Door | |
Roof Decoration | |
Exterior Wall Decoration | |
Placard | |
Fence | |
Interior Fixtures | |
Interior Wall | |
Flooring | |
Ceiling Light | |
---------------------------------------------------------------------------------------------------------- | |
Bg {ffxiv/sea_s1/hou/s1h1/level/s1h1} SaintCoinach.Text.XivString | |
Name {s1h1} SaintCoinach.Text.XivString | |
---------------------------------------------------------------------------------------------------------- | |
write stuff about extra broken water meshes and house walls | |
also why do toti not go here anymore |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment