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. + + + + + + + + + + + + + + + + + <string lang="en">Do you think Craig is cool?</string> + + + 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