diff --git a/assets/archive/Poker Gamedoc.docx b/archive/assets archive/Poker Gamedoc.docx
similarity index 100%
rename from assets/archive/Poker Gamedoc.docx
rename to archive/assets archive/Poker Gamedoc.docx
diff --git a/assets/archive/archive/models/Poker Chip/Single Chip.blend b/archive/assets archive/archive/models/Poker Chip/Single Chip.blend
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/Single Chip.blend
rename to archive/assets archive/archive/models/Poker Chip/Single Chip.blend
diff --git a/assets/archive/archive/models/Poker Chip/Single Chip.blend1 b/archive/assets archive/archive/models/Poker Chip/Single Chip.blend1
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/Single Chip.blend1
rename to archive/assets archive/archive/models/Poker Chip/Single Chip.blend1
diff --git a/assets/archive/archive/models/Poker Chip/Single Chip.obj b/archive/assets archive/archive/models/Poker Chip/Single Chip.obj
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/Single Chip.obj
rename to archive/assets archive/archive/models/Poker Chip/Single Chip.obj
diff --git a/assets/archive/archive/models/Poker Chip/Texture.pdn b/archive/assets archive/archive/models/Poker Chip/Texture.pdn
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/Texture.pdn
rename to archive/assets archive/archive/models/Poker Chip/Texture.pdn
diff --git a/assets/archive/archive/models/Poker Chip/Texture.png b/archive/assets archive/archive/models/Poker Chip/Texture.png
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/Texture.png
rename to archive/assets archive/archive/models/Poker Chip/Texture.png
diff --git a/assets/archive/archive/models/Poker Chip/UV Wrap.png b/archive/assets archive/archive/models/Poker Chip/UV Wrap.png
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/UV Wrap.png
rename to archive/assets archive/archive/models/Poker Chip/UV Wrap.png
diff --git a/assets/archive/archive/models/Poker Chip/pokerchip.png b/archive/assets archive/archive/models/Poker Chip/pokerchip.png
similarity index 100%
rename from assets/archive/archive/models/Poker Chip/pokerchip.png
rename to archive/assets archive/archive/models/Poker Chip/pokerchip.png
diff --git a/assets/archive/archive/models/Poker Table/Poker Table.blend b/archive/assets archive/archive/models/Poker Table/Poker Table.blend
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Poker Table.blend
rename to archive/assets archive/archive/models/Poker Table/Poker Table.blend
diff --git a/assets/archive/archive/models/Poker Table/Poker Table.blend1 b/archive/assets archive/archive/models/Poker Table/Poker Table.blend1
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Poker Table.blend1
rename to archive/assets archive/archive/models/Poker Table/Poker Table.blend1
diff --git a/assets/archive/archive/models/Poker Table/Poker Table.fbx b/archive/assets archive/archive/models/Poker Table/Poker Table.fbx
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Poker Table.fbx
rename to archive/assets archive/archive/models/Poker Table/Poker Table.fbx
diff --git a/assets/archive/archive/models/Poker Table/Poker Table.obj b/archive/assets archive/archive/models/Poker Table/Poker Table.obj
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Poker Table.obj
rename to archive/assets archive/archive/models/Poker Table/Poker Table.obj
diff --git a/assets/archive/archive/models/Poker Table/Texture.pdn b/archive/assets archive/archive/models/Poker Table/Texture.pdn
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Texture.pdn
rename to archive/assets archive/archive/models/Poker Table/Texture.pdn
diff --git a/assets/archive/archive/models/Poker Table/Texture.png b/archive/assets archive/archive/models/Poker Table/Texture.png
similarity index 100%
rename from assets/archive/archive/models/Poker Table/Texture.png
rename to archive/assets archive/archive/models/Poker Table/Texture.png
diff --git a/assets/archive/archive/models/Poker Table/UV Layout.png b/archive/assets archive/archive/models/Poker Table/UV Layout.png
similarity index 100%
rename from assets/archive/archive/models/Poker Table/UV Layout.png
rename to archive/assets archive/archive/models/Poker Table/UV Layout.png
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/poker_table.blend b/archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.blend
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/poker_table.blend
rename to archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.blend
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/poker_table.fbx b/archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.fbx
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/poker_table.fbx
rename to archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.fbx
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/poker_table.mtl b/archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.mtl
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/poker_table.mtl
rename to archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.mtl
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/poker_table.obj b/archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.obj
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/poker_table.obj
rename to archive/assets archive/archive/models/Poker Table/poker table_del/poker_table.obj
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric2_albedo.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric2_albedo.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric2_albedo.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric2_albedo.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_AO.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_AO.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_AO.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_AO.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_albedo.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_albedo.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_albedo.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_albedo.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_metallic.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_metallic.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_metallic.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_metallic.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_normal.png b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_normal.png
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_normal.png
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_normal.png
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_roughness.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_roughness.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/fabric_roughness.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/fabric_roughness.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/wood_AO.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_AO.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/wood_AO.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_AO.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/wood_albedo.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_albedo.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/wood_albedo.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_albedo.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/wood_metallic.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_metallic.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/wood_metallic.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_metallic.jpg
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/wood_normal.png b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_normal.png
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/wood_normal.png
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_normal.png
diff --git a/assets/archive/archive/models/Poker Table/poker table_del/textures/wood_roughness.jpg b/archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_roughness.jpg
similarity index 100%
rename from assets/archive/archive/models/Poker Table/poker table_del/textures/wood_roughness.jpg
rename to archive/assets archive/archive/models/Poker Table/poker table_del/textures/wood_roughness.jpg
diff --git a/assets/archive/archive/models/Poker Table/pokertable.png b/archive/assets archive/archive/models/Poker Table/pokertable.png
similarity index 100%
rename from assets/archive/archive/models/Poker Table/pokertable.png
rename to archive/assets archive/archive/models/Poker Table/pokertable.png
diff --git a/assets/archive/archive/world/chunks/0_0_0.txt b/archive/assets archive/archive/world/chunks/0_0_0.txt
similarity index 100%
rename from assets/archive/archive/world/chunks/0_0_0.txt
rename to archive/assets archive/archive/world/chunks/0_0_0.txt
diff --git a/assets/archive/archive/world/world.txt b/archive/assets archive/archive/world/world.txt
similarity index 100%
rename from assets/archive/archive/world/world.txt
rename to archive/assets archive/archive/world/world.txt
diff --git a/assets/archive/betting mockup.png b/archive/assets archive/betting mockup.png
similarity index 100%
rename from assets/archive/betting mockup.png
rename to archive/assets archive/betting mockup.png
diff --git a/assets/archive/locale/language/en-US.csv b/archive/assets archive/locale/language/en-US.csv
similarity index 100%
rename from assets/archive/locale/language/en-US.csv
rename to archive/assets archive/locale/language/en-US.csv
diff --git a/assets/archive/palette_color.png b/archive/assets archive/palette_color.png
similarity index 100%
rename from assets/archive/palette_color.png
rename to archive/assets archive/palette_color.png
diff --git a/assets/archive/penny-blink.png b/archive/assets archive/penny-blink.png
similarity index 100%
rename from assets/archive/penny-blink.png
rename to archive/assets archive/penny-blink.png
diff --git a/assets/archive/poker/cards_normal.png b/archive/assets archive/poker/cards_normal.png
similarity index 100%
rename from assets/archive/poker/cards_normal.png
rename to archive/assets archive/poker/cards_normal.png
diff --git a/assets/archive/poker/characters/jenny/Design/bot.psd b/archive/assets archive/poker/characters/jenny/Design/bot.psd
similarity index 100%
rename from assets/archive/poker/characters/jenny/Design/bot.psd
rename to archive/assets archive/poker/characters/jenny/Design/bot.psd
diff --git a/assets/archive/poker/characters/jenny/Design/screen_composition.png b/archive/assets archive/poker/characters/jenny/Design/screen_composition.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/Design/screen_composition.png
rename to archive/assets archive/poker/characters/jenny/Design/screen_composition.png
diff --git a/assets/archive/poker/characters/jenny/Design/sprite_base.png b/archive/assets archive/poker/characters/jenny/Design/sprite_base.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/Design/sprite_base.png
rename to archive/assets archive/poker/characters/jenny/Design/sprite_base.png
diff --git a/assets/archive/poker/characters/jenny/Design/sprite_main.png b/archive/assets archive/poker/characters/jenny/Design/sprite_main.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/Design/sprite_main.png
rename to archive/assets archive/poker/characters/jenny/Design/sprite_main.png
diff --git a/assets/archive/poker/characters/jenny/character.xml b/archive/assets archive/poker/characters/jenny/character.xml
similarity index 100%
rename from assets/archive/poker/characters/jenny/character.xml
rename to archive/assets archive/poker/characters/jenny/character.xml
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635756337.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635756337.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635756337.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635756337.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635800652.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635800652.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635800652.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635800652.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635903680.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635903680.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635903680.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635903680.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635915517.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635915517.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635915517.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635915517.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635983572.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635983572.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635983572.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635983572.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635992183.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635992183.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635992183.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635992183.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635992915.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635992915.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635992915.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635992915.png
diff --git a/assets/archive/poker/characters/jenny/concept/Attachment_1635995171.png b/archive/assets archive/poker/characters/jenny/concept/Attachment_1635995171.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/Attachment_1635995171.png
rename to archive/assets archive/poker/characters/jenny/concept/Attachment_1635995171.png
diff --git a/assets/archive/poker/characters/jenny/concept/gdf8rgvc.jpg b/archive/assets archive/poker/characters/jenny/concept/gdf8rgvc.jpg
similarity index 100%
rename from assets/archive/poker/characters/jenny/concept/gdf8rgvc.jpg
rename to archive/assets archive/poker/characters/jenny/concept/gdf8rgvc.jpg
diff --git a/assets/archive/poker/characters/jenny/sprites/base.png b/archive/assets archive/poker/characters/jenny/sprites/base.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/base.png
rename to archive/assets archive/poker/characters/jenny/sprites/base.png
diff --git a/assets/archive/poker/characters/jenny/sprites/eyes/eyes0.png b/archive/assets archive/poker/characters/jenny/sprites/eyes/eyes0.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/eyes/eyes0.png
rename to archive/assets archive/poker/characters/jenny/sprites/eyes/eyes0.png
diff --git a/assets/archive/poker/characters/jenny/sprites/eyes/eyes1.png b/archive/assets archive/poker/characters/jenny/sprites/eyes/eyes1.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/eyes/eyes1.png
rename to archive/assets archive/poker/characters/jenny/sprites/eyes/eyes1.png
diff --git a/assets/archive/poker/characters/jenny/sprites/eyes/eyes2.png b/archive/assets archive/poker/characters/jenny/sprites/eyes/eyes2.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/eyes/eyes2.png
rename to archive/assets archive/poker/characters/jenny/sprites/eyes/eyes2.png
diff --git a/assets/archive/poker/characters/jenny/sprites/visors/visor0.png b/archive/assets archive/poker/characters/jenny/sprites/visors/visor0.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/visors/visor0.png
rename to archive/assets archive/poker/characters/jenny/sprites/visors/visor0.png
diff --git a/assets/archive/poker/characters/jenny/sprites/visors/visor1.png b/archive/assets archive/poker/characters/jenny/sprites/visors/visor1.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/visors/visor1.png
rename to archive/assets archive/poker/characters/jenny/sprites/visors/visor1.png
diff --git a/assets/archive/poker/characters/jenny/sprites/visors/visor2.png b/archive/assets archive/poker/characters/jenny/sprites/visors/visor2.png
similarity index 100%
rename from assets/archive/poker/characters/jenny/sprites/visors/visor2.png
rename to archive/assets archive/poker/characters/jenny/sprites/visors/visor2.png
diff --git a/assets/archive/poker/characters/julie/character.xml b/archive/assets archive/poker/characters/julie/character.xml
similarity index 100%
rename from assets/archive/poker/characters/julie/character.xml
rename to archive/assets archive/poker/characters/julie/character.xml
diff --git a/assets/archive/poker/characters/julie/concept/idol2s.png b/archive/assets archive/poker/characters/julie/concept/idol2s.png
similarity index 100%
rename from assets/archive/poker/characters/julie/concept/idol2s.png
rename to archive/assets archive/poker/characters/julie/concept/idol2s.png
diff --git a/assets/archive/poker/characters/julie/concept/idol_sample_b.png b/archive/assets archive/poker/characters/julie/concept/idol_sample_b.png
similarity index 100%
rename from assets/archive/poker/characters/julie/concept/idol_sample_b.png
rename to archive/assets archive/poker/characters/julie/concept/idol_sample_b.png
diff --git a/assets/archive/poker/characters/julie/concept/shotgun.png b/archive/assets archive/poker/characters/julie/concept/shotgun.png
similarity index 100%
rename from assets/archive/poker/characters/julie/concept/shotgun.png
rename to archive/assets archive/poker/characters/julie/concept/shotgun.png
diff --git a/assets/archive/poker/characters/julie/concept/test2.png b/archive/assets archive/poker/characters/julie/concept/test2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/concept/test2.png
rename to archive/assets archive/poker/characters/julie/concept/test2.png
diff --git a/assets/archive/poker/characters/julie/design/idol.psd b/archive/assets archive/poker/characters/julie/design/idol.psd
similarity index 100%
rename from assets/archive/poker/characters/julie/design/idol.psd
rename to archive/assets archive/poker/characters/julie/design/idol.psd
diff --git a/assets/archive/poker/characters/julie/design/screen_composition.png b/archive/assets archive/poker/characters/julie/design/screen_composition.png
similarity index 100%
rename from assets/archive/poker/characters/julie/design/screen_composition.png
rename to archive/assets archive/poker/characters/julie/design/screen_composition.png
diff --git a/assets/archive/poker/characters/julie/design/screen_composition_b.png b/archive/assets archive/poker/characters/julie/design/screen_composition_b.png
similarity index 100%
rename from assets/archive/poker/characters/julie/design/screen_composition_b.png
rename to archive/assets archive/poker/characters/julie/design/screen_composition_b.png
diff --git a/assets/archive/poker/characters/julie/design/sprite_base.png b/archive/assets archive/poker/characters/julie/design/sprite_base.png
similarity index 100%
rename from assets/archive/poker/characters/julie/design/sprite_base.png
rename to archive/assets archive/poker/characters/julie/design/sprite_base.png
diff --git a/assets/archive/poker/characters/julie/design/sprite_main_a.png b/archive/assets archive/poker/characters/julie/design/sprite_main_a.png
similarity index 100%
rename from assets/archive/poker/characters/julie/design/sprite_main_a.png
rename to archive/assets archive/poker/characters/julie/design/sprite_main_a.png
diff --git a/assets/archive/poker/characters/julie/design/sprite_main_b.png b/archive/assets archive/poker/characters/julie/design/sprite_main_b.png
similarity index 100%
rename from assets/archive/poker/characters/julie/design/sprite_main_b.png
rename to archive/assets archive/poker/characters/julie/design/sprite_main_b.png
diff --git a/assets/archive/poker/characters/julie/sprites/base.png b/archive/assets archive/poker/characters/julie/sprites/base.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/base.png
rename to archive/assets archive/poker/characters/julie/sprites/base.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_0.png b/archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_0.png
rename to archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_1.png b/archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_1.png
rename to archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_2.png b/archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_2.png
rename to archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_3.png b/archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_3.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyebrows/eyebrows_3.png
rename to archive/assets archive/poker/characters/julie/sprites/eyebrows/eyebrows_3.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyes/eyes_0.png b/archive/assets archive/poker/characters/julie/sprites/eyes/eyes_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyes/eyes_0.png
rename to archive/assets archive/poker/characters/julie/sprites/eyes/eyes_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyes/eyes_1.png b/archive/assets archive/poker/characters/julie/sprites/eyes/eyes_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyes/eyes_1.png
rename to archive/assets archive/poker/characters/julie/sprites/eyes/eyes_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyes/eyes_2.png b/archive/assets archive/poker/characters/julie/sprites/eyes/eyes_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyes/eyes_2.png
rename to archive/assets archive/poker/characters/julie/sprites/eyes/eyes_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/eyes/eyes_3.png b/archive/assets archive/poker/characters/julie/sprites/eyes/eyes_3.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/eyes/eyes_3.png
rename to archive/assets archive/poker/characters/julie/sprites/eyes/eyes_3.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_0_0.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_0_0.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_0_1.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_0_1.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_0_2.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_0_2.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_0_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_1_0.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_1_0.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_1_1.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_1_1.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_1_2.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_1_2.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_1_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_2_0.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_2_0.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_2_1.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_2_1.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_2_2.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_2_2.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_2_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_3_0.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_3_0.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_3_1.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_3_1.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_1.png
diff --git a/assets/archive/poker/characters/julie/sprites/mouth/mouth_3_2.png b/archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_2.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/mouth/mouth_3_2.png
rename to archive/assets archive/poker/characters/julie/sprites/mouth/mouth_3_2.png
diff --git a/assets/archive/poker/characters/julie/sprites/sunglasses/sunglasses_0.png b/archive/assets archive/poker/characters/julie/sprites/sunglasses/sunglasses_0.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/sunglasses/sunglasses_0.png
rename to archive/assets archive/poker/characters/julie/sprites/sunglasses/sunglasses_0.png
diff --git a/assets/archive/poker/characters/julie/sprites/sunglasses/sunglasses_1.png b/archive/assets archive/poker/characters/julie/sprites/sunglasses/sunglasses_1.png
similarity index 100%
rename from assets/archive/poker/characters/julie/sprites/sunglasses/sunglasses_1.png
rename to archive/assets archive/poker/characters/julie/sprites/sunglasses/sunglasses_1.png
diff --git a/assets/archive/poker/characters/lucy/character.xml b/archive/assets archive/poker/characters/lucy/character.xml
similarity index 100%
rename from assets/archive/poker/characters/lucy/character.xml
rename to archive/assets archive/poker/characters/lucy/character.xml
diff --git a/assets/archive/poker/characters/lucy/concept/Attachment_1636071085.png b/archive/assets archive/poker/characters/lucy/concept/Attachment_1636071085.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/concept/Attachment_1636071085.png
rename to archive/assets archive/poker/characters/lucy/concept/Attachment_1636071085.png
diff --git a/assets/archive/poker/characters/lucy/concept/Attachment_1636083467.png b/archive/assets archive/poker/characters/lucy/concept/Attachment_1636083467.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/concept/Attachment_1636083467.png
rename to archive/assets archive/poker/characters/lucy/concept/Attachment_1636083467.png
diff --git a/assets/archive/poker/characters/lucy/concept/Attachment_1636182023.png b/archive/assets archive/poker/characters/lucy/concept/Attachment_1636182023.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/concept/Attachment_1636182023.png
rename to archive/assets archive/poker/characters/lucy/concept/Attachment_1636182023.png
diff --git a/assets/archive/poker/characters/lucy/concept/p0I6XK6wXtaUD6eZwVONLazwDXkfSgW-M0y0Ex_BnMTFEzgp6Hk36o3UZzZp18EpCG6PxebbH-OaMg4mA7dhzCzjwjTiVX80AcfI.png b/archive/assets archive/poker/characters/lucy/concept/p0I6XK6wXtaUD6eZwVONLazwDXkfSgW-M0y0Ex_BnMTFEzgp6Hk36o3UZzZp18EpCG6PxebbH-OaMg4mA7dhzCzjwjTiVX80AcfI.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/concept/p0I6XK6wXtaUD6eZwVONLazwDXkfSgW-M0y0Ex_BnMTFEzgp6Hk36o3UZzZp18EpCG6PxebbH-OaMg4mA7dhzCzjwjTiVX80AcfI.png
rename to archive/assets archive/poker/characters/lucy/concept/p0I6XK6wXtaUD6eZwVONLazwDXkfSgW-M0y0Ex_BnMTFEzgp6Hk36o3UZzZp18EpCG6PxebbH-OaMg4mA7dhzCzjwjTiVX80AcfI.png
diff --git a/assets/archive/poker/characters/lucy/design/Attachment_1636255946.png b/archive/assets archive/poker/characters/lucy/design/Attachment_1636255946.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/Attachment_1636255946.png
rename to archive/assets archive/poker/characters/lucy/design/Attachment_1636255946.png
diff --git a/assets/archive/poker/characters/lucy/design/height_chart.png b/archive/assets archive/poker/characters/lucy/design/height_chart.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/height_chart.png
rename to archive/assets archive/poker/characters/lucy/design/height_chart.png
diff --git a/assets/archive/poker/characters/lucy/design/screen_composition.png b/archive/assets archive/poker/characters/lucy/design/screen_composition.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/screen_composition.png
rename to archive/assets archive/poker/characters/lucy/design/screen_composition.png
diff --git a/assets/archive/poker/characters/lucy/design/sprite_base.png b/archive/assets archive/poker/characters/lucy/design/sprite_base.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/sprite_base.png
rename to archive/assets archive/poker/characters/lucy/design/sprite_base.png
diff --git a/assets/archive/poker/characters/lucy/design/sprite_main.png b/archive/assets archive/poker/characters/lucy/design/sprite_main.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/sprite_main.png
rename to archive/assets archive/poker/characters/lucy/design/sprite_main.png
diff --git a/assets/archive/poker/characters/lucy/design/taker.psd b/archive/assets archive/poker/characters/lucy/design/taker.psd
similarity index 100%
rename from assets/archive/poker/characters/lucy/design/taker.psd
rename to archive/assets archive/poker/characters/lucy/design/taker.psd
diff --git a/assets/archive/poker/characters/lucy/sprites/base.png b/archive/assets archive/poker/characters/lucy/sprites/base.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/base.png
rename to archive/assets archive/poker/characters/lucy/sprites/base.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_0.png b/archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_1.png b/archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_2.png b/archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_2.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_3.png b/archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_3.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_3.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_3.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_4.png b/archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_4.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyebrows/eyebrows_4.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyebrows/eyebrows_4.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyes/eyes_0.png b/archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyes/eyes_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyes/eyes_1.png b/archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyes/eyes_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyes/eyes_2.png b/archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyes/eyes_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_2.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyes/eyes_3.png b/archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_3.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyes/eyes_3.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_3.png
diff --git a/assets/archive/poker/characters/lucy/sprites/eyes/eyes_4.png b/archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_4.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/eyes/eyes_4.png
rename to archive/assets archive/poker/characters/lucy/sprites/eyes/eyes_4.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_0.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_1.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_2.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_0_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_0_2.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_0.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_1.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_2.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_1_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_1_2.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_0.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_1.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_2.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_2_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_2_2.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_0.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_0.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_0.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_0.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_1.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_1.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_1.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_1.png
diff --git a/assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_2.png b/archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_2.png
similarity index 100%
rename from assets/archive/poker/characters/lucy/sprites/mouth/mouth_3_2.png
rename to archive/assets archive/poker/characters/lucy/sprites/mouth/mouth_3_2.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink1.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink1.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink1.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink10.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink10.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink10.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink10.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink11.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink11.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink11.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink11.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink12.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink12.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink12.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink12.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink13.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink13.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink13.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink13.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink14.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink14.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink14.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink14.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink15.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink15.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink15.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink15.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink16.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink16.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink16.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink16.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink17.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink17.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink17.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink17.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink18.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink18.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink18.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink18.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink19.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink19.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink19.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink19.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink2.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink2.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink2.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink20.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink20.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink20.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink20.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink21.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink21.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink21.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink21.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink22.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink22.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink22.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink22.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink3.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink3.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink3.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink4.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink4.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink4.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink4.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink5.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink5.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink5.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink5.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink6.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink6.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink6.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink6.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink7.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink7.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink7.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink7.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink8.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink8.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink8.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink8.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink9.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink9.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink9.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/Animation_Loop_Blink9.png
diff --git a/assets/archive/poker/characters/penny/Animation_Loop_Blink/animation-loop.png b/archive/assets archive/poker/characters/penny/Animation_Loop_Blink/animation-loop.png
similarity index 100%
rename from assets/archive/poker/characters/penny/Animation_Loop_Blink/animation-loop.png
rename to archive/assets archive/poker/characters/penny/Animation_Loop_Blink/animation-loop.png
diff --git a/assets/archive/poker/characters/penny/border.png b/archive/assets archive/poker/characters/penny/border.png
similarity index 100%
rename from assets/archive/poker/characters/penny/border.png
rename to archive/assets archive/poker/characters/penny/border.png
diff --git a/assets/archive/poker/characters/penny/character.xml b/archive/assets archive/poker/characters/penny/character.xml
similarity index 100%
rename from assets/archive/poker/characters/penny/character.xml
rename to archive/assets archive/poker/characters/penny/character.xml
diff --git a/assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620525335.png b/archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620525335.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620525335.png
rename to archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620525335.png
diff --git a/assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620705080.png b/archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620705080.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620705080.png
rename to archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620705080.png
diff --git a/assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620772632.png b/archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620772632.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/First Concept/Attachment_1620772632.png
rename to archive/assets archive/poker/characters/penny/concept/First Concept/Attachment_1620772632.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Expressions.psd b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Expressions.psd
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Expressions.psd
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Expressions.psd
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Full Expressions and Eyes, Mouth Closed.psb b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Full Expressions and Eyes, Mouth Closed.psb
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Full Expressions and Eyes, Mouth Closed.psb
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Full Expressions and Eyes, Mouth Closed.psb
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Original File.psd b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Original File.psd
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Original File.psd
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Original File.psd
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Test Animation Talking.psd b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Test Animation Talking.psd
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Test Animation Talking.psd
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/PSD Source/Test Animation Talking.psd
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/SmartSelect_20210519-170421_ibisPaint20X.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/SmartSelect_20210519-170421_ibisPaint20X.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/SmartSelect_20210519-170421_ibisPaint20X.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/SmartSelect_20210519-170421_ibisPaint20X.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/body.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/body.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/body.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/body.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/body_sm.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/body_sm.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/body_sm.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/body_sm.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes_sm.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes_sm.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes_sm.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/eyes_sm.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/face.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/face.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/face.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/face.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/face_sm.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/face_sm.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/face_sm.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/face_sm.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth_sm.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth_sm.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth_sm.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Sprites/mouth_sm.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Untitled317_20210521111636.png b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Untitled317_20210521111636.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Untitled317_20210521111636.png
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Untitled317_20210521111636.png
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector File.ai b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector File.ai
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector File.ai
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector File.ai
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector SVG.svg b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector SVG.svg
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector SVG.svg
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/Vector SVG.svg
diff --git a/assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/test.ai b/archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/test.ai
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/High Quality Concept/Vector Version/test.ai
rename to archive/assets archive/poker/characters/penny/concept/High Quality Concept/Vector Version/test.ai
diff --git a/assets/archive/poker/characters/penny/concept/Moe Concept/dealer.png b/archive/assets archive/poker/characters/penny/concept/Moe Concept/dealer.png
similarity index 100%
rename from assets/archive/poker/characters/penny/concept/Moe Concept/dealer.png
rename to archive/assets archive/poker/characters/penny/concept/Moe Concept/dealer.png
diff --git a/assets/archive/poker/characters/penny/design/animation_pattern_1.gif b/archive/assets archive/poker/characters/penny/design/animation_pattern_1.gif
similarity index 100%
rename from assets/archive/poker/characters/penny/design/animation_pattern_1.gif
rename to archive/assets archive/poker/characters/penny/design/animation_pattern_1.gif
diff --git a/assets/archive/poker/characters/penny/design/animation_pattern_2.gif b/archive/assets archive/poker/characters/penny/design/animation_pattern_2.gif
similarity index 100%
rename from assets/archive/poker/characters/penny/design/animation_pattern_2.gif
rename to archive/assets archive/poker/characters/penny/design/animation_pattern_2.gif
diff --git a/assets/archive/poker/characters/penny/design/dealer.psd b/archive/assets archive/poker/characters/penny/design/dealer.psd
similarity index 100%
rename from assets/archive/poker/characters/penny/design/dealer.psd
rename to archive/assets archive/poker/characters/penny/design/dealer.psd
diff --git a/assets/archive/poker/characters/penny/design/screen_composition.png b/archive/assets archive/poker/characters/penny/design/screen_composition.png
similarity index 100%
rename from assets/archive/poker/characters/penny/design/screen_composition.png
rename to archive/assets archive/poker/characters/penny/design/screen_composition.png
diff --git a/assets/archive/poker/characters/penny/design/sprite_base.png b/archive/assets archive/poker/characters/penny/design/sprite_base.png
similarity index 100%
rename from assets/archive/poker/characters/penny/design/sprite_base.png
rename to archive/assets archive/poker/characters/penny/design/sprite_base.png
diff --git a/assets/archive/poker/characters/penny/design/sprite_main.png b/archive/assets archive/poker/characters/penny/design/sprite_main.png
similarity index 100%
rename from assets/archive/poker/characters/penny/design/sprite_main.png
rename to archive/assets archive/poker/characters/penny/design/sprite_main.png
diff --git a/assets/archive/poker/characters/penny/sprites/dealer.png b/archive/assets archive/poker/characters/penny/sprites/dealer.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/dealer.png
rename to archive/assets archive/poker/characters/penny/sprites/dealer.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_1.png b/archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_1.png
rename to archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_2.png b/archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_2.png
rename to archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_3.png b/archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_3.png
rename to archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_4.png b/archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_4.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_4.png
rename to archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_4.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_5.png b/archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_5.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyebrows/eyebrows_5.png
rename to archive/assets archive/poker/characters/penny/sprites/eyebrows/eyebrows_5.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyes/eyes_1.png b/archive/assets archive/poker/characters/penny/sprites/eyes/eyes_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyes/eyes_1.png
rename to archive/assets archive/poker/characters/penny/sprites/eyes/eyes_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyes/eyes_2.png b/archive/assets archive/poker/characters/penny/sprites/eyes/eyes_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyes/eyes_2.png
rename to archive/assets archive/poker/characters/penny/sprites/eyes/eyes_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyes/eyes_3.png b/archive/assets archive/poker/characters/penny/sprites/eyes/eyes_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyes/eyes_3.png
rename to archive/assets archive/poker/characters/penny/sprites/eyes/eyes_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/eyes/eyes_4.png b/archive/assets archive/poker/characters/penny/sprites/eyes/eyes_4.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/eyes/eyes_4.png
rename to archive/assets archive/poker/characters/penny/sprites/eyes/eyes_4.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_1_1.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_1_1.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_1_2.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_1_2.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_1_3.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_1_3.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_1_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_2_1.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_2_1.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_2_2.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_2_2.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_2_3.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_2_3.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_2_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_3_1.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_3_1.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_3_2.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_3_2.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_3_3.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_3_3.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_3_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_4_1.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_1.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_4_1.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_1.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_4_2.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_2.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_4_2.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_2.png
diff --git a/assets/archive/poker/characters/penny/sprites/mouths/mouth_4_3.png b/archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_3.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/mouths/mouth_4_3.png
rename to archive/assets archive/poker/characters/penny/sprites/mouths/mouth_4_3.png
diff --git a/assets/archive/poker/characters/penny/sprites/sheet.png b/archive/assets archive/poker/characters/penny/sprites/sheet.png
similarity index 100%
rename from assets/archive/poker/characters/penny/sprites/sheet.png
rename to archive/assets archive/poker/characters/penny/sprites/sheet.png
diff --git a/assets/archive/poker/characters/sammy/character.xml b/archive/assets archive/poker/characters/sammy/character.xml
similarity index 100%
rename from assets/archive/poker/characters/sammy/character.xml
rename to archive/assets archive/poker/characters/sammy/character.xml
diff --git a/assets/archive/poker/characters/sammy/concept/cop2.png b/archive/assets archive/poker/characters/sammy/concept/cop2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/cop2.png
rename to archive/assets archive/poker/characters/sammy/concept/cop2.png
diff --git a/assets/archive/poker/characters/sammy/concept/cop3a.png b/archive/assets archive/poker/characters/sammy/concept/cop3a.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/cop3a.png
rename to archive/assets archive/poker/characters/sammy/concept/cop3a.png
diff --git a/assets/archive/poker/characters/sammy/concept/cop3b.png b/archive/assets archive/poker/characters/sammy/concept/cop3b.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/cop3b.png
rename to archive/assets archive/poker/characters/sammy/concept/cop3b.png
diff --git a/assets/archive/poker/characters/sammy/concept/cop3c.png b/archive/assets archive/poker/characters/sammy/concept/cop3c.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/cop3c.png
rename to archive/assets archive/poker/characters/sammy/concept/cop3c.png
diff --git a/assets/archive/poker/characters/sammy/concept/coppa_sample_a.png b/archive/assets archive/poker/characters/sammy/concept/coppa_sample_a.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/coppa_sample_a.png
rename to archive/assets archive/poker/characters/sammy/concept/coppa_sample_a.png
diff --git a/assets/archive/poker/characters/sammy/concept/coppa_sample_b.png b/archive/assets archive/poker/characters/sammy/concept/coppa_sample_b.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/coppa_sample_b.png
rename to archive/assets archive/poker/characters/sammy/concept/coppa_sample_b.png
diff --git a/assets/archive/poker/characters/sammy/concept/coppa_sample_b2.png b/archive/assets archive/poker/characters/sammy/concept/coppa_sample_b2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/concept/coppa_sample_b2.png
rename to archive/assets archive/poker/characters/sammy/concept/coppa_sample_b2.png
diff --git a/assets/archive/poker/characters/sammy/design/coppa.psd b/archive/assets archive/poker/characters/sammy/design/coppa.psd
similarity index 100%
rename from assets/archive/poker/characters/sammy/design/coppa.psd
rename to archive/assets archive/poker/characters/sammy/design/coppa.psd
diff --git a/assets/archive/poker/characters/sammy/design/screen_composition.png b/archive/assets archive/poker/characters/sammy/design/screen_composition.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/design/screen_composition.png
rename to archive/assets archive/poker/characters/sammy/design/screen_composition.png
diff --git a/assets/archive/poker/characters/sammy/design/sprite_base.png b/archive/assets archive/poker/characters/sammy/design/sprite_base.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/design/sprite_base.png
rename to archive/assets archive/poker/characters/sammy/design/sprite_base.png
diff --git a/assets/archive/poker/characters/sammy/design/sprite_main.png b/archive/assets archive/poker/characters/sammy/design/sprite_main.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/design/sprite_main.png
rename to archive/assets archive/poker/characters/sammy/design/sprite_main.png
diff --git a/assets/archive/poker/characters/sammy/sprites/base.png b/archive/assets archive/poker/characters/sammy/sprites/base.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/base.png
rename to archive/assets archive/poker/characters/sammy/sprites/base.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_0.png b/archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_1.png b/archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_2.png b/archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_2.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_3.png b/archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_3.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_3.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_3.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_4.png b/archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_4.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyebrows/eyebrows_4.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyebrows/eyebrows_4.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyes/eyes_0.png b/archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyes/eyes_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyes/eyes_1.png b/archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyes/eyes_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyes/eyes_2.png b/archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyes/eyes_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_2.png
diff --git a/assets/archive/poker/characters/sammy/sprites/eyes/eyes_3.png b/archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_3.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/eyes/eyes_3.png
rename to archive/assets archive/poker/characters/sammy/sprites/eyes/eyes_3.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_0.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_1.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_2.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_0_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_0_2.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_0.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_1.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_2.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_1_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_1_2.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_0.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_1.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_2.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_2_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_2_2.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_0.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_0.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_0.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_0.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_1.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_1.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_1.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_1.png
diff --git a/assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_2.png b/archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_2.png
similarity index 100%
rename from assets/archive/poker/characters/sammy/sprites/mouth/mouth_3_2.png
rename to archive/assets archive/poker/characters/sammy/sprites/mouth/mouth_3_2.png
diff --git a/assets/archive/poker/characters/unused/cissnei/Attachment_1621537997.png b/archive/assets archive/poker/characters/unused/cissnei/Attachment_1621537997.png
similarity index 100%
rename from assets/archive/poker/characters/unused/cissnei/Attachment_1621537997.png
rename to archive/assets archive/poker/characters/unused/cissnei/Attachment_1621537997.png
diff --git a/assets/archive/poker/characters/unused/cissnei/SmartSelect_20210604-133433_ibisPaint_X.jpg b/archive/assets archive/poker/characters/unused/cissnei/SmartSelect_20210604-133433_ibisPaint_X.jpg
similarity index 100%
rename from assets/archive/poker/characters/unused/cissnei/SmartSelect_20210604-133433_ibisPaint_X.jpg
rename to archive/assets archive/poker/characters/unused/cissnei/SmartSelect_20210604-133433_ibisPaint_X.jpg
diff --git a/assets/archive/poker/characters/unused/cissnei/Untitled337_20210606164342.png b/archive/assets archive/poker/characters/unused/cissnei/Untitled337_20210606164342.png
similarity index 100%
rename from assets/archive/poker/characters/unused/cissnei/Untitled337_20210606164342.png
rename to archive/assets archive/poker/characters/unused/cissnei/Untitled337_20210606164342.png
diff --git a/assets/archive/poker/world/pub/Concept/floor.png b/archive/assets archive/poker/world/pub/Concept/floor.png
similarity index 100%
rename from assets/archive/poker/world/pub/Concept/floor.png
rename to archive/assets archive/poker/world/pub/Concept/floor.png
diff --git a/assets/archive/poker/world/pub/Concept/top.png b/archive/assets archive/poker/world/pub/Concept/top.png
similarity index 100%
rename from assets/archive/poker/world/pub/Concept/top.png
rename to archive/assets archive/poker/world/pub/Concept/top.png
diff --git a/assets/archive/poker/world/pub/pub_skywal_upscaledl.png b/archive/assets archive/poker/world/pub/pub_skywal_upscaledl.png
similarity index 100%
rename from assets/archive/poker/world/pub/pub_skywal_upscaledl.png
rename to archive/assets archive/poker/world/pub/pub_skywal_upscaledl.png
diff --git a/assets/archive/poker/world/pub/pub_skywall.png b/archive/assets archive/poker/world/pub/pub_skywall.png
similarity index 100%
rename from assets/archive/poker/world/pub/pub_skywall.png
rename to archive/assets archive/poker/world/pub/pub_skywall.png
diff --git a/assets/archive/poker/world/pub/pub_skywall_low.png b/archive/assets archive/poker/world/pub/pub_skywall_low.png
similarity index 100%
rename from assets/archive/poker/world/pub/pub_skywall_low.png
rename to archive/assets archive/poker/world/pub/pub_skywall_low.png
diff --git a/assets/archive/poker/world/pub/pub_skywall_original.png b/archive/assets archive/poker/world/pub/pub_skywall_original.png
similarity index 100%
rename from assets/archive/poker/world/pub/pub_skywall_original.png
rename to archive/assets archive/poker/world/pub/pub_skywall_original.png
diff --git a/assets/archive/pokergame/cards.png b/archive/assets archive/pokergame/cards.png
similarity index 100%
rename from assets/archive/pokergame/cards.png
rename to archive/assets archive/pokergame/cards.png
diff --git a/assets/archive/pokergame/characters/death/a.wav b/archive/assets archive/pokergame/characters/death/a.wav
similarity index 100%
rename from assets/archive/pokergame/characters/death/a.wav
rename to archive/assets archive/pokergame/characters/death/a.wav
diff --git a/assets/archive/pokergame/characters/death/com.wav b/archive/assets archive/pokergame/characters/death/com.wav
similarity index 100%
rename from assets/archive/pokergame/characters/death/com.wav
rename to archive/assets archive/pokergame/characters/death/com.wav
diff --git a/assets/archive/pokergame/characters/death/ie.wav b/archive/assets archive/pokergame/characters/death/ie.wav
similarity index 100%
rename from assets/archive/pokergame/characters/death/ie.wav
rename to archive/assets archive/pokergame/characters/death/ie.wav
diff --git a/assets/archive/pokergame/characters/death/or.wav b/archive/assets archive/pokergame/characters/death/or.wav
similarity index 100%
rename from assets/archive/pokergame/characters/death/or.wav
rename to archive/assets archive/pokergame/characters/death/or.wav
diff --git a/assets/archive/pokergame/characters/death/ray.wav b/archive/assets archive/pokergame/characters/death/ray.wav
similarity index 100%
rename from assets/archive/pokergame/characters/death/ray.wav
rename to archive/assets archive/pokergame/characters/death/ray.wav
diff --git a/assets/archive/pokergame/characters/death/sheet.png b/archive/assets archive/pokergame/characters/death/sheet.png
similarity index 100%
rename from assets/archive/pokergame/characters/death/sheet.png
rename to archive/assets archive/pokergame/characters/death/sheet.png
diff --git a/assets/archive/pokergame/characters/penny/sheet.png b/archive/assets archive/pokergame/characters/penny/sheet.png
similarity index 100%
rename from assets/archive/pokergame/characters/penny/sheet.png
rename to archive/assets archive/pokergame/characters/penny/sheet.png
diff --git a/assets/archive/pokergame/font/BIZUDPGothic-Bold.ttf b/archive/assets archive/pokergame/font/BIZUDPGothic-Bold.ttf
similarity index 100%
rename from assets/archive/pokergame/font/BIZUDPGothic-Bold.ttf
rename to archive/assets archive/pokergame/font/BIZUDPGothic-Bold.ttf
diff --git a/assets/archive/pokergame/font/BIZUDPGothic-Regular.ttf b/archive/assets archive/pokergame/font/BIZUDPGothic-Regular.ttf
similarity index 100%
rename from assets/archive/pokergame/font/BIZUDPGothic-Regular.ttf
rename to archive/assets archive/pokergame/font/BIZUDPGothic-Regular.ttf
diff --git a/assets/archive/pokergame/font/OFL.txt b/archive/assets archive/pokergame/font/OFL.txt
similarity index 100%
rename from assets/archive/pokergame/font/OFL.txt
rename to archive/assets archive/pokergame/font/OFL.txt
diff --git a/assets/archive/pokergame/scripty.docx b/archive/assets archive/pokergame/scripty.docx
similarity index 100%
rename from assets/archive/pokergame/scripty.docx
rename to archive/assets archive/pokergame/scripty.docx
diff --git a/assets/archive/pokergame/vn/Scene_1.xml b/archive/assets archive/pokergame/vn/Scene_1.xml
similarity index 100%
rename from assets/archive/pokergame/vn/Scene_1.xml
rename to archive/assets archive/pokergame/vn/Scene_1.xml
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-Bold.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-Bold.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-Bold.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-Bold.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-BoldItalic.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-BoldItalic.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-BoldItalic.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-BoldItalic.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-ExtraBold.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-ExtraBold.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-ExtraBold.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-ExtraBold.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-ExtraBoldItalic.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-ExtraBoldItalic.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-ExtraBoldItalic.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-ExtraBoldItalic.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-Italic.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-Italic.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-Italic.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-Italic.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-Light.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-Light.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-Light.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-Light.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-LightItalic.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-LightItalic.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-LightItalic.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-LightItalic.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-Regular.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-Regular.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-Regular.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-Regular.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-Semibold.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-Semibold.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-Semibold.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-Semibold.ttf
diff --git a/assets/archive/shared/fonts/opensans/OpenSans-SemiboldItalic.ttf b/archive/assets archive/shared/fonts/opensans/OpenSans-SemiboldItalic.ttf
similarity index 100%
rename from assets/archive/shared/fonts/opensans/OpenSans-SemiboldItalic.ttf
rename to archive/assets archive/shared/fonts/opensans/OpenSans-SemiboldItalic.ttf
diff --git a/assets/archive/shared/shaders/singlerenderlist.frag b/archive/assets archive/shared/shaders/singlerenderlist.frag
similarity index 100%
rename from assets/archive/shared/shaders/singlerenderlist.frag
rename to archive/assets archive/shared/shaders/singlerenderlist.frag
diff --git a/assets/archive/shared/shaders/singlerenderlist.vert b/archive/assets archive/shared/shaders/singlerenderlist.vert
similarity index 100%
rename from assets/archive/shared/shaders/singlerenderlist.vert
rename to archive/assets archive/shared/shaders/singlerenderlist.vert
diff --git a/assets/archive/shared/shaders/textured.frag b/archive/assets archive/shared/shaders/textured.frag
similarity index 100%
rename from assets/archive/shared/shaders/textured.frag
rename to archive/assets archive/shared/shaders/textured.frag
diff --git a/assets/archive/shared/shaders/textured.vert b/archive/assets archive/shared/shaders/textured.vert
similarity index 100%
rename from assets/archive/shared/shaders/textured.vert
rename to archive/assets archive/shared/shaders/textured.vert
diff --git a/assets/archive/shared/textures/test_texture.png b/archive/assets archive/shared/textures/test_texture.png
similarity index 100%
rename from assets/archive/shared/textures/test_texture.png
rename to archive/assets archive/shared/textures/test_texture.png
diff --git a/assets/archive/tictactoe/font/BIZUDPGothic-Bold.ttf b/archive/assets archive/tictactoe/font/BIZUDPGothic-Bold.ttf
similarity index 100%
rename from assets/archive/tictactoe/font/BIZUDPGothic-Bold.ttf
rename to archive/assets archive/tictactoe/font/BIZUDPGothic-Bold.ttf
diff --git a/assets/archive/tictactoe/font/BIZUDPGothic-Regular.ttf b/archive/assets archive/tictactoe/font/BIZUDPGothic-Regular.ttf
similarity index 100%
rename from assets/archive/tictactoe/font/BIZUDPGothic-Regular.ttf
rename to archive/assets archive/tictactoe/font/BIZUDPGothic-Regular.ttf
diff --git a/assets/archive/tictactoe/font/OFL.txt b/archive/assets archive/tictactoe/font/OFL.txt
similarity index 100%
rename from assets/archive/tictactoe/font/OFL.txt
rename to archive/assets archive/tictactoe/font/OFL.txt
diff --git a/assets/archive/tictactoe/locale/en.xml b/archive/assets archive/tictactoe/locale/en.xml
similarity index 100%
rename from assets/archive/tictactoe/locale/en.xml
rename to archive/assets archive/tictactoe/locale/en.xml
diff --git a/assets/archive/tictactoe/test.xml b/archive/assets archive/tictactoe/test.xml
similarity index 100%
rename from assets/archive/tictactoe/test.xml
rename to archive/assets archive/tictactoe/test.xml
diff --git a/assets/archive/tictactoe/xo.png b/archive/assets archive/tictactoe/xo.png
similarity index 100%
rename from assets/archive/tictactoe/xo.png
rename to archive/assets archive/tictactoe/xo.png
diff --git a/src/dawn/games/visualnovel/CMakeLists.txt b/archive/visualnovel/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/CMakeLists.txt
rename to archive/visualnovel/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/VisualNovelManager.cpp b/archive/visualnovel/VisualNovelManager.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/VisualNovelManager.cpp
rename to archive/visualnovel/VisualNovelManager.cpp
diff --git a/src/dawn/games/visualnovel/VisualNovelManager.hpp b/archive/visualnovel/VisualNovelManager.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/VisualNovelManager.hpp
rename to archive/visualnovel/VisualNovelManager.hpp
diff --git a/src/dawn/games/visualnovel/components/CMakeLists.txt b/archive/visualnovel/components/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/components/CMakeLists.txt
rename to archive/visualnovel/components/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/components/SimpleVisualNovelBackground.cpp b/archive/visualnovel/components/SimpleVisualNovelBackground.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/components/SimpleVisualNovelBackground.cpp
rename to archive/visualnovel/components/SimpleVisualNovelBackground.cpp
diff --git a/src/dawn/games/visualnovel/components/SimpleVisualNovelBackground.hpp b/archive/visualnovel/components/SimpleVisualNovelBackground.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/components/SimpleVisualNovelBackground.hpp
rename to archive/visualnovel/components/SimpleVisualNovelBackground.hpp
diff --git a/src/dawn/games/visualnovel/components/VisualNovelCharacter.cpp b/archive/visualnovel/components/VisualNovelCharacter.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/components/VisualNovelCharacter.cpp
rename to archive/visualnovel/components/VisualNovelCharacter.cpp
diff --git a/src/dawn/games/visualnovel/components/VisualNovelCharacter.hpp b/archive/visualnovel/components/VisualNovelCharacter.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/components/VisualNovelCharacter.hpp
rename to archive/visualnovel/components/VisualNovelCharacter.hpp
diff --git a/src/dawn/games/visualnovel/events/CMakeLists.txt b/archive/visualnovel/events/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/events/CMakeLists.txt
rename to archive/visualnovel/events/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/events/VisualNovelCallbackEvent.hpp b/archive/visualnovel/events/VisualNovelCallbackEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelCallbackEvent.hpp
rename to archive/visualnovel/events/VisualNovelCallbackEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.cpp b/archive/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.cpp
rename to archive/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.hpp b/archive/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.hpp
rename to archive/visualnovel/events/VisualNovelChangeSimpleBackgroundEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelEmptyEvent.cpp b/archive/visualnovel/events/VisualNovelEmptyEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelEmptyEvent.cpp
rename to archive/visualnovel/events/VisualNovelEmptyEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelEmptyEvent.hpp b/archive/visualnovel/events/VisualNovelEmptyEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelEmptyEvent.hpp
rename to archive/visualnovel/events/VisualNovelEmptyEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelFadeEvent.cpp b/archive/visualnovel/events/VisualNovelFadeEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelFadeEvent.cpp
rename to archive/visualnovel/events/VisualNovelFadeEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelFadeEvent.hpp b/archive/visualnovel/events/VisualNovelFadeEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelFadeEvent.hpp
rename to archive/visualnovel/events/VisualNovelFadeEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelTextboxEvent.cpp b/archive/visualnovel/events/VisualNovelTextboxEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelTextboxEvent.cpp
rename to archive/visualnovel/events/VisualNovelTextboxEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/VisualNovelTextboxEvent.hpp b/archive/visualnovel/events/VisualNovelTextboxEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/VisualNovelTextboxEvent.hpp
rename to archive/visualnovel/events/VisualNovelTextboxEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/animation/CMakeLists.txt b/archive/visualnovel/events/animation/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/events/animation/CMakeLists.txt
rename to archive/visualnovel/events/animation/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/events/animation/VisualNovelAnimationEvent.cpp b/archive/visualnovel/events/animation/VisualNovelAnimationEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/animation/VisualNovelAnimationEvent.cpp
rename to archive/visualnovel/events/animation/VisualNovelAnimationEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/animation/VisualNovelAnimationEvent.hpp b/archive/visualnovel/events/animation/VisualNovelAnimationEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/animation/VisualNovelAnimationEvent.hpp
rename to archive/visualnovel/events/animation/VisualNovelAnimationEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/animation/VisualNovelSimpleAnimationEvent.hpp b/archive/visualnovel/events/animation/VisualNovelSimpleAnimationEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/animation/VisualNovelSimpleAnimationEvent.hpp
rename to archive/visualnovel/events/animation/VisualNovelSimpleAnimationEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/animation/VisualNovelSimpleCallbackAnimationEvent.hpp b/archive/visualnovel/events/animation/VisualNovelSimpleCallbackAnimationEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/animation/VisualNovelSimpleCallbackAnimationEvent.hpp
rename to archive/visualnovel/events/animation/VisualNovelSimpleCallbackAnimationEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/characters/CMakeLists.txt b/archive/visualnovel/events/characters/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/events/characters/CMakeLists.txt
rename to archive/visualnovel/events/characters/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/events/characters/VisualNovelFadeCharacterEvent.cpp b/archive/visualnovel/events/characters/VisualNovelFadeCharacterEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/characters/VisualNovelFadeCharacterEvent.cpp
rename to archive/visualnovel/events/characters/VisualNovelFadeCharacterEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/characters/VisualNovelFadeCharacterEvent.hpp b/archive/visualnovel/events/characters/VisualNovelFadeCharacterEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/characters/VisualNovelFadeCharacterEvent.hpp
rename to archive/visualnovel/events/characters/VisualNovelFadeCharacterEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/characters/VisualNovelTransformItemEvent.cpp b/archive/visualnovel/events/characters/VisualNovelTransformItemEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/characters/VisualNovelTransformItemEvent.cpp
rename to archive/visualnovel/events/characters/VisualNovelTransformItemEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/characters/VisualNovelTransformItemEvent.hpp b/archive/visualnovel/events/characters/VisualNovelTransformItemEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/characters/VisualNovelTransformItemEvent.hpp
rename to archive/visualnovel/events/characters/VisualNovelTransformItemEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/timing/CMakeLists.txt b/archive/visualnovel/events/timing/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/events/timing/CMakeLists.txt
rename to archive/visualnovel/events/timing/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/events/timing/VisualNovelBatchEvent.cpp b/archive/visualnovel/events/timing/VisualNovelBatchEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/timing/VisualNovelBatchEvent.cpp
rename to archive/visualnovel/events/timing/VisualNovelBatchEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/timing/VisualNovelBatchEvent.hpp b/archive/visualnovel/events/timing/VisualNovelBatchEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/timing/VisualNovelBatchEvent.hpp
rename to archive/visualnovel/events/timing/VisualNovelBatchEvent.hpp
diff --git a/src/dawn/games/visualnovel/events/timing/VisualNovelPauseEvent.cpp b/archive/visualnovel/events/timing/VisualNovelPauseEvent.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/timing/VisualNovelPauseEvent.cpp
rename to archive/visualnovel/events/timing/VisualNovelPauseEvent.cpp
diff --git a/src/dawn/games/visualnovel/events/timing/VisualNovelPauseEvent.hpp b/archive/visualnovel/events/timing/VisualNovelPauseEvent.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/events/timing/VisualNovelPauseEvent.hpp
rename to archive/visualnovel/events/timing/VisualNovelPauseEvent.hpp
diff --git a/src/dawn/games/visualnovel/scene/CMakeLists.txt b/archive/visualnovel/scene/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/scene/CMakeLists.txt
rename to archive/visualnovel/scene/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/scene/SimpleVNScene.cpp b/archive/visualnovel/scene/SimpleVNScene.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/scene/SimpleVNScene.cpp
rename to archive/visualnovel/scene/SimpleVNScene.cpp
diff --git a/src/dawn/games/visualnovel/scene/SimpleVNScene.hpp b/archive/visualnovel/scene/SimpleVNScene.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/scene/SimpleVNScene.hpp
rename to archive/visualnovel/scene/SimpleVNScene.hpp
diff --git a/src/dawn/games/visualnovel/ui/CMakeLists.txt b/archive/visualnovel/ui/CMakeLists.txt
similarity index 100%
rename from src/dawn/games/visualnovel/ui/CMakeLists.txt
rename to archive/visualnovel/ui/CMakeLists.txt
diff --git a/src/dawn/games/visualnovel/ui/VisualNovelFader.cpp b/archive/visualnovel/ui/VisualNovelFader.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/ui/VisualNovelFader.cpp
rename to archive/visualnovel/ui/VisualNovelFader.cpp
diff --git a/src/dawn/games/visualnovel/ui/VisualNovelFader.hpp b/archive/visualnovel/ui/VisualNovelFader.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/ui/VisualNovelFader.hpp
rename to archive/visualnovel/ui/VisualNovelFader.hpp
diff --git a/src/dawn/games/visualnovel/ui/VisualNovelTextbox.cpp b/archive/visualnovel/ui/VisualNovelTextbox.cpp
similarity index 100%
rename from src/dawn/games/visualnovel/ui/VisualNovelTextbox.cpp
rename to archive/visualnovel/ui/VisualNovelTextbox.cpp
diff --git a/src/dawn/games/visualnovel/ui/VisualNovelTextbox.hpp b/archive/visualnovel/ui/VisualNovelTextbox.hpp
similarity index 100%
rename from src/dawn/games/visualnovel/ui/VisualNovelTextbox.hpp
rename to archive/visualnovel/ui/VisualNovelTextbox.hpp
diff --git a/assets/games/liminal/example-scene.xml b/assets/games/liminal/example-scene.xml
new file mode 100644
index 00000000..5d3fdab1
--- /dev/null
+++ b/assets/games/liminal/example-scene.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, I'm Ethereality.
+
+
+
+
+
+ Hi, I'm Craig.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Do you think Craig is cool?
+
+
+ Yes
+
+
+ No
+
+
+ Maybe
+
+
+
+
+
+
+ Are you unsure?
+
+
+
+
+
+
+ I agree, Craig is cool.
+
+
+
+
+ I disagree, Craig is cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/games/liminal/test.xml b/assets/games/liminal/test.xml
new file mode 100644
index 00000000..f70a0f40
--- /dev/null
+++ b/assets/games/liminal/test.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi, I'm Ethereality.
+
+
+
+
+
+
+
+ Hi, I'm Craig.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cmake/targets/target-liminal-linux64-glfw/CMakeLists.txt b/cmake/targets/target-liminal-linux64-glfw/CMakeLists.txt
new file mode 100644
index 00000000..559b577e
--- /dev/null
+++ b/cmake/targets/target-liminal-linux64-glfw/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+set(DAWN_BUILDING dawnliminal CACHE INTERNAL ${DAWN_CACHE_TARGET})
+set(DAWN_TARGET_LINUX64 true CACHE INTERNAL ${DAWN_CACHE_TARGET})
+set(DAWN_TARGET_GLFW true CACHE INTERNAL ${DAWN_CACHE_TARGET})
+set(DAWN_TARGET_NAME "Liminal" CACHE INTERNAL ${DAWN_CACHE_TARGET})
+set(DAWN_VISUAL_NOVEL true CACHE INTERNAL ${DAWN_CACHE_TARGET})
\ No newline at end of file
diff --git a/src/dawn/display/Color.hpp b/src/dawn/display/Color.hpp
index 7daedd0d..aee9147f 100644
--- a/src/dawn/display/Color.hpp
+++ b/src/dawn/display/Color.hpp
@@ -18,6 +18,33 @@ namespace Dawn {
(float_t)a / 100.0f
};
}
+
+ struct Color operator * (const float_t &x) {
+ return {
+ (uint8_t)(r * x),
+ (uint8_t)(g * x),
+ (uint8_t)(b * x),
+ (uint8_t)(a * x)
+ };
+ }
+
+ struct Color operator - (const struct Color &color) {
+ return {
+ (uint8_t)(r - color.r),
+ (uint8_t)(g - color.g),
+ (uint8_t)(b - color.b),
+ (uint8_t)(a - color.a)
+ };
+ }
+
+ struct Color operator + (const struct Color &color) {
+ return {
+ (uint8_t)(r + color.r),
+ (uint8_t)(g + color.g),
+ (uint8_t)(b + color.b),
+ (uint8_t)(a + color.a)
+ };
+ }
};
#define COLOR_WHITE { 255, 255, 255, 100 }
diff --git a/src/dawn/display/animation/SimplerCallbackAnimation.hpp b/src/dawn/display/animation/SimplerCallbackAnimation.hpp
new file mode 100644
index 00000000..4ccf45c4
--- /dev/null
+++ b/src/dawn/display/animation/SimplerCallbackAnimation.hpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "SimpleAnimation.hpp"
+
+namespace Dawn {
+ template
+ struct SimplerCallbackAnimation : public SimpleAnimation {
+ protected:
+ T value;
+
+ void onValueModified() override {
+ SimpleAnimation::onValueModified();
+ this->callback(this->value);
+ }
+
+ public:
+ std::function callback = std::function();
+
+ /**
+ * Construct a new Simple Function Animation object
+ */
+ SimplerCallbackAnimation() :
+ SimpleAnimation(&value)
+ {
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/CMakeLists.txt b/src/dawn/games/CMakeLists.txt
index d3f4878f..302c92e9 100644
--- a/src/dawn/games/CMakeLists.txt
+++ b/src/dawn/games/CMakeLists.txt
@@ -4,9 +4,9 @@
# https://opensource.org/licenses/MIT
# Subdirs
-add_subdirectory(poker)
+# add_subdirectory(poker)
add_subdirectory(tictactoe)
if(DAWN_VISUAL_NOVEL)
- add_subdirectory(visualnovel)
+ add_subdirectory(vn)
endif()
\ No newline at end of file
diff --git a/src/dawn/games/vn/CMakeLists.txt b/src/dawn/games/vn/CMakeLists.txt
new file mode 100644
index 00000000..87a903f2
--- /dev/null
+++ b/src/dawn/games/vn/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Subdirs
+add_subdirectory(components)
+add_subdirectory(events)
\ No newline at end of file
diff --git a/src/dawn/games/vn/components/CMakeLists.txt b/src/dawn/games/vn/components/CMakeLists.txt
new file mode 100644
index 00000000..582b4b69
--- /dev/null
+++ b/src/dawn/games/vn/components/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Sources
+target_sources(${DAWN_TARGET_NAME}
+ PRIVATE
+ VNManager.cpp
+)
\ No newline at end of file
diff --git a/src/dawn/games/vn/components/VNManager.cpp b/src/dawn/games/vn/components/VNManager.cpp
new file mode 100644
index 00000000..8aacf0a9
--- /dev/null
+++ b/src/dawn/games/vn/components/VNManager.cpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2022 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNManager.hpp"
+#include "games/vn/events/VNEvent.hpp"
+
+using namespace Dawn;
+
+VNManager::VNManager(SceneItem *item) :
+ SceneItemComponent(item)
+{
+}
+
+void VNManager::onStart() {
+ if(this->currentEvent != nullptr) {
+ this->currentEvent->start(this, nullptr);
+ }
+}
+
+void VNManager::setEvent(VNEvent *event) {
+ this->currentEvent = event;
+}
+
+void VNManager::setFlag(std::string key, std::string value) {
+ this->flags[key] = value;
+}
+
+std::string VNManager::getFlag(std::string key) {
+ if(this->flags.find(key) == this->flags.end()) return "";
+ return this->flags[key];
+}
+
+void VNManager::onDispose() {
+
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/components/VNManager.hpp b/src/dawn/games/vn/components/VNManager.hpp
new file mode 100644
index 00000000..b000bb1d
--- /dev/null
+++ b/src/dawn/games/vn/components/VNManager.hpp
@@ -0,0 +1,73 @@
+// Copyright (c) 2022 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "scene/SceneItemComponent.hpp"
+
+namespace Dawn {
+ class VNEvent;
+
+ class IVNEventParent {
+ public:
+ VNEvent *currentEvent = nullptr;
+ };
+
+ class VNManager :
+ public SceneItemComponent,
+ public IVNEventParent
+ {
+ protected:
+ std::vector events;
+ std::map flags;
+
+ public:
+ /**
+ * Constructs a visual novel manager, scene item component.
+ *
+ * @param item Item that the VN manager belongs to.
+ */
+ VNManager(SceneItem *item);
+
+ /**
+ * Creats an event for you to decide how to queue.
+ */
+ template
+ T * createEvent() {
+ auto event = new T();
+ event->init(this);
+ this->events.push_back(event);
+ return event;
+ }
+
+ /**
+ * Sets the currently active visual novel event. This is assumed to be
+ * the only way to handle events (no multiples currently).
+ *
+ * @param event Event to set.
+ */
+ void setEvent(VNEvent *event);
+
+ /**
+ * Sets a flag for the visual novel.
+ *
+ * @param key Key of the flag.
+ * @param value Value of the flag.
+ */
+ void setFlag(std::string key, std::string value);
+
+ /**
+ * Gets a flag for the visual novel.
+ *
+ * @param key Key of the flag.
+ * @return Value of the flag, or an empty string if it doesn't exist.
+ */
+ std::string getFlag(std::string key);
+
+ void onStart() override;
+ void onDispose() override;
+
+ friend class VNEvent;
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/CMakeLists.txt b/src/dawn/games/vn/events/CMakeLists.txt
new file mode 100644
index 00000000..e80f467c
--- /dev/null
+++ b/src/dawn/games/vn/events/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Sources
+target_sources(${DAWN_TARGET_NAME}
+ PRIVATE
+ VNEvent.cpp
+)
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNAnimateEvent.hpp b/src/dawn/games/vn/events/VNAnimateEvent.hpp
new file mode 100644
index 00000000..565a2430
--- /dev/null
+++ b/src/dawn/games/vn/events/VNAnimateEvent.hpp
@@ -0,0 +1,49 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+#include "display/animation/SimplerCallbackAnimation.hpp"
+
+namespace Dawn {
+ template
+ class VNAnimateEvent : public VNEvent {
+ public:
+ T from;
+ T to;
+ float_t duration;
+
+ protected:
+ SimplerCallbackAnimation animation;
+
+ void onStart() override {
+ if(duration > 0) {
+ animation.clear();
+
+ animation.addKeyframe(0, from);
+ animation.addKeyframe(duration, to);
+
+
+ animation.callback = [&](T v){
+ this->setValue(v);
+ };
+
+ // On-end
+ useEvent([&]() {
+ this->next();
+ }, animation.event2AnimationEnd);
+
+ useEvent([&](float_t delta) {
+ animation.tick(delta);
+ }, getScene()->eventSceneUpdate);
+ } else {
+ this->setValue(to);
+ this->next();
+ }
+ }
+
+ virtual void setValue(T value) = 0;
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNChoiceEvent.hpp b/src/dawn/games/vn/events/VNChoiceEvent.hpp
new file mode 100644
index 00000000..cc7a3899
--- /dev/null
+++ b/src/dawn/games/vn/events/VNChoiceEvent.hpp
@@ -0,0 +1,45 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNChoiceEvent : public VNEvent {
+ public:
+ std::string text;
+ std::string key;
+ std::map choices;
+ int32_t choice = 0;
+
+ protected:
+ void onStart() override {
+ choice = 0;
+
+ std::cout << "CHOICE: " << text << std::endl;
+ for(auto& choice : choices) {
+ std::cout << " " << choice.first << ": " << choice.second << std::endl;
+ }
+
+ useEvent([&](float_t delta) {
+ auto im = &getScene()->game->inputManager;
+ if(im->isPressed(INPUT_BIND_ACCEPT)) {
+ auto it = choices.begin();
+ std::advance(it, choice);
+ std::string choiceMade = it->first;
+ std::cout << "Choice made " << choiceMade << std::endl;
+ this->manager->setFlag(this->key, choiceMade);
+ this->next();
+ } else if(im->isPressed(INPUT_BIND_NEGATIVE_Y)) {
+ choice = mathClamp((choice - 1), 0, choices.size() - 1);
+ std::cout << "Current choice: state" << choice << std::endl;
+ } else if(im->isPressed(INPUT_BIND_POSITIVE_Y)) {
+ choice = mathClamp((choice + 1), 0, choices.size() - 1);
+ std::cout << "Current choice: state" << choice << std::endl;
+ }
+ }, getScene()->eventSceneUpdate);
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNChoiceSetEvent.hpp b/src/dawn/games/vn/events/VNChoiceSetEvent.hpp
new file mode 100644
index 00000000..e7c488ea
--- /dev/null
+++ b/src/dawn/games/vn/events/VNChoiceSetEvent.hpp
@@ -0,0 +1,21 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNChoiceSetEvent : public VNEvent {
+ public:
+ std::string key;
+ std::string value;
+
+ protected:
+ void onStart() override {
+ this->manager->setFlag(this->key, this->value);
+ this->next();
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNDummyEvent.hpp b/src/dawn/games/vn/events/VNDummyEvent.hpp
new file mode 100644
index 00000000..ba2702df
--- /dev/null
+++ b/src/dawn/games/vn/events/VNDummyEvent.hpp
@@ -0,0 +1,17 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNDummyEvent : public VNEvent {
+ protected:
+ void onStart() override {
+ std::cout << "Dummy VN Event" << std::endl;
+ this->next();
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNEvent.cpp b/src/dawn/games/vn/events/VNEvent.cpp
new file mode 100644
index 00000000..a524be8f
--- /dev/null
+++ b/src/dawn/games/vn/events/VNEvent.cpp
@@ -0,0 +1,50 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNEvent.hpp"
+
+using namespace Dawn;
+
+void VNEvent::init(VNManager *manager) {
+ this->manager = manager;
+}
+
+void VNEvent::start(
+ IVNEventParent *parent,
+ VNEvent *previous
+) {
+ this->parent = parent;
+ finished = false;
+ this->onStart();
+}
+
+Scene * VNEvent::getScene() {
+ return this->manager->getScene();
+}
+
+VNEvent * VNEvent::getNextEvent() {
+ return this->doNext;
+}
+
+void VNEvent::next() {
+ assertNotNull(this->manager);
+ assertNotNull(this->parent);
+
+ this->end();
+ auto next = this->getNextEvent();
+ this->manager->currentEvent = next;
+ if(next != nullptr) next->start(this->parent, this);
+}
+
+void VNEvent::end() {
+ this->finished = true;
+ this->unsubscribeAllEvents();
+ this->onEnd();
+
+ this->eventFinished.invoke();
+}
+
+void VNEvent::onStart() {}
+void VNEvent::onEnd() {}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNEvent.hpp b/src/dawn/games/vn/events/VNEvent.hpp
new file mode 100644
index 00000000..4ced5e1c
--- /dev/null
+++ b/src/dawn/games/vn/events/VNEvent.hpp
@@ -0,0 +1,91 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "games/vn/components/VNManager.hpp"
+#include "scene/SceneItem.hpp"
+
+namespace Dawn {
+ class VNEvent : public StateOwner {
+ public:
+ StateEvent<> eventFinished;
+
+ /**
+ * Invoked by a parent VN Manager. This is the start of the event.
+ *
+ * @param parent The VN Event Parent. Usually the manager but not always.
+ * @param previous The previous event that was running before this one.
+ */
+ void start(
+ IVNEventParent *parent,
+ VNEvent *previous
+ );
+
+ protected:
+ VNManager *manager = nullptr;
+ IVNEventParent *parent = nullptr;
+ VNEvent *doNext = nullptr;
+ VNEvent *previous = nullptr;
+ bool_t finished = false;
+
+ /**
+ * Initializes the event. This is called by the VNManager, and should not
+ * be called by anything else.
+ *
+ * @param manager The VNManager that is running this event.
+ */
+ void init(VNManager *manager);
+
+ /**
+ * Invoked by the VNManager, this is the end of the event. Perform the
+ * necessary cleanup, but remember that events may be re-started again
+ * later.
+ */
+ void end();
+
+ /**
+ * Overrideable method that is called when the event is started.
+ */
+ virtual void onStart();
+
+ /**
+ * Overrideable method that is called when the event is ended.
+ */
+ virtual void onEnd();
+
+ public:
+ /**
+ * Returns the scene this event is running in.
+ * @return Pointer to the scene.
+ */
+ Scene * getScene();
+
+ /**
+ * End this event and move on to the next event.
+ */
+ void next();
+
+ /**
+ * Returns the next event to be executed after this one. Can be overridden
+ * to return a different event other than the doNext event.
+ * @return Pointer to the next event.
+ */
+ virtual VNEvent * getNextEvent();
+
+ /**
+ * Chains an event to be executed after this event has finished.
+ *
+ * @param next Event to process next.
+ * @return Whatever you pass in to next.
+ */
+ template
+ T * then(T *next) {
+ this->doNext = next;
+ return next;
+ }
+
+ friend class VNManager;
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNIfEvent.hpp b/src/dawn/games/vn/events/VNIfEvent.hpp
new file mode 100644
index 00000000..62aed8e7
--- /dev/null
+++ b/src/dawn/games/vn/events/VNIfEvent.hpp
@@ -0,0 +1,28 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNIfEvent : public VNEvent {
+ public:
+ std::string key;
+ std::string value;
+ VNEvent *ifTrue = nullptr;
+
+ VNEvent * getNextEvent() override {
+ if(this->manager.getFlag(key) == value) {
+ return ifTrue;
+ }
+ return VNEvent::getNextEvent();
+ }
+
+ protected:
+ void onStart() override {
+ this->next();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNParallelEvent.hpp b/src/dawn/games/vn/events/VNParallelEvent.hpp
new file mode 100644
index 00000000..e511ed69
--- /dev/null
+++ b/src/dawn/games/vn/events/VNParallelEvent.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNParallelEvent :
+ public VNEvent,
+ public IVNEventParent
+ {
+ public:
+ std::vector events;
+
+ protected:
+ int32_t eventCount;
+ int32_t eventCompleteCount;
+
+ void onStart() override {
+ eventCount = 0;
+ eventCompleteCount = 0;
+
+ auto itEvents = this->events.begin();
+ while(itEvents != this->events.end()) {
+ auto event = *itEvents;
+ eventCount++;
+
+ useEvent([&]{
+ eventCompleteCount++;
+ if(eventCompleteCount >= eventCount) this->next();
+ }, event->eventFinished);
+
+ event->start(this, this);
+ itEvents++;
+ }
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNPositionEvent.hpp b/src/dawn/games/vn/events/VNPositionEvent.hpp
new file mode 100644
index 00000000..7595e5a6
--- /dev/null
+++ b/src/dawn/games/vn/events/VNPositionEvent.hpp
@@ -0,0 +1,51 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNAnimateEvent.hpp"
+
+#define VN_POSITION_EVENT_VALUE_UNCHANGED std::numeric_limits::min()
+
+namespace Dawn {
+ class VNPositionEvent : public VNAnimateEvent {
+ public:
+ SceneItem *item = nullptr;
+
+ VNPositionEvent() {
+ from = glm::vec3(
+ VN_POSITION_EVENT_VALUE_UNCHANGED,
+ VN_POSITION_EVENT_VALUE_UNCHANGED,
+ VN_POSITION_EVENT_VALUE_UNCHANGED
+ );
+ to = glm::vec3(
+ VN_POSITION_EVENT_VALUE_UNCHANGED,
+ VN_POSITION_EVENT_VALUE_UNCHANGED,
+ VN_POSITION_EVENT_VALUE_UNCHANGED
+ );
+ }
+
+ protected:
+ SimplerCallbackAnimation animation;
+
+ void onStart() override {
+ assertNotNull(item);
+
+ auto start = item->transform.getLocalPosition();
+ if(from.x == VN_POSITION_EVENT_VALUE_UNCHANGED) start.x = from.x;
+ if(from.y == VN_POSITION_EVENT_VALUE_UNCHANGED) start.y = from.y;
+ if(from.z == VN_POSITION_EVENT_VALUE_UNCHANGED) start.z = from.z;
+
+ if(to.x == VN_POSITION_EVENT_VALUE_UNCHANGED) to.x = start.x;
+ if(to.y == VN_POSITION_EVENT_VALUE_UNCHANGED) to.y = start.y;
+ if(to.z == VN_POSITION_EVENT_VALUE_UNCHANGED) to.z = start.z;
+
+ VNAnimateEvent::onStart();
+ }
+
+ void setValue(glm::vec3 value) override {
+ this->item->transform.setLocalPosition(value);
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNSetEvent.hpp b/src/dawn/games/vn/events/VNSetEvent.hpp
new file mode 100644
index 00000000..bd9b1e50
--- /dev/null
+++ b/src/dawn/games/vn/events/VNSetEvent.hpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNAnimateEvent.hpp"
+
+namespace Dawn {
+ template
+ class VNSetEvent : public VNAnimateEvent {
+ public:
+ T *modifies = nullptr;
+
+ protected:
+ void onStart() override {
+ assertNotNull(this->modifies);
+ this->from = *modifies;
+
+ VNAnimateEvent::onStart();
+ }
+
+ void setValue(T value) override {
+ *modifies = value;
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNTextEvent.hpp b/src/dawn/games/vn/events/VNTextEvent.hpp
new file mode 100644
index 00000000..00021a60
--- /dev/null
+++ b/src/dawn/games/vn/events/VNTextEvent.hpp
@@ -0,0 +1,26 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNEvent.hpp"
+
+namespace Dawn {
+ class VNTextEvent : public VNEvent {
+ public:
+ std::string text;
+
+ protected:
+ void onStart() override {
+ std::cout << "TEXT: " << text << std::endl;
+
+ useEvent([&](float_t delta) {
+ if(getScene()->game->inputManager.isPressed(INPUT_BIND_ACCEPT)) {
+ std::cout << "Text Advance" << std::endl;
+ this->next();
+ }
+ }, getScene()->eventSceneUpdate);
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/games/vn/events/VNWaitEvent.hpp b/src/dawn/games/vn/events/VNWaitEvent.hpp
new file mode 100644
index 00000000..a0233574
--- /dev/null
+++ b/src/dawn/games/vn/events/VNWaitEvent.hpp
@@ -0,0 +1,16 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNAnimateEvent.hpp"
+
+namespace Dawn {
+ class VNWaitEvent : public VNAnimateEvent {
+ protected:
+ void setValue(float_t value) override {
+ // Do nothing
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/dawn/prefabs/SimpleSpinningCubePrefab.hpp b/src/dawn/prefabs/SimpleSpinningCubePrefab.hpp
index 888a2fdc..cfb41cb3 100644
--- a/src/dawn/prefabs/SimpleSpinningCubePrefab.hpp
+++ b/src/dawn/prefabs/SimpleSpinningCubePrefab.hpp
@@ -6,8 +6,8 @@
#pragma once
#include "prefab/SceneItemPrefab.hpp"
#include "display/mesh/CubeMesh.hpp"
-#include "scene/components/display/MeshRenderer.hpp"
-#include "scene/components/display/CubeMeshHost.hpp"
+#include "scene/components/display/mesh/MeshRenderer.hpp"
+#include "scene/components/display/mesh/CubeMeshHost.hpp"
#include "scene/components/display/material/SimpleTexturedMaterial.hpp"
#include "scene/components/example/ExampleSpin.hpp"
#include "scene/components/physics/3d/CubeCollider.hpp"
diff --git a/src/dawn/state/State.hpp b/src/dawn/state/State.hpp
index 757156c3..281873c2 100644
--- a/src/dawn/state/State.hpp
+++ b/src/dawn/state/State.hpp
@@ -44,6 +44,36 @@ namespace Dawn {
private:
std::vector eventsSubscribed;
std::vector eventLegacyBridge;
+
+ protected:
+ /**
+ * Removes all currently subscribed effects and events.
+ */
+ void unsubscribeAllEvents() {
+ auto providers = this->_stateProviderListeners;
+ auto itProvider = providers.begin();
+ while(itProvider != providers.end()) {
+ (*itProvider)();
+ ++itProvider;
+ }
+
+ auto it = this->eventsSubscribed.begin();
+ while(it != this->eventsSubscribed.end()) {
+ (*it)->_stateOwnerDestroyed(this);
+ ++it;
+ }
+
+ auto itBridge = this->eventLegacyBridge.begin();
+ while(itBridge != this->eventLegacyBridge.end()) {
+ (*itBridge)->removeListener();
+ delete *itBridge;
+ ++itBridge;
+ }
+
+ this->_stateProviderListeners.clear();
+ this->eventsSubscribed.clear();
+ this->eventLegacyBridge.clear();
+ }
public:
std::vector> _stateProviderListeners;
@@ -123,7 +153,11 @@ namespace Dawn {
auto itProp = props.begin();
while(itProp != props.end()) {
auto property = *itProp;
- if(property->owner == nullptr) { property->owner = this; } else { assertTrue(property->owner == this); }
+ if(property->owner == nullptr) {
+ property->owner = this;
+ } else {
+ assertTrue(property->owner == this);
+ }
property->_effectListners.push_back(fn);
++itProp;
}
@@ -230,25 +264,7 @@ namespace Dawn {
* useEffects or useEvents.
*/
virtual ~StateOwner() {
- auto providers = this->_stateProviderListeners;
- auto itProvider = providers.begin();
- while(itProvider != providers.end()) {
- (*itProvider)();
- ++itProvider;
- }
-
- auto it = this->eventsSubscribed.begin();
- while(it != this->eventsSubscribed.end()) {
- (*it)->_stateOwnerDestroyed(this);
- ++it;
- }
-
- auto itBridge = this->eventLegacyBridge.begin();
- while(itBridge != this->eventLegacyBridge.end()) {
- (*itBridge)->removeListener();
- delete *itBridge;
- ++itBridge;
- }
+ this->unsubscribeAllEvents();
}
};
}
\ No newline at end of file
diff --git a/src/dawn/state/StateEvent.hpp b/src/dawn/state/StateEvent.hpp
index 5d75f387..d54ed9ae 100644
--- a/src/dawn/state/StateEvent.hpp
+++ b/src/dawn/state/StateEvent.hpp
@@ -39,8 +39,9 @@ namespace Dawn {
* @param args Arguments for this event to pass to the listeners.
*/
void invoke(A... args) {
- auto it = this->_eventListeners.begin();
- while(it != this->_eventListeners.end()) {
+ auto copy = this->_eventListeners;
+ auto it = copy.begin();
+ while(it != copy.end()) {
it->listener(args...);
++it;
}
diff --git a/src/dawnliminal/CMakeLists.txt b/src/dawnliminal/CMakeLists.txt
new file mode 100644
index 00000000..b78b1e1c
--- /dev/null
+++ b/src/dawnliminal/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Build Project
+add_executable(${DAWN_TARGET_NAME})
+
+# Includes
+target_include_directories(${DAWN_TARGET_NAME}
+ PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}
+)
+
+# Subdirs
+add_subdirectory(game)
+add_subdirectory(save)
+
+# Assets
+set(LIMINAL_ASSETS_DIR ${DAWN_ASSETS_DIR}/games/liminal)
+tool_vnscene(${LIMINAL_ASSETS_DIR}/test.xml)
\ No newline at end of file
diff --git a/src/dawnliminal/game/CMakeLists.txt b/src/dawnliminal/game/CMakeLists.txt
new file mode 100644
index 00000000..6ab23ef2
--- /dev/null
+++ b/src/dawnliminal/game/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Sources
+target_sources(${DAWN_TARGET_NAME}
+ PRIVATE
+ LiminalGame.cpp
+)
\ No newline at end of file
diff --git a/src/dawnliminal/game/LiminalGame.cpp b/src/dawnliminal/game/LiminalGame.cpp
new file mode 100644
index 00000000..7bec3cab
--- /dev/null
+++ b/src/dawnliminal/game/LiminalGame.cpp
@@ -0,0 +1,15 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "game/DawnGame.hpp"
+#include "scenes/HelloWorldScene.hpp"
+#include "vnscenes/TestScene.hpp"
+
+using namespace Dawn;
+
+Scene * Dawn::dawnGameGetInitialScene(DawnGame *game) {
+ // return new HelloWorldScene(game);
+ return new TestScene(game);
+}
\ No newline at end of file
diff --git a/src/dawnliminal/input/InputBinds.hpp b/src/dawnliminal/input/InputBinds.hpp
new file mode 100644
index 00000000..32fc1016
--- /dev/null
+++ b/src/dawnliminal/input/InputBinds.hpp
@@ -0,0 +1,19 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "input/InputManager.hpp"
+
+#define INPUT_BIND(n) ((inputbind_t)n)
+
+#define INPUT_BIND_ACCEPT INPUT_BIND(1)
+#define INPUT_BIND_NEGATIVE_X INPUT_BIND(2)
+#define INPUT_BIND_POSITIVE_X INPUT_BIND(3)
+#define INPUT_BIND_NEGATIVE_Y INPUT_BIND(4)
+#define INPUT_BIND_POSITIVE_Y INPUT_BIND(5)
+#define INPUT_BIND_MOUSE_X INPUT_BIND(6)
+#define INPUT_BIND_MOUSE_Y INPUT_BIND(7)
+#define INPUT_BIND_MOUSE_CLICK INPUT_BIND(8)
+#define INPUT_BIND_CANCEL INPUT_BIND(9)
\ No newline at end of file
diff --git a/src/dawnliminal/save/CMakeLists.txt b/src/dawnliminal/save/CMakeLists.txt
new file mode 100644
index 00000000..97158e97
--- /dev/null
+++ b/src/dawnliminal/save/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Sources
+target_sources(${DAWN_TARGET_NAME}
+ PRIVATE
+ LiminalSave.cpp
+)
\ No newline at end of file
diff --git a/src/dawnliminal/save/LiminalSave.cpp b/src/dawnliminal/save/LiminalSave.cpp
new file mode 100644
index 00000000..3c029bd4
--- /dev/null
+++ b/src/dawnliminal/save/LiminalSave.cpp
@@ -0,0 +1,12 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "save/SaveManager.hpp"
+
+using namespace Dawn;
+
+bool_t Dawn::saveValidateFile(struct SaveFile raw) {
+ return false;
+}
\ No newline at end of file
diff --git a/src/dawnliminal/scenes/HelloWorldScene.hpp b/src/dawnliminal/scenes/HelloWorldScene.hpp
new file mode 100644
index 00000000..6daa3b5e
--- /dev/null
+++ b/src/dawnliminal/scenes/HelloWorldScene.hpp
@@ -0,0 +1,88 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "scene/Scene.hpp"
+#include "scene/components/display/Camera.hpp"
+#include "prefabs/SimpleSpinningCubePrefab.hpp"
+#include "games/vn/components/VNManager.hpp"
+#include "games/vn/events/VNDummyEvent.hpp"
+#include "games/vn/events/VNTextEvent.hpp"
+#include "games/vn/events/VNPositionEvent.hpp"
+#include "games/vn/events/VNSetEvent.hpp"
+#include "games/vn/events/VNChoiceEvent.hpp"
+#include "games/vn/events/VNParallelEvent.hpp"
+#include "games/vn/events/VNWaitEvent.hpp"
+
+namespace Dawn {
+ class HelloWorldScene : public Scene {
+ protected:
+ Camera *camera;
+ UICanvas *canvas;
+
+ int32_t test = 0;
+
+ void stage() override {
+ canvas = UICanvas::create(this);
+
+ camera = Camera::create(this);
+ camera->fov = 0.436332f;
+ camera->transform->lookAt(glm::vec3(10, 10, 10), glm::vec3(0, 0, 0));
+
+ auto cube = SimpleSpinningCubePrefab::create(this);
+
+ auto vnItem = this->createSceneItem();
+ auto vnManager = vnItem->addComponent();
+
+ auto eventTest = vnManager->createEvent();
+
+ auto positionEvent = vnManager->createEvent();
+ positionEvent->to.x = 2.0f;
+ positionEvent->item = cube;
+ positionEvent->duration = 3.0f;
+
+ auto vnTextEvent = vnManager->createEvent();
+ vnTextEvent->text = "Hello World!";
+
+ auto setPropertyEvent = vnManager->createEvent>();
+ setPropertyEvent->modifies = &test;
+ setPropertyEvent->to = 10;
+
+ auto choiceEvent = vnManager->createEvent();
+ choiceEvent->text = "Choice?";
+ choiceEvent->choices["state0"] = "State 0";
+ choiceEvent->choices["state1"] = "State 1";
+ choiceEvent->choices["state2"] = "State 2";
+ choiceEvent->choices["state3"] = "State 3";
+
+ auto parallelEvent = vnManager->createEvent();
+ auto wait0 = vnManager->createEvent();
+ wait0->duration = 1.0f;
+ parallelEvent->events.push_back(wait0);
+
+ auto wait1 = vnManager->createEvent();
+ wait1->duration = 3.0f;
+ parallelEvent->events.push_back(wait1);
+
+ eventTest
+ ->then(parallelEvent)
+ ->then(positionEvent)
+ // ->then(vnTextEvent)
+ // ->then(setPropertyEvent)
+ // ->then(choiceEvent)
+ ;
+ vnManager->setEvent(eventTest);
+ }
+
+ std::vector getRequiredAssets() override {
+ auto assMan = &this->game->assetManager;
+ std::vector assets;
+ return assets;
+ }
+
+ public:
+ HelloWorldScene(DawnGame *game) : Scene(game) {}
+ };
+}
\ No newline at end of file
diff --git a/src/dawnrose/scene/components/HurtHazard.cpp b/src/dawnrose/scene/components/HurtHazard.cpp
index 05cd6ebe..bd4c6a1d 100644
--- a/src/dawnrose/scene/components/HurtHazard.cpp
+++ b/src/dawnrose/scene/components/HurtHazard.cpp
@@ -40,8 +40,6 @@ void HurtHazard::onStart() {
otherHealth->damage({
.amount = damage
});
-
- std::cout << "Trigger" << std::endl;
}, this->trigger->eventTriggerEnter);
}, this->trigger)();
}
\ No newline at end of file
diff --git a/src/dawnrose/scene/components/entity/EntityInteractable.cpp b/src/dawnrose/scene/components/entity/EntityInteractable.cpp
new file mode 100644
index 00000000..e52dec04
--- /dev/null
+++ b/src/dawnrose/scene/components/entity/EntityInteractable.cpp
@@ -0,0 +1,17 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "EntityInteractable.hpp"
+
+using namespace Dawn;
+
+EntityInteractable::EntityInteractable(SceneItem* item) : SceneItemComponent(item) {
+
+}
+
+
+void EntityInteractable::interact() {
+ std::cout << "Interact!" << std::endl;
+}
\ No newline at end of file
diff --git a/src/dawnrose/scene/components/entity/EntityInteractable.hpp b/src/dawnrose/scene/components/entity/EntityInteractable.hpp
new file mode 100644
index 00000000..bb8fef80
--- /dev/null
+++ b/src/dawnrose/scene/components/entity/EntityInteractable.hpp
@@ -0,0 +1,20 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "scene/SceneItemComponent.hpp"
+#include "scene/components/physics/2d/TriggerController2D.hpp"
+
+namespace Dawn {
+ class EntityInteractable : public SceneItemComponent {
+ public:
+ EntityInteractable(SceneItem *item);
+
+ /**
+ * Called when one entity interacts with this entity.
+ */
+ void interact();
+ };
+}
\ No newline at end of file
diff --git a/src/dawnrose/scene/components/entity/EntityInteractor.cpp b/src/dawnrose/scene/components/entity/EntityInteractor.cpp
new file mode 100644
index 00000000..2e675c2d
--- /dev/null
+++ b/src/dawnrose/scene/components/entity/EntityInteractor.cpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "EntityInteractor.hpp"
+
+using namespace Dawn;
+
+EntityInteractor::EntityInteractor(SceneItem* item) :
+ trigger(nullptr),
+ SceneItemComponent(item)
+{
+}
+
+void EntityInteractor::onStart() {
+ this->evtTriggerEnter = [&]{};
+
+ useEffect([&]{
+ this->evtTriggerEnter();
+ if(this->trigger == nullptr) return;
+
+ this->evtTriggerEnter = useEvent([&](EntityInteractable *interactable) {
+ interactable->interact();
+ }, this->trigger->eventTriggerEnter);
+ }, this->trigger)();
+}
diff --git a/src/dawnrose/scene/components/entity/EntityInteractor.hpp b/src/dawnrose/scene/components/entity/EntityInteractor.hpp
new file mode 100644
index 00000000..05e1abe7
--- /dev/null
+++ b/src/dawnrose/scene/components/entity/EntityInteractor.hpp
@@ -0,0 +1,21 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "EntityInteractable.hpp"
+
+namespace Dawn {
+ class EntityInteractor : public SceneItemComponent {
+ private:
+ std::function evtTriggerEnter;
+
+ public:
+ // @optional
+ StateProperty trigger;
+
+ EntityInteractor(SceneItem* item);
+ void onStart() override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/CMakeLists.txt b/src/dawntools/CMakeLists.txt
index 0cec211a..7f4bff00 100644
--- a/src/dawntools/CMakeLists.txt
+++ b/src/dawntools/CMakeLists.txt
@@ -20,4 +20,5 @@ include(util/CMakeLists.txt)
# Tools
add_subdirectory(prefabtool)
-add_subdirectory(texturetool)
\ No newline at end of file
+add_subdirectory(texturetool)
+add_subdirectory(vnscenetool)
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/CMakeLists.txt b/src/dawntools/vnscenetool/CMakeLists.txt
new file mode 100644
index 00000000..028c7b4b
--- /dev/null
+++ b/src/dawntools/vnscenetool/CMakeLists.txt
@@ -0,0 +1,64 @@
+# Copyright (c) 2023 Dominic Msters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Texture Build Tool
+project(vnscenetool VERSION 1.0)
+add_executable(vnscenetool)
+
+# Subdirs
+add_subdirectory(events)
+
+# Sources
+target_sources(vnscenetool
+ PRIVATE
+ ${DAWN_SHARED_SOURCES}
+ ${DAWN_TOOL_SOURCES}
+ VNSceneTool.cpp
+ VNSceneParser.cpp
+ VNSceneGen.cpp
+ VNSceneItemParser.cpp
+)
+
+# Includes
+target_include_directories(vnscenetool
+ PUBLIC
+ ${DAWN_SHARED_INCLUDES}
+ ${DAWN_TOOL_INCLUDES}
+ ${CMAKE_CURRENT_LIST_DIR}
+)
+
+# Definitions
+target_compile_definitions(vnscenetool
+ PUBLIC
+ ${DAWN_SHARED_DEFINITIONS}
+ DAWN_TOOL_INSTANCE=VNSceneTool
+ DAWN_TOOL_HEADER="VNSceneTool.hpp"
+)
+
+# Libraries
+target_link_libraries(vnscenetool
+ PUBLIC
+ ${DAWN_BUILD_HOST_LIBS}
+)
+
+# Tool Function
+function(tool_vnscene in)
+ set(DEPS "")
+ if(DAWN_BUILD_TOOLS)
+ set(DEPS vnscenetool)
+ endif()
+
+ STRING(REGEX REPLACE "[\.|\\|\/]" "-" scene_name ${in})
+ add_custom_target(scene_${scene_name}
+ COMMAND vnscenetool --input="${DAWN_ASSETS_SOURCE_DIR}/${in}" --output="${DAWN_GENERATED_DIR}/generatedscenes"
+ COMMENT "Generating prefab from ${in}"
+ DEPENDS ${DEPS}
+ )
+ target_include_directories(${DAWN_TARGET_NAME}
+ PUBLIC
+ ${DAWN_GENERATED_DIR}/generatedscenes
+ )
+ add_dependencies(${DAWN_TARGET_NAME} scene_${scene_name})
+endfunction()
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneGen.cpp b/src/dawntools/vnscenetool/VNSceneGen.cpp
new file mode 100644
index 00000000..0c70a001
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneGen.cpp
@@ -0,0 +1,176 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSceneGen.hpp"
+
+using namespace Dawn;
+
+void VNSceneGen::test(
+ std::string eventName,
+ struct VNSceneEvent *event,
+ int32_t *eventIndex,
+ std::vector *body,
+ std::vector *includes
+) {
+ std::string initType = "";
+ std::string toInclude = "";
+ std::string initArgs = "";
+ std::vector afterLines;
+
+ switch(event->type) {
+ case VN_SCENE_EVENT_TYPE_TEXT:
+ initType = "VNTextEvent";
+ toInclude = "games/vn/events/VNTextEvent.hpp";
+ line(&afterLines, eventName + "->" + "text = \"" + event->text.texts.begin()->text + "\";", "");
+ break;
+
+ case VN_SCENE_EVENT_TYPE_POSITION:
+ initType = "VNPositionEvent";
+ toInclude = "games/vn/events/VNPositionEvent.hpp";
+ line(&afterLines, eventName + "->item = " + event->position.item + ";", "");
+ if(event->position.x != "") line(&afterLines, eventName + "->" + "to.x = " + event->position.x + ";", "");
+ if(event->position.y != "") line(&afterLines, eventName + "->" + "to.y = " + event->position.y + ";", "");
+ if(event->position.z != "") line(&afterLines, eventName + "->" + "to.z = " + event->position.z + ";", "");
+ break;
+
+ case VN_SCENE_EVENT_TYPE_SET:
+ initType = "VNSetEvent<" + event->set.type + ">";
+ toInclude = "games/vn/events/VNSetEvent.hpp";
+ line(&afterLines, eventName + "->modifies = &" + event->set.property + ";", "");
+ line(&afterLines, eventName + "->to = " + event->set.to + ";", "");
+ if(event->set.from != "") line(&afterLines, eventName + "->from = " + event->set.from + ";", "");
+ if(event->set.duration != "") line(&afterLines, eventName + "->duration = " + event->set.duration + ";", "");
+ break;
+
+ case VN_SCENE_EVENT_TYPE_WAIT:
+ initType = "VNWaitEvent";
+ toInclude = "games/vn/events/VNWaitEvent.hpp";
+ line(&afterLines, eventName + "->duration = " + event->wait.duration + ";", "");
+ break;
+
+ case VN_SCENE_EVENT_TYPE_PARALLEL: {
+ initType = "VNParallelEvent";
+ toInclude = "games/vn/events/VNParallelEvent.hpp";
+
+ auto itParallel = event->parallel.events.events.begin();
+ while(itParallel != event->parallel.events.events.end()) {
+ std::string pEventName = "pEvent" + std::to_string((*eventIndex)++);
+ VNSceneGen::test(
+ pEventName,
+ &(*itParallel),
+ eventIndex,
+ &afterLines,
+ includes
+ );
+ line(&afterLines, eventName + "->events.push_back(" + pEventName + ");", "");
+ line(&afterLines, "", "");
+ ++itParallel;
+ }
+ break;
+ }
+
+ case VN_SCENE_EVENT_TYPE_MARKER:
+ initType = "VNDummyEvent";
+ toInclude = "games/vn/events/VNDummyEvent.hpp";
+ line(&afterLines, "auto marker_" + event->marker.name + " = " + eventName + ";", "");
+ break;
+
+ default:
+ std::cout << "Unknown event type: " << event->type << std::endl;
+ assertUnreachable();
+ }
+
+ if(!toInclude.empty()) includes->push_back(toInclude);
+
+ line(body, "auto " + eventName + " = vnManager->createEvent<" + initType + ">(" + initArgs + ");", "");
+ lines(body, afterLines, "");
+}
+
+void VNSceneGen::generate(
+ std::vector *out,
+ struct VNScene *scene,
+ std::string tabs
+) {
+ struct ClassGenInfo classInfo;
+ classInfo.clazz = "TestScene";
+ classInfo.extend = "Scene";
+ classInfo.constructorArgs = "DawnGame *game";
+ classInfo.extendArgs = "game";
+
+ classInfo.includes.push_back("scene/Scene.hpp");
+
+ struct MethodGenInfo methodAssets;
+ methodAssets.name = "getRequiredAssets";
+ methodAssets.isOverride = true;
+ methodAssets.type = "std::vector";
+ line(&methodAssets.body, "auto assMan = &this->game->assetManager;", "");
+ line(&methodAssets.body, "std::vector assets;", "");
+ line(&methodAssets.body, "return assets;", "");
+
+ struct MethodGenInfo methodStage;
+ methodStage.name = "stage";
+ methodStage.isOverride = "true";
+ line(&methodStage.body, "// test", "");
+
+ // TEST
+ line(&methodStage.body, "auto canvas = UICanvas::create(this);", "");
+ line(&methodStage.body, "", "");
+
+ classInfo.includes.push_back("scene/components/display/Camera.hpp");
+ line(&methodStage.body, "auto camera = Camera::create(this);", "");
+ line(&methodStage.body, "camera->fov = 0.436332f;", "");
+ line(&methodStage.body, "camera->transform->lookAt(glm::vec3(10, 10, 10), glm::vec3(0, 0, 0));", "");
+
+ // Items
+ int32_t itemRefIndex = 0;
+ auto itItems = scene->items.begin();
+ while(itItems != scene->items.end()) {
+ struct VNSceneItem item = *itItems;
+ if(item.ref.empty()) item.ref = "item" + std::to_string(itemRefIndex++);
+ classInfo.includes.push_back(item.prefab + ".hpp");
+
+ line(&methodStage.body, "", "");
+ line(&methodStage.body, "auto " + item.ref + " = " + item.className + "::create(this);", "");
+
+ ++itItems;
+ }
+
+ line(&methodStage.body, "", "");
+
+ // Events
+ classInfo.includes.push_back("games/vn/components/VNManager.hpp");
+ line(&methodStage.body, "auto vnItem = this->createSceneItem();", "");
+ line(&methodStage.body, "auto vnManager = vnItem->addComponent();", "");
+ line(&methodStage.body, "VNEvent *previous = vnManager->createEvent();", "");
+ line(&methodStage.body, "auto eventStart = previous;", "");
+
+ int32_t eventIndex = 0;
+ auto itEvents = scene->events.events.begin();
+ std::string previous = "eventStart";
+ while(itEvents != scene->events.events.end()) {
+ line(&methodStage.body, "", "");
+ std::string eventName = "event" + std::to_string(eventIndex++);
+ VNSceneGen::test(
+ eventName,
+ &(*itEvents),
+ &eventIndex,
+ &methodStage.body,
+ &classInfo.includes
+ );
+ line(&methodStage.body, previous + "->then(" + eventName + ");", "");
+ previous = eventName;
+ ++itEvents;
+ }
+
+ line(&methodStage.body, "", "");
+ line(&methodStage.body, "vnManager->setEvent(eventStart);", "");
+
+ // Add in methods
+ CodeGen::methodGen(&classInfo.protectedCode, methodAssets);
+ line(&classInfo.protectedCode, "", "");
+ CodeGen::methodGen(&classInfo.protectedCode, methodStage);
+
+ CodeGen::classGen(out, classInfo);
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneGen.hpp b/src/dawntools/vnscenetool/VNSceneGen.hpp
new file mode 100644
index 00000000..c70c9aed
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneGen.hpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNSceneParser.hpp"
+#include "util/CodeGen.hpp"
+
+namespace Dawn {
+ class VNSceneGen : public CodeGen {
+ public:
+ static void test(
+ std::string eventName,
+ struct VNSceneEvent *event,
+ int32_t *eventIndex,
+ std::vector *body,
+ std::vector *includes
+ );
+
+ static void generate(
+ std::vector *out,
+ struct VNScene *scene,
+ std::string tabs
+ );
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneItemParser.cpp b/src/dawntools/vnscenetool/VNSceneItemParser.cpp
new file mode 100644
index 00000000..e903e57a
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneItemParser.cpp
@@ -0,0 +1,47 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSceneItemParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNSceneItemParser::getRequiredAttributes() {
+ return { "prefab" };
+}
+
+std::map VNSceneItemParser::getOptionalAttributes() {
+ return {
+ { "ref", "" }
+ };
+}
+
+int32_t VNSceneItemParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNSceneItem *out,
+ std::string *error
+) {
+ out->ref = values["ref"];
+ out->prefab = values["prefab"];
+
+ // Split prefab by / and use the last part as the class name
+ std::string clazz = out->prefab;
+ size_t pos = clazz.find_last_of('/');
+ if(pos != std::string::npos) clazz = clazz.substr(pos+1);
+ out->className = clazz;
+
+ // Make sure prefab and className is not empty
+ if(out->prefab.empty()) {
+ *error = "Prefab cannot be empty.";
+ return -1;
+ }
+
+ if(out->className.empty()) {
+ *error = "Class name cannot be empty.";
+ return -1;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneItemParser.hpp b/src/dawntools/vnscenetool/VNSceneItemParser.hpp
new file mode 100644
index 00000000..02515e9b
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneItemParser.hpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNSceneItem {
+ std::string ref;
+ std::string prefab;
+ std::string className;
+ };
+
+ class VNSceneItemParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNSceneItem *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneParser.cpp b/src/dawntools/vnscenetool/VNSceneParser.cpp
new file mode 100644
index 00000000..736ec8c5
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneParser.cpp
@@ -0,0 +1,51 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSceneParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNSceneParser::getRequiredAttributes() {
+ return { };
+}
+
+std::map VNSceneParser::getOptionalAttributes() {
+ return { };
+}
+
+int32_t VNSceneParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNScene *out,
+ std::string *error
+) {
+ //
+ int32_t ret;
+
+ auto itChildren = node->children.begin();
+ while(itChildren != node->children.end()) {
+ Xml *child = *itChildren;
+
+ // Parse event(s)
+ if(child->node == "item") {
+ struct VNSceneItem item;
+ ret = (VNSceneItemParser()).parse(child, &item, error);
+ if(ret != 0) return ret;
+ out->items.push_back(item);
+
+ } else if(child->node == "events") {
+ ret = (VNSceneEventsParser()).parse(child, &out->events, error);
+ if(ret != 0) return ret;
+
+ } else {
+ // Unknown node
+ *error = "Unknown node '" + child->node + "' in ";
+ return -1;
+ }
+ itChildren++;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneParser.hpp b/src/dawntools/vnscenetool/VNSceneParser.hpp
new file mode 100644
index 00000000..17f661c4
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneParser.hpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNSceneItemParser.hpp"
+#include "events/VNSceneEventsParser.hpp"
+
+namespace Dawn {
+ struct VNScene {
+ std::vector items;
+ struct VNSceneEventList events;
+ };
+
+ class VNSceneParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNScene *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneTool.cpp b/src/dawntools/vnscenetool/VNSceneTool.cpp
new file mode 100644
index 00000000..0f287b9c
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneTool.cpp
@@ -0,0 +1,65 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSceneTool.hpp"
+
+using namespace Dawn;
+
+std::vector VNSceneTool::getRequiredFlags() {
+ return { "input", "output" };
+}
+
+std::map VNSceneTool::getOptionalFlags() {
+ return std::map();
+}
+
+int32_t VNSceneTool::start() {
+ File input = File(flags["input"]);
+ if(!input.exists()) {
+ std::cout << "Input file does not exist!" << std::endl;
+ return 1;
+ }
+
+ std::string data;
+ if(!input.readString(&data)) {
+ std::cout << "Failed to read input file!" << std::endl;
+ return 1;
+ }
+
+ auto xml = Xml::load(data);
+ std::string error;
+ struct VNScene scene;
+ auto result = ((VNSceneParser()).parse(&xml, &scene, &error));
+ if(result != 0) {
+ std::cout << "Failed to parse scene: " << error << std::endl;
+ return result;
+ }
+
+ // Generate output
+ std::vector outputData;
+ VNSceneGen::generate(&outputData, &scene, "");
+
+ // Load output file from name and type
+ File outputFile = File(flags["output"] + "/vnscenes/TestScene.hpp");
+ if(!outputFile.mkdirp()) {
+ std::cout << "Failed to create output directory!" << std::endl;
+ return 1;
+ }
+
+ // Combine vector into single string
+ std::string outputDataStr = "";
+ auto it = outputData.begin();
+ while(it != outputData.end()) {
+ outputDataStr += *it + "\n";
+ ++it;
+ }
+
+ if(!outputFile.writeString(outputDataStr)) {
+ std::cout << "Failed to write output file!" << std::endl;
+ return 1;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/VNSceneTool.hpp b/src/dawntools/vnscenetool/VNSceneTool.hpp
new file mode 100644
index 00000000..5b7d12f4
--- /dev/null
+++ b/src/dawntools/vnscenetool/VNSceneTool.hpp
@@ -0,0 +1,21 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/DawnTool.hpp"
+#include "VNSceneParser.hpp"
+#include "VNSceneGen.hpp"
+#include "util/File.hpp"
+
+namespace Dawn {
+ class VNSceneTool : public DawnTool {
+ protected:
+ std::vector getRequiredFlags() override;
+ std::map getOptionalFlags() override;
+
+ public:
+ int32_t start();
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/CMakeLists.txt b/src/dawntools/vnscenetool/events/CMakeLists.txt
new file mode 100644
index 00000000..42d57e61
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright (c) 2023 Dominic Masters
+#
+# This software is released under the MIT License.
+# https://opensource.org/licenses/MIT
+
+# Sources
+target_sources(vnscenetool
+ PRIVATE
+ VNMarkerParser.cpp
+ VNSceneEventsParser.cpp
+ VNPositionEventParser.cpp
+ VNTextEventParser.cpp
+ VNSetEventParser.cpp
+ VNWaitEventParser.cpp
+ VNParallelEventParser.cpp
+)
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.cpp b/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.cpp
new file mode 100644
index 00000000..3aa025c3
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.cpp
@@ -0,0 +1,26 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNGoToMarkerEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNGoToMarkerEventParser::getRequiredAttributes() {
+ return { "name" };
+}
+
+std::map VNGoToMarkerEventParser::getOptionalAttributes() {
+ return {};
+}
+
+int32_t VNGoToMarkerEventParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNGoToMarkerEvent *out,
+ std::string *error
+) {
+ out->name = values["name"];
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.hpp b/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.hpp
new file mode 100644
index 00000000..e44d0630
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNGoToMarkerEventParser.hpp
@@ -0,0 +1,25 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNGoToMarkerEvent {
+ std::string name;
+ };
+
+ class VNGoToMarkerEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNGoToMarkerEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNMarkerParser.cpp b/src/dawntools/vnscenetool/events/VNMarkerParser.cpp
new file mode 100644
index 00000000..93921925
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNMarkerParser.cpp
@@ -0,0 +1,32 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNMarkerParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNMarkerParser::getRequiredAttributes() {
+ return { "name" };
+}
+
+std::map VNMarkerParser::getOptionalAttributes() {
+ return {};
+}
+
+int32_t VNMarkerParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNMarker *out,
+ std::string *error
+) {
+ // Ensure name only contains letters, and numbers, no spaces or symbols
+ if(!std::regex_match(values["name"], std::regex("^[a-zA-Z0-9]+$"))) {
+ *error = "Marker name " + values["name"] + " must only contain letters and numbers.";
+ return -1;
+ }
+
+ out->name = values["name"];
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNMarkerParser.hpp b/src/dawntools/vnscenetool/events/VNMarkerParser.hpp
new file mode 100644
index 00000000..8fcc7840
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNMarkerParser.hpp
@@ -0,0 +1,26 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+#include
+
+namespace Dawn {
+ struct VNMarker {
+ std::string name;
+ };
+
+ class VNMarkerParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNMarker *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNParallelEventParser.cpp b/src/dawntools/vnscenetool/events/VNParallelEventParser.cpp
new file mode 100644
index 00000000..a811bc65
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNParallelEventParser.cpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNParallelEventParser.hpp"
+#include "VNSceneEventsParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNParallelEventParser::getRequiredAttributes() {
+ return std::vector();
+}
+
+std::map VNParallelEventParser::getOptionalAttributes() {
+ return std::map();
+}
+
+int32_t VNParallelEventParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNParallelEvent *out,
+ std::string *error
+) {
+ // Parse all children
+ return (VNSceneEventsParser()).parse(node, &out->events, error);
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNParallelEventParser.hpp b/src/dawntools/vnscenetool/events/VNParallelEventParser.hpp
new file mode 100644
index 00000000..07169f91
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNParallelEventParser.hpp
@@ -0,0 +1,23 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNParallelEvent;
+
+ class VNParallelEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNParallelEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNPositionEventParser.cpp b/src/dawntools/vnscenetool/events/VNPositionEventParser.cpp
new file mode 100644
index 00000000..e43eaafb
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNPositionEventParser.cpp
@@ -0,0 +1,33 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNPositionEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNPositionEventParser::getRequiredAttributes() {
+ return { "item" };
+}
+
+std::map VNPositionEventParser::getOptionalAttributes() {
+ return {
+ { "x", "" },
+ { "y", "" },
+ { "z", "" }
+ };
+}
+
+int32_t VNPositionEventParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNPositionEvent *out,
+ std::string *error
+) {
+ out->x = values["x"];
+ out->y = values["y"];
+ out->z = values["z"];
+ out->item = values["item"];
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNPositionEventParser.hpp b/src/dawntools/vnscenetool/events/VNPositionEventParser.hpp
new file mode 100644
index 00000000..a670ed0c
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNPositionEventParser.hpp
@@ -0,0 +1,28 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNPositionEvent {
+ std::string x = "";
+ std::string y = "";
+ std::string z = "";
+ std::string item = "";
+ };
+
+ class VNPositionEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNPositionEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNSceneEventsParser.cpp b/src/dawntools/vnscenetool/events/VNSceneEventsParser.cpp
new file mode 100644
index 00000000..51dd7532
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNSceneEventsParser.cpp
@@ -0,0 +1,74 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSceneEventsParser.hpp"
+#include "VNParallelEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNSceneEventsParser::getRequiredAttributes() {
+ return { };
+}
+
+std::map VNSceneEventsParser::getOptionalAttributes() {
+ return { };
+}
+
+int32_t VNSceneEventsParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNSceneEventList *out,
+ std::string *error
+) {
+ int32_t ret;
+
+ auto itChildren = node->children.begin();
+ while(itChildren != node->children.end()) {
+ Xml *child = *itChildren;
+ struct VNSceneEvent event;
+
+ // Parse event(s)
+ if(child->node == "text") {
+ event.type = VN_SCENE_EVENT_TYPE_TEXT;
+ ret = (VNTextEventParser()).parse(child, &event.text, error);
+ if(ret != 0) return ret;
+
+ } else if(child->node == "position") {
+ event.type = VN_SCENE_EVENT_TYPE_POSITION;
+ ret = (VNPositionEventParser()).parse(child, &event.position, error);
+ if(ret != 0) return ret;
+
+ } else if(child->node == "set") {
+ event.type = VN_SCENE_EVENT_TYPE_SET;
+ ret = (VNSetEventParser()).parse(child, &event.set, error);
+ if(ret != 0) return ret;
+
+ } else if(child->node == "wait") {
+ event.type = VN_SCENE_EVENT_TYPE_WAIT;
+ ret = (VNWaitEventParser()).parse(child, &event.wait, error);
+ if(ret != 0) return ret;
+
+ } else if(child->node == "parallel") {
+ event.type = VN_SCENE_EVENT_TYPE_PARALLEL;
+ ret = (VNParallelEventParser()).parse(child, &event.parallel, error);
+ if(ret != 0) return ret;
+
+ } else if(child->node == "marker") {
+ event.type = VN_SCENE_EVENT_TYPE_MARKER;
+ ret = (VNMarkerParser()).parse(child, &event.marker, error);
+ if(ret != 0) return ret;
+
+ } else {
+ *error = "Unknown child node '" + child->node + "'";
+ return -1;
+ }
+
+ if(ret != 0) return ret;
+ out->events.push_back(event);
+ itChildren++;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNSceneEventsParser.hpp b/src/dawntools/vnscenetool/events/VNSceneEventsParser.hpp
new file mode 100644
index 00000000..49698b49
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNSceneEventsParser.hpp
@@ -0,0 +1,56 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "VNTextEventParser.hpp"
+#include "VNPositionEventParser.hpp"
+#include "VNSetEventParser.hpp"
+#include "VNWaitEventParser.hpp"
+#include "VNParallelEventParser.hpp"
+#include "VNMarkerParser.hpp"
+
+namespace Dawn {
+ struct VNSceneEvent;
+
+ struct VNSceneEventList {
+ std::vector events;
+ };
+
+ enum VNSceneEventType {
+ VN_SCENE_EVENT_TYPE_TEXT,
+ VN_SCENE_EVENT_TYPE_POSITION,
+ VN_SCENE_EVENT_TYPE_SET,
+ VN_SCENE_EVENT_TYPE_WAIT,
+ VN_SCENE_EVENT_TYPE_PARALLEL,
+ VN_SCENE_EVENT_TYPE_MARKER
+ };
+
+ struct VNParallelEvent {
+ struct VNSceneEventList events;
+ };
+
+ struct VNSceneEvent {
+ enum VNSceneEventType type;
+
+ struct VNTextEvent text;
+ struct VNPositionEvent position;
+ struct VNSetEvent set;
+ struct VNWaitEvent wait;
+ struct VNParallelEvent parallel;
+ struct VNMarker marker;
+ };
+
+ class VNSceneEventsParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNSceneEventList *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNSetEventParser.cpp b/src/dawntools/vnscenetool/events/VNSetEventParser.cpp
new file mode 100644
index 00000000..878dcd7b
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNSetEventParser.cpp
@@ -0,0 +1,45 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNSetEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNSetEventParser::getRequiredAttributes() {
+ return { "property", "type" };
+}
+
+std::map VNSetEventParser::getOptionalAttributes() {
+ return {
+ { "to", "" },
+ { "value", "" },
+ { "from", "" },
+ { "duration", "" },
+ { "curve", "" }
+ };
+}
+
+int32_t VNSetEventParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNSetEvent *out,
+ std::string *error
+) {
+ if(values["to"] != "") {
+ out->to = values["to"];
+ } else if(values["value"] != "") {
+ out->to = values["value"];
+ } else {
+ *error = "Either 'to' or 'value' must be specified";
+ return -1;
+ }
+
+ out->type = values["type"];
+ out->property = values["property"];
+ out->from = values["from"];
+ out->duration = values["duration"];
+ out->curve = values["curve"];
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNSetEventParser.hpp b/src/dawntools/vnscenetool/events/VNSetEventParser.hpp
new file mode 100644
index 00000000..d085fa54
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNSetEventParser.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNSetEvent {
+ std::string property = "";
+ std::string to = "";
+ std::string from = "";
+ std::string duration = "";
+ std::string curve = "";
+ std::string type = "";
+ };
+
+ class VNSetEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNSetEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNTextEventParser.cpp b/src/dawntools/vnscenetool/events/VNTextEventParser.cpp
new file mode 100644
index 00000000..65d79ad3
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNTextEventParser.cpp
@@ -0,0 +1,43 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNTextEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNTextEventParser::getRequiredAttributes() {
+ return { };
+}
+
+std::map VNTextEventParser::getOptionalAttributes() {
+ return { };
+}
+
+int32_t VNTextEventParser::onParse(
+ Xml *node,
+ std::map values,
+ struct VNTextEvent *out,
+ std::string *error
+) {
+ auto itChildren = node->children.begin();
+ while(itChildren != node->children.end()) {
+ Xml *child = *itChildren;
+
+ // Parse strings
+ if(child->node == "string") {
+ VNText text;
+ text.language = child->attributes["lang"];
+ text.text = child->value;
+ out->texts.push_back(text);
+ } else {
+ *error = "Unknown child node '" + child->node + "'";
+ return -1;
+ }
+
+ itChildren++;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNTextEventParser.hpp b/src/dawntools/vnscenetool/events/VNTextEventParser.hpp
new file mode 100644
index 00000000..d351896b
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNTextEventParser.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNText {
+ std::string language;
+ std::string text;
+ };
+
+ struct VNTextEvent {
+ std::vector texts;
+ };
+
+ class VNTextEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ struct VNTextEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNWaitEventParser.cpp b/src/dawntools/vnscenetool/events/VNWaitEventParser.cpp
new file mode 100644
index 00000000..f4cf8f65
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNWaitEventParser.cpp
@@ -0,0 +1,35 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#include "VNWaitEventParser.hpp"
+
+using namespace Dawn;
+
+std::vector VNWaitEventParser::getRequiredAttributes() {
+ return { };
+}
+
+std::map VNWaitEventParser::getOptionalAttributes() {
+ return { { "duration", "" }, { "time", "" } };
+}
+
+int32_t VNWaitEventParser::onParse(
+ Xml *node,
+ std::map values,
+ VNWaitEvent *out,
+ std::string *error
+) {
+ //Get the duration
+ if(!values["duration"].empty()) {
+ out->duration = values["duration"];
+ } else if(!values["time"].empty()) {
+ out->duration = values["time"];
+ } else {
+ *error = "No duration specified.";
+ return -1;
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/dawntools/vnscenetool/events/VNWaitEventParser.hpp b/src/dawntools/vnscenetool/events/VNWaitEventParser.hpp
new file mode 100644
index 00000000..75d2bf6b
--- /dev/null
+++ b/src/dawntools/vnscenetool/events/VNWaitEventParser.hpp
@@ -0,0 +1,25 @@
+// Copyright (c) 2023 Dominic Masters
+//
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "util/XmlParser.hpp"
+
+namespace Dawn {
+ struct VNWaitEvent {
+ std::string duration;
+ };
+
+ class VNWaitEventParser : public XmlParser {
+ protected:
+ std::vector getRequiredAttributes() override;
+ std::map getOptionalAttributes() override;
+ int32_t onParse(
+ Xml *node,
+ std::map values,
+ VNWaitEvent *out,
+ std::string *error
+ ) override;
+ };
+}
\ No newline at end of file