diff --git a/.gdignore b/.gdignore
index 1dd8473..2c49341 100644
--- a/.gdignore
+++ b/.gdignore
@@ -1,607 +1,3 @@
-# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig
-# Created by https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
-# Edit at https://www.toptal.com/developers/gitignore?templates=windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
-
-### Backup ###
-*.bak
-*.gho
-*.ori
-*.orig
-*.tmp
-
-### Executable ###
-*.app
-*.bat
-*.cgi
-*.com
-*.exe
-*.gadget
-*.jar
-*.pif
-*.vb
-*.wsf
-
-### Godot ###
-# Godot 4+ specific ignores
-.godot/
-
-# Godot-specific ignores
-.import/
-export.cfg
-export_presets.cfg
-
-# Imported translations (automatically generated from CSV files)
-*.translation
-
-# Mono-specific ignores
-.mono/
-data_*/
-mono_crash.*.json
-
-### Linux ###
-*~
-
-# temporary files which can be created if a process still has a handle open of a deleted file
-.fuse_hidden*
-
-# KDE directory preferences
-.directory
-
-# Linux trash folder which might appear on any partition or disk
-.Trash-*
-
-# .nfs files are created when an open file is removed but is still being accessed
-.nfs*
-
-### macOS ###
-# General
-.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-
-
-# Thumbnails
-._*
-
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-.com.apple.timemachine.donotpresent
-
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-
-### macOS Patch ###
-# iCloud generated files
-*.icloud
-
-### Rider ###
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-
-# User-specific stuff
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-
-# AWS User-specific
-.idea/**/aws.xml
-
-# Generated files
-.idea/**/contentModel.xml
-
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn. Uncomment if using
-# auto-import.
-# .idea/artifacts
-# .idea/compiler.xml
-# .idea/jarRepositories.xml
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
-# *.iml
-# *.ipr
-
-# CMake
-cmake-build-*/
-
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
-# File-based project format
-*.iws
-
-# IntelliJ
-out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Cursive Clojure plugin
-.idea/replstate.xml
-
-# SonarLint plugin
-.idea/sonarlint/
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
-
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
-
-### VisualStudioCode ###
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-!.vscode/*.code-snippets
-
-# Local History for Visual Studio Code
-.history/
-
-# Built Visual Studio Code Extensions
-*.vsix
-
-### VisualStudioCode Patch ###
-# Ignore all local history of files
-.history
-.ionide
-
-### Windows ###
-# Windows thumbnail cache files
-Thumbs.db
-Thumbs.db:encryptable
-ehthumbs.db
-ehthumbs_vista.db
-
-# Dump file
-*.stackdump
-
-# Folder config file
-[Dd]esktop.ini
-
-# Recycle Bin used on file shares
-$RECYCLE.BIN/
-
-# Windows Installer files
-*.cab
-*.msi
-*.msix
-*.msm
-*.msp
-
-# Windows shortcuts
-*.lnk
-
-### VisualStudio ###
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.tlog
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio 6 auto-generated project file (contains which files were open etc.)
-*.vbp
-
-# Visual Studio 6 workspace and project file (working project files containing files to include in project)
-*.dsw
-*.dsp
-
-# Visual Studio 6 technical files
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# Visual Studio History (VSHistory) files
-.vshistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
-
-# VS Code files for those working on multiple tools
-*.code-workspace
-
-# Local History for Visual Studio Code
-
-# Windows Installer files from build outputs
-
-# JetBrains Rider
-*.sln.iml
-
-### VisualStudio Patch ###
-# Additional files built by Visual Studio
-
-# End of https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
-
-# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option)
-
-screenshot.png
-archive/*
-*.cfg
\ No newline at end of file
+docs
+*.md
+.idea
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index bbbd981..c6b96f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig
-# Created by https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
-# Edit at https://www.toptal.com/developers/gitignore?templates=windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
+# Created by https://www.toptal.com/developers/gitignore/api/windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup
+# Edit at https://www.toptal.com/developers/gitignore?templates=windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup
### Backup ###
*.bak
@@ -9,6 +9,15 @@
*.orig
*.tmp
+### DotnetCore ###
+# .NET Core build folders
+bin/
+obj/
+
+# Common node modules locations
+/node_modules
+/wwwroot/node_modules
+
### Executable ###
*.app
*.bat
@@ -86,84 +95,15 @@ Temporary Items
# iCloud generated files
*.icloud
-### Rider ###
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+### MonoDevelop ###
+#User Specific
+*.userprefs
+*.usertasks
-# User-specific stuff
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-
-# AWS User-specific
-.idea/**/aws.xml
-
-# Generated files
-.idea/**/contentModel.xml
-
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn. Uncomment if using
-# auto-import.
-# .idea/artifacts
-# .idea/compiler.xml
-# .idea/jarRepositories.xml
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
-# *.iml
-# *.ipr
-
-# CMake
-cmake-build-*/
-
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
-# File-based project format
-*.iws
-
-# IntelliJ
-out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Cursive Clojure plugin
-.idea/replstate.xml
-
-# SonarLint plugin
-.idea/sonarlint/
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
-
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
+#Mono Project Files
+*.pidb
+*.resources
+test-results/
### VisualStudioCode ###
.vscode/*
@@ -184,6 +124,21 @@ fabric.properties
.history
.ionide
+### Web ###
+*.asp
+*.cer
+*.csr
+*.css
+*.htm
+*.html
+*.js
+*.jsp
+*.php
+*.rss
+*.wasm
+*.wat
+*.xhtml
+
### Windows ###
# Windows thumbnail cache files
Thumbs.db
@@ -210,396 +165,7 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
-### VisualStudio ###
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.tlog
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio 6 auto-generated project file (contains which files were open etc.)
-*.vbp
-
-# Visual Studio 6 workspace and project file (working project files containing files to include in project)
-*.dsw
-*.dsp
-
-# Visual Studio 6 technical files
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# Visual Studio History (VSHistory) files
-.vshistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
-
-# VS Code files for those working on multiple tools
-*.code-workspace
-
-# Local History for Visual Studio Code
-
-# Windows Installer files from build outputs
-
-# JetBrains Rider
-*.sln.iml
-
-### VisualStudio Patch ###
-# Additional files built by Visual Studio
-
-# End of https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio
+# End of https://www.toptal.com/developers/gitignore/api/windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup
# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option)
-*.cfg
\ No newline at end of file
diff --git a/README.md b/README.md
index 59f90ef..c0f3ba3 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,9 @@
# Dress Up Zack
-
-
-Tony's Dress Up is a port of my first (and only) Flash game series, ZC's Dress Up that was developed back in 2007. Both this and the originals are heavily inspired by The Sims 2: Body Shop in their own unique ways.
+Tony's Dress Up is a re-imagining of my first (and only) Flash game series, ZC's Dress Up that was developed back in 2007. Both this and the originals are heavily inspired by The Sims 2: Body Shop in their own unique ways.
## License
The source and assets are licensed under the GPL-3.0 License and CC-BY, respectfully - see the [LICENSE](LICENSE) and [ASSET-LICENSE](ASSET-LICENSE) for more details.
-The Flash games located in the `/archive` directory are proprietary, but considered abandonware. Any extracted assets are under the same license. Feel free to share them on archives.
\ No newline at end of file
+The Flash games located in the `/archive` directory are proprietary, but considered abandonware. Any extracted assets are under the same license. Feel free to share them on archives.
diff --git a/addons/SpritesheetGenerator/Checker.png b/addons/SpritesheetGenerator/Checker.png
new file mode 100644
index 0000000..f147f72
Binary files /dev/null and b/addons/SpritesheetGenerator/Checker.png differ
diff --git a/sprites/clothes/fullbody/coat.png.import b/addons/SpritesheetGenerator/Checker.png.import
similarity index 67%
rename from sprites/clothes/fullbody/coat.png.import
rename to addons/SpritesheetGenerator/Checker.png.import
index 80ab828..7bcd8ec 100644
--- a/sprites/clothes/fullbody/coat.png.import
+++ b/addons/SpritesheetGenerator/Checker.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cgnumy58myojg"
-path="res://.godot/imported/coat.png-4037539685e6b05d1d6a40884d2dd944.ctex"
+uid="uid://bnkl8rujlgv0h"
+path="res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://sprites/clothes/fullbody/coat.png"
-dest_files=["res://.godot/imported/coat.png-4037539685e6b05d1d6a40884d2dd944.ctex"]
+source_file="res://addons/SpritesheetGenerator/Checker.png"
+dest_files=["res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex"]
[params]
diff --git a/addons/SpritesheetGenerator/SpriteSheetGenerator.gd b/addons/SpritesheetGenerator/SpriteSheetGenerator.gd
new file mode 100644
index 0000000..cbb9bbe
--- /dev/null
+++ b/addons/SpritesheetGenerator/SpriteSheetGenerator.gd
@@ -0,0 +1,13 @@
+@tool
+extends EditorPlugin
+
+func _enter_tree() -> void:
+ add_tool_menu_item("Open Spritesheet Generator", run_generator)
+ get_editor_interface().get_command_palette().add_command("Open Spritesheet Generator", "addons/open_spritesheet_generator", run_generator)
+
+func _exit_tree() -> void:
+ remove_tool_menu_item("Open Spritesheet Generator")
+ get_editor_interface().get_command_palette().remove_command("addons/open_spritesheet_generator")
+
+func run_generator():
+ get_editor_interface().play_custom_scene("res://addons/SpritesheetGenerator/SpritesheetGenerator.tscn")
diff --git a/addons/SpritesheetGenerator/SpritesheetFrame.tscn b/addons/SpritesheetGenerator/SpritesheetFrame.tscn
new file mode 100644
index 0000000..790cf62
--- /dev/null
+++ b/addons/SpritesheetGenerator/SpritesheetFrame.tscn
@@ -0,0 +1,77 @@
+[gd_scene load_steps=3 format=3 uid="uid://cd5wndu01c1sn"]
+
+[sub_resource type="StyleBoxFlat" id="2"]
+resource_local_to_scene = true
+bg_color = Color(0, 0.501961, 0.501961, 1)
+
+[sub_resource type="GDScript" id="3"]
+resource_name = "Prefab"
+script/source = "extends PanelContainer
+
+var odd: Vector2
+
+func set_frame_margin(margin: Vector2):
+ $MarginContainer.add_theme_constant_override(&\"margin_left\", margin.x)
+ $MarginContainer.add_theme_constant_override(&\"margin_top\", margin.y)
+
+ margin += odd
+
+ $MarginContainer.add_theme_constant_override(&\"margin_right\", margin.x)
+ $MarginContainer.add_theme_constant_override(&\"margin_bottom\", margin.y)
+
+func set_texture(texture: Texture2D):
+ %TextureRect.texture = texture
+ odd = Vector2(int(get_texture_size().x) % 2, int(get_texture_size().y) % 2)
+
+func get_texture_size() -> Vector2:
+ return %TextureRect.texture.get_size()
+
+func get_position2() -> Vector2:
+ return position + %TextureRect.position
+
+func get_texture_data() -> Image:
+ return %TextureRect.texture.get_image()
+
+func set_display_background(display: bool):
+ get_theme_stylebox(&\"panel\").draw_center = display
+
+func set_background_color(color: Color):
+ get_theme_stylebox(&\"panel\").bg_color = color
+
+func _get_drag_data(p: Vector2):
+ var preview = TextureRect.new()
+ preview.texture = %TextureRect.texture
+ preview.ignore_texture_size = true
+ preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
+ preview.size = Vector2(64, 64)
+ set_drag_preview(preview)
+ return {type = \"SpritesheetFrame\", node = self}
+
+func _can_drop_data(p: Vector2, data) -> bool:
+ return data is Dictionary and data.get(\"type\", \"\") == \"SpritesheetFrame\"
+
+func _drop_data(p: Vector2, data) -> void:
+ var index = get_index()
+ get_parent().move_child(self, data.node.get_index())
+ get_parent().move_child(data.node, index)
+ get_tree().current_scene.refresh_grid()
+
+func _gui_input(event: InputEvent) -> void:
+ if event is InputEventMouseButton:
+ if event.pressed and event.button_index == MOUSE_BUTTON_RIGHT:
+ get_tree().current_scene.remove_frame.call_deferred(self)
+"
+
+[node name="FramePrefab" type="PanelContainer" groups=["frame"]]
+theme_override_styles/panel = SubResource("2")
+script = SubResource("3")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 2
+mouse_filter = 2
+
+[node name="TextureRect" type="TextureRect" parent="MarginContainer"]
+unique_name_in_owner = true
+texture_filter = 1
+layout_mode = 2
+stretch_mode = 4
diff --git a/addons/SpritesheetGenerator/SpritesheetGenerator.tscn b/addons/SpritesheetGenerator/SpritesheetGenerator.tscn
new file mode 100644
index 0000000..c064e03
--- /dev/null
+++ b/addons/SpritesheetGenerator/SpritesheetGenerator.tscn
@@ -0,0 +1,714 @@
+[gd_scene load_steps=5 format=3 uid="uid://bf3b0i8scthbm"]
+
+[ext_resource type="Texture2D" uid="uid://bnkl8rujlgv0h" path="res://addons/SpritesheetGenerator/Checker.png" id="1_hs1uu"]
+
+[sub_resource type="GDScript" id="1"]
+resource_name = "Generator"
+script/source = "extends Control
+
+const SUPPORTED_FORMATS: PackedStringArray = [\"bmp\", \"dds\", \"exr\", \"hdr\", \"jpg\", \"jpeg\", \"png\", \"tga\", \"svg\", \"svgz\", \"webp\"]
+
+@onready var grid := %GridContainer
+
+var file_list: Array
+var image_list: Array
+var texture_list: Array
+
+var images_to_process: Array
+var images_to_texturize: Array
+var first_time := true
+var image_count: int
+var output_path: String
+
+var auto := true
+var margin := Vector2.ONE
+
+var pan_origin: Vector2
+var pan_start: Vector2
+
+signal images_processed
+
+func _enter_tree() -> void:
+ $SplitDialog.hide()
+ $StashDialog.hide()
+
+func _ready():
+ $Status.text = $Status.text % \", \".join(SUPPORTED_FORMATS)
+
+ get_viewport().files_dropped.connect(load_files)
+ grid.minimum_size_changed.connect(refresh_background)
+ set_process(false)
+
+func refresh_background():
+ %Background.custom_minimum_size = grid.get_minimum_size()
+
+func load_files(files: PackedStringArray):
+ file_list.clear()
+ image_list.clear()
+
+ %CustomName.text = \"\"
+ %Reload.disabled = false
+ %SavePNG.disabled = false
+
+ if files.size() == 1 and not FileAccess.file_exists(files[0]):
+ var dir := DirAccess.open(files[0])
+ if not dir:
+ show_error(\"Can't open directory.\")
+ return
+
+ for file in dir.get_files():
+ if file.get_extension() in SUPPORTED_FORMATS:
+ file_list.append(str(dir.get_current_dir().path_join(file)))
+ else:
+ var wrong_count: int
+ for file in files:
+ if file.get_extension() in SUPPORTED_FORMATS:
+ file_list.append(file)
+ else:
+ wrong_count += 1
+
+ if wrong_count > 0:
+ show_error(\"Skipped %s file(s) with unsupported extension.\" % wrong_count)
+
+ if file_list.is_empty():
+ show_error(\"No valid files or directories to process.\")
+ return
+
+ load_images()
+
+func load_images():
+ texture_list.clear()
+
+ for image in grid.get_children():
+ image.free()
+
+ for image in %StashImages.get_children():
+ image.free()
+ update_stash()
+
+ var size_map: Dictionary
+
+ if not file_list.is_empty():
+ image_list = file_list.map(func(file: String):
+ var image := Image.load_from_file(file)
+ if image:
+ image.set_meta(&\"path\", file)
+ return image)
+
+ for image in image_list:
+ if not image:
+ continue
+
+ if not image.get_size() in size_map:
+ size_map[image.get_size()] = []
+ size_map[image.get_size()].append(image)
+
+ var output_name: String
+ var most_common_size: Vector2i
+ var most_common_count: int
+
+ for size in size_map:
+ if size_map[size].size() > most_common_count:
+ most_common_size = size
+ most_common_count = size_map[size].size()
+
+ for image in size_map[most_common_size]:
+ if output_path.is_empty():
+ var path: String = image.get_meta(&\"path\", \"\")
+ output_path = path.get_base_dir()
+ output_name = path.get_base_dir().get_file()
+
+ images_to_process.append(image)
+ size_map.clear()
+
+ if not output_name.is_empty() and %CustomName.text.is_empty():
+ %CustomName.text = output_name
+ update_save_button()
+
+ if images_to_process.size() < file_list.size():
+ show_error(\"Rejected %s image(s) due to size mismatch.\" % (file_list.size() - images_to_process.size()))
+
+ if images_to_process.size() == 1:
+ if file_list.size() > 1:
+ images_to_process.clear()
+ show_error(\"Only one dropped image was valid.\")
+ else:
+ %SplitPreview.texture = ImageTexture.create_from_image(images_to_process[0])
+ $SplitDialog.reset_size()
+ $SplitDialog.popup_centered()
+
+ return
+
+ $Status.show()
+ %CenterContainer.hide()
+
+ image_count = images_to_process.size()
+ %Columns.max_value = image_count
+
+ threshold = %Threshold.value
+ min_x = 9999999
+ min_y = 9999999
+ max_x = -9999999
+ max_y = -9999999
+
+ set_process(true)
+
+ await images_processed
+
+ for texture in texture_list:
+ add_frame(texture)
+
+ toggle_auto(auto)
+ refresh_margin()
+
+ $Status.hide()
+ %CenterContainer.show()
+
+var threshold: float
+var min_x: int
+var min_y: int
+var max_x: int
+var max_y: int
+
+func _process(delta: float) -> void:
+ if not images_to_process.is_empty():
+ var image: Image = images_to_process.pop_front()
+ $Status.text = str(\"Preprocessing image \", image_count - images_to_process.size(), \"/\", image_count)
+
+ for x in image.get_width():
+ for y in image.get_height():
+ if image.get_pixel(x, y).a >= threshold:
+ min_x = mini(min_x, x)
+ min_y = mini(min_y, y)
+ max_x = maxi(max_x, x)
+ max_y = maxi(max_y, y)
+
+ images_to_texturize.append(image)
+ elif not images_to_texturize.is_empty():
+ var rect := Rect2i(min_x, min_y, max_x - min_x + 1, max_y - min_y + 1)
+ var image: Image = images_to_texturize.pop_front()
+ $Status.text = str(\"Creating texture \", image_count - images_to_texturize.size(), \"/\", image_count)
+
+ var true_image := Image.create(rect.size.x, rect.size.y, false, image.get_format())
+ true_image.blit_rect(image, rect, Vector2())
+
+ var texture := ImageTexture.create_from_image(true_image)
+ texture_list.append(texture)
+
+ if images_to_texturize.is_empty():
+ set_process(false)
+ images_processed.emit()
+ if first_time:
+ recenter()
+ first_time = false
+
+func toggle_grid(show: bool) -> void:
+ get_tree().call_group(&\"frame\", &\"set_display_background\", show)
+
+func toggle_auto(button_pressed: bool) -> void:
+ %Columns.editable = not button_pressed
+ auto = button_pressed
+
+ if button_pressed:
+ var best: int
+ var best_score = -9999999
+
+ for i in range(1, image_count + 1):
+ var cols = i
+ var rows = ceili(image_count / float(i))
+
+ var score = image_count - cols * rows - maxi(cols, rows) - rows
+ if score > best_score:
+ best = i
+ best_score = score
+
+ grid.columns = best
+ else:
+ grid.columns = %Columns.value
+ refresh_grid()
+
+func hmargin_changed(value: float) -> void:
+ margin.x = value
+ refresh_margin()
+
+func vmargin_changed(value: float) -> void:
+ margin.y = value
+ refresh_margin()
+
+func refresh_margin():
+ get_tree().call_group(&\"frame\", &\"set_frame_margin\", margin)
+
+func columns_changed(value: float) -> void:
+ grid.columns = value
+ refresh_grid()
+
+func refresh_grid():
+ var coord: Vector2
+ var dark = false
+
+ for rect in grid.get_children():
+ rect.set_background_color(Color(0, 0, 0, 0.2 if dark else 0.1))
+ dark = not dark
+ coord.x += 1
+
+ if coord.x == grid.columns:
+ coord.x = 0
+ coord.y += 1
+ dark = int(coord.y) % 2 == 1
+
+func save_png() -> void:
+ var image_size: Vector2 = grid.get_child(0).get_minimum_size()
+
+ var image := Image.create(image_size.x * grid.columns, image_size.y * (ceil(grid.get_child_count() / float(grid.columns))), false, Image.FORMAT_RGBA8)
+
+ for rect in grid.get_children():
+ image.blit_rect(rect.get_texture_data(), Rect2(Vector2(), image_size), rect.get_position2())
+
+ image.save_png(output_path.path_join(%CustomName.text) + \".png\")
+
+func show_error(text: String):
+ if not %Error.visible:
+ %Error.show()
+ else:
+ %Error.text += \"\\n\"
+ %Error.text += text
+ %Timer.start()
+
+func error_hidden() -> void:
+ %Error.text = \"\"
+
+func _input(event: InputEvent) -> void:
+ if event is InputEventMouseButton:
+ var cc: Control = %CenterContainer
+
+ if event.button_index == MOUSE_BUTTON_MIDDLE:
+ if event.pressed:
+ pan_origin = get_local_mouse_position()
+ pan_start = cc.position
+ else:
+ pan_origin = Vector2()
+
+ if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
+ var lm = cc.get_local_mouse_position()
+ cc.scale -= Vector2.ONE * 0.05
+ if cc.scale.x <= 0:
+ cc.scale = Vector2.ONE * 0.05
+
+ cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale
+ elif event.button_index == MOUSE_BUTTON_WHEEL_UP:
+ var lm = cc.get_local_mouse_position()
+ cc.scale += Vector2.ONE * 0.05
+ cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale
+
+ if event is InputEventMouseMotion:
+ if pan_origin != Vector2():
+ %CenterContainer.position = pan_start + (get_local_mouse_position() - pan_origin)
+
+func recenter() -> void:
+ %CenterContainer.position = get_viewport().size / 2 - Vector2i(%CenterContainer.size) / 2
+ %CenterContainer.scale = Vector2.ONE
+
+func update_split_preview():
+ %SplitPreview.queue_redraw()
+
+func draw_split_preview() -> void:
+ var preview: TextureRect = %SplitPreview
+ var frame_count := Vector2(%SplitX.value, %SplitY.value)
+ var frame_size := preview.size / frame_count
+
+ for x in range(1, frame_count.x):
+ for y in int(frame_count.y):
+ preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x, y + 1), Color.WHITE)
+ preview.draw_line(frame_size * Vector2(x, y) + Vector2.RIGHT, frame_size * Vector2(x, y + 1) + Vector2.RIGHT, Color.BLACK)
+
+ for y in range(1, frame_count.y):
+ for x in int(frame_count.x):
+ preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x + 1, y), Color.WHITE)
+ preview.draw_line(frame_size * Vector2(x, y) + Vector2.DOWN, frame_size * Vector2(x + 1, y) + Vector2.DOWN, Color.BLACK)
+
+func split_spritesheet() -> void:
+ file_list.clear()
+ image_list.clear()
+
+ var image: Image = images_to_process[0]
+ var sub_image_size := image.get_size() / Vector2i(%SplitX.value, %SplitY.value)
+
+ for y in %SplitY.value:
+ for x in %SplitX.value:
+ image_list.append(image.get_region(Rect2i(Vector2i(x, y) * sub_image_size, sub_image_size)))
+
+ images_to_process.clear()
+ load_images()
+
+func remove_frame(frame):
+ var image: Image = frame.get_texture_data()
+ var texture := ImageTexture.create_from_image(image)
+
+ var button := TextureButton.new()
+ button.texture_normal = texture
+ button.custom_minimum_size = Vector2(128, 128)
+ button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED
+ button.ignore_texture_size = true
+ button.pressed.connect(re_add_image.bind(button), CONNECT_DEFERRED)
+ %StashImages.add_child(button)
+
+ var ref := ReferenceRect.new()
+ button.add_child(ref)
+ ref.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
+ ref.mouse_filter = Control.MOUSE_FILTER_IGNORE
+ ref.editor_only = false
+
+ frame.free()
+ refresh_grid()
+ update_stash()
+
+func update_stash():
+ %Stash.disabled = %StashImages.get_child_count() == 0
+
+func re_add_image(tb: TextureButton):
+ add_frame(tb.texture_normal)
+ tb.free()
+ refresh_grid()
+ update_stash()
+
+ if %Stash.disabled:
+ $StashDialog.hide()
+
+func add_frame(texture: Texture2D):
+ var rect := preload(\"res://addons/SpritesheetGenerator/SpritesheetFrame.tscn\").instantiate()
+ rect.set_texture(texture)
+ rect.set_display_background(%DisplayGrid.button_pressed)
+ rect.set_frame_margin(margin)
+ grid.add_child(rect)
+
+func update_save_button() -> void:
+ %SavePNG.disabled = %CustomName.text.is_empty()
+"
+
+[sub_resource type="StyleBoxFlat" id="5"]
+content_margin_left = 20.0
+content_margin_top = 20.0
+content_margin_right = 20.0
+content_margin_bottom = 20.0
+bg_color = Color(0, 0, 0, 0.25098)
+
+[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_kjgn5"]
+texture = ExtResource("1_hs1uu")
+axis_stretch_horizontal = 1
+axis_stretch_vertical = 1
+
+[node name="Main" type="HBoxContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = SubResource("1")
+
+[node name="MarginContainer" type="PanelContainer" parent="."]
+layout_mode = 2
+theme_override_styles/panel = SubResource("5")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="Label5" type="Label" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+text = "Alpha Threshold"
+horizontal_alignment = 1
+
+[node name="Threshold" type="SpinBox" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+max_value = 1.0
+step = 0.005
+value = 0.9
+
+[node name="Reload" type="Button" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+disabled = true
+text = "Reload"
+
+[node name="HSeparator" type="HSeparator" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+text = "Columns"
+horizontal_alignment = 1
+
+[node name="Columns" type="SpinBox" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+min_value = 1.0
+value = 1.0
+editable = false
+
+[node name="Grid" type="CheckButton" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+button_pressed = true
+text = "Auto"
+
+[node name="Label3" type="Label" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+text = "Horizontal Margin"
+horizontal_alignment = 1
+
+[node name="MarginH" type="SpinBox" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+value = 1.0
+suffix = "px"
+
+[node name="Label4" type="Label" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+text = "Vertical Margin"
+horizontal_alignment = 1
+
+[node name="MarginV" type="SpinBox" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+max_value = 128.0
+value = 1.0
+suffix = "px"
+
+[node name="Stash" type="Button" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+disabled = true
+text = "Image Stash"
+
+[node name="HSeparator2" type="HSeparator" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="Button" type="Button" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+text = "Recenter View
+"
+
+[node name="DisplayGrid" type="CheckBox" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+button_pressed = true
+text = "Show Grid"
+
+[node name="HSeparator3" type="HSeparator" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="CustomName" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+placeholder_text = "Image Name"
+
+[node name="SavePNG" type="Button" parent="MarginContainer/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+disabled = true
+text = "Save PNG"
+
+[node name="Status" type="Label" parent="."]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+text = "Drop folder or image files here to start.
+
+Images should be of the same size. If their sizes don't match, the generator will try to use the dominating size.
+
+The images will be automatically cropped based on the Alpha Threshold value. Greater value means more exact crop.
+
+Supported formats: %s
+
+If you drop a single image, the generator will instead edit it as spritesheet."
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="View" type="CanvasLayer" parent="."]
+layer = -1
+
+[node name="CenterContainer" type="CenterContainer" parent="View"]
+unique_name_in_owner = true
+visible = false
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+
+[node name="Background" type="ColorRect" parent="View/CenterContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+mouse_filter = 1
+color = Color(0, 0.501961, 0.501961, 1)
+
+[node name="GridContainer" type="GridContainer" parent="View/CenterContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/h_separation = 0
+theme_override_constants/v_separation = 0
+columns = 3
+
+[node name="VBoxContainer" type="GridContainer" parent="View"]
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -40.0
+offset_top = -40.0
+grow_horizontal = 0
+grow_vertical = 0
+mouse_filter = 2
+columns = 3
+
+[node name="Label" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "LMB"
+horizontal_alignment = 1
+
+[node name="VSeparator" type="VSeparator" parent="View/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label2" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "rearrange images"
+
+[node name="Label3" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "RMB"
+horizontal_alignment = 1
+
+[node name="VSeparator2" type="VSeparator" parent="View/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label4" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "delete images"
+
+[node name="Label5" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "MMB"
+horizontal_alignment = 1
+
+[node name="VSeparator3" type="VSeparator" parent="View/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label6" type="Label" parent="View/VBoxContainer"]
+layout_mode = 2
+text = "pan view"
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+
+[node name="Error" type="Label" parent="CanvasLayer"]
+unique_name_in_owner = true
+modulate = Color(1, 0, 0, 1)
+anchors_preset = 12
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_top = -14.0
+grow_horizontal = 2
+grow_vertical = 0
+size_flags_vertical = 0
+horizontal_alignment = 1
+
+[node name="Timer" type="Timer" parent="CanvasLayer"]
+unique_name_in_owner = true
+wait_time = 5.0
+one_shot = true
+
+[node name="SplitDialog" type="ConfirmationDialog" parent="."]
+title = "Edit Spritesheet"
+position = Vector2i(-500, 0)
+size = Vector2i(272, 343)
+visible = true
+
+[node name="VBoxContainer" type="VBoxContainer" parent="SplitDialog"]
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 264.0
+offset_bottom = 294.0
+
+[node name="Label" type="Label" parent="SplitDialog/VBoxContainer"]
+layout_mode = 2
+text = "Split Frames"
+horizontal_alignment = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="SplitDialog/VBoxContainer"]
+layout_mode = 2
+alignment = 1
+
+[node name="SplitX" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+min_value = 1.0
+max_value = 1000.0
+value = 1.0
+select_all_on_focus = true
+
+[node name="Label" type="Label" parent="SplitDialog/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+text = "x"
+
+[node name="SplitY" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+min_value = 1.0
+max_value = 1000.0
+value = 1.0
+select_all_on_focus = true
+
+[node name="CenterContainer" type="CenterContainer" parent="SplitDialog/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="PanelContainer" type="PanelContainer" parent="SplitDialog/VBoxContainer/CenterContainer"]
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxTexture_kjgn5")
+
+[node name="SplitPreview" type="TextureRect" parent="SplitDialog/VBoxContainer/CenterContainer/PanelContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="StashDialog" type="AcceptDialog" parent="."]
+title = "Image Stash"
+position = Vector2i(-500, 500)
+size = Vector2i(309, 100)
+visible = true
+
+[node name="VBoxContainer" type="VBoxContainer" parent="StashDialog"]
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 301.0
+offset_bottom = 51.0
+
+[node name="Label" type="Label" parent="StashDialog/VBoxContainer"]
+layout_mode = 2
+text = "Click frame to re-add it to spritesheet."
+horizontal_alignment = 1
+
+[node name="StashImages" type="HFlowContainer" parent="StashDialog/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Reload" to="." method="load_images"]
+[connection signal="value_changed" from="MarginContainer/VBoxContainer/Columns" to="." method="columns_changed"]
+[connection signal="toggled" from="MarginContainer/VBoxContainer/Grid" to="." method="toggle_auto"]
+[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginH" to="." method="hmargin_changed"]
+[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginV" to="." method="vmargin_changed"]
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Stash" to="StashDialog" method="popup_centered_ratio" binds= [0.5]]
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Button" to="." method="recenter"]
+[connection signal="toggled" from="MarginContainer/VBoxContainer/DisplayGrid" to="." method="toggle_grid"]
+[connection signal="text_changed" from="MarginContainer/VBoxContainer/HBoxContainer/CustomName" to="." method="update_save_button" unbinds=1]
+[connection signal="pressed" from="MarginContainer/VBoxContainer/SavePNG" to="." method="save_png"]
+[connection signal="hidden" from="CanvasLayer/Error" to="." method="error_hidden"]
+[connection signal="timeout" from="CanvasLayer/Timer" to="CanvasLayer/Error" method="hide"]
+[connection signal="confirmed" from="SplitDialog" to="." method="split_spritesheet"]
+[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitX" to="." method="update_split_preview" unbinds=1]
+[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitY" to="." method="update_split_preview" unbinds=1]
+[connection signal="draw" from="SplitDialog/VBoxContainer/CenterContainer/PanelContainer/SplitPreview" to="." method="draw_split_preview"]
diff --git a/addons/SpritesheetGenerator/plugin.cfg b/addons/SpritesheetGenerator/plugin.cfg
new file mode 100644
index 0000000..08a28bf
--- /dev/null
+++ b/addons/SpritesheetGenerator/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="Spritesheet Generator"
+description="Generates cropped spritesheets from multiple images."
+author="KoBeWi"
+version="1.2"
+script="SpriteSheetGenerator.gd"
diff --git a/project.godot b/project.godot
index d565706..cefdef2 100644
--- a/project.godot
+++ b/project.godot
@@ -24,7 +24,7 @@ name_sv="Tonys klä upp"
[autoload]
-Config="*res://scripts/config.gd"
+Global="*res://scripts/global.gd"
[debug]
@@ -32,18 +32,14 @@ gdscript/completion/autocomplete_setters_and_getters=true
[display]
-window/size/viewport_width=600
-window/size/viewport_height=400
+window/size/viewport_width=800
+window/size/viewport_height=500
+window/size/resizable=false
window/energy_saving/keep_screen_on=false
-window/stretch/mode="viewport"
-
-[dotnet]
-
-project/assembly_name="Dress Up Zack"
[editor_plugins]
-enabled=PackedStringArray("res://addons/fontawesome/plugin.cfg")
+enabled=PackedStringArray("res://addons/SpritesheetGenerator/plugin.cfg", "res://addons/fontawesome/plugin.cfg")
[file_customization]
diff --git a/scenes/character.tscn b/scenes/character.tscn
index 7752635..5a5d1bc 100644
--- a/scenes/character.tscn
+++ b/scenes/character.tscn
@@ -2,9 +2,9 @@
[ext_resource type="Script" path="res://scripts/character.gd" id="1_k1mtq"]
[ext_resource type="Texture2D" uid="uid://cddou4chwo8h2" path="res://sprites/character/tail/tail0.svg" id="2"]
+[ext_resource type="Texture2D" uid="uid://dxpvahpmr14ty" path="res://sprites/character/character_base.png" id="2_p4oam"]
[ext_resource type="Texture2D" uid="uid://cnd3v8cerplqq" path="res://sprites/character/tail/tail1.svg" id="3"]
[ext_resource type="Texture2D" uid="uid://djv0p7rxujbd4" path="res://sprites/character/tail/tail2.svg" id="4"]
-[ext_resource type="Texture2D" uid="uid://3rmb0kj376t1" path="res://sprites/character/zack.png" id="5_i8wm6"]
[ext_resource type="Texture2D" uid="uid://dnwdyi2d46hsm" path="res://sprites/character/eyes/eyes1.png" id="6"]
[ext_resource type="Texture2D" uid="uid://cbr37emgh11is" path="res://sprites/character/eyes/eyes2.png" id="7"]
[ext_resource type="Texture2D" uid="uid://ceifal0sxn0r7" path="res://sprites/character/eyes/eyes3.png" id="8"]
@@ -123,18 +123,20 @@ script = ExtResource("1_k1mtq")
position = Vector2(-33.7592, 99.4079)
scale = Vector2(0.927713, 1)
sprite_frames = SubResource("1")
-frame_progress = 0.185576
+frame_progress = 0.642539
+metadata/_edit_lock_ = true
[node name="Body" type="Sprite2D" parent="."]
position = Vector2(12, 81)
-texture = ExtResource("5_i8wm6")
+texture = ExtResource("2_p4oam")
+metadata/_edit_lock_ = true
[node name="Eyes" type="AnimatedSprite2D" parent="."]
position = Vector2(28.6857, -15.7785)
sprite_frames = SubResource("2")
-frame_progress = 0.102847
+frame_progress = 0.55981
[node name="Mouth" type="AnimatedSprite2D" parent="."]
position = Vector2(49.1195, -14.3155)
sprite_frames = SubResource("3")
-frame_progress = 0.222902
+frame_progress = 0.679866
diff --git a/scenes/demo.tscn b/scenes/demo.tscn
new file mode 100644
index 0000000..5337085
--- /dev/null
+++ b/scenes/demo.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=3 format=3 uid="uid://bguec0ft5ygk4"]
+
+[ext_resource type="PackedScene" uid="uid://bvbelmb6rvy4f" path="res://scenes/platform.tscn" id="1_31w52"]
+[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="2_cgl4f"]
+
+[node name="Demo" type="Node2D"]
+
+[node name="Platform" parent="." instance=ExtResource("1_31w52")]
+position = Vector2(170, 92)
+
+[node name="Platform2" parent="." instance=ExtResource("1_31w52")]
+position = Vector2(419, 84)
+
+[node name="Platform3" parent="." instance=ExtResource("1_31w52")]
+position = Vector2(296, 286)
+
+[node name="Object" parent="." instance=ExtResource("2_cgl4f")]
+position = Vector2(169, 90)
diff --git a/scenes/game.tscn b/scenes/game.tscn
index b944a4a..d8201a7 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -1,148 +1,49 @@
-[gd_scene load_steps=13 format=3 uid="uid://cvr2aries2lhr"]
+[gd_scene load_steps=9 format=3 uid="uid://cvr2aries2lhr"]
-[ext_resource type="Script" path="res://scripts/game.gd" id="1_qt3fe"]
[ext_resource type="Texture2D" uid="uid://33g80p0qnfw4" path="res://sprites/world/background.svg" id="1_uee2i"]
-[ext_resource type="Texture2D" uid="uid://bi7ayrxnn7hex" path="res://sprites/world/icrazy_frame.svg" id="2_n1kmf"]
+[ext_resource type="Texture2D" uid="uid://bi7ayrxnn7hex" path="res://sprites/clothes/icrazy_frame.svg" id="2_n1kmf"]
[ext_resource type="Texture2D" uid="uid://cmv58t1dfgsov" path="res://sprites/world/stand.svg" id="2_q0w7j"]
-[ext_resource type="Texture2D" uid="uid://d1u3w61r0uv7p" path="res://sprites/world/boxersOfAmericaFrame.png" id="4_327cy"]
+[ext_resource type="Texture2D" uid="uid://dteiup73cqn4o" path="res://sprites/clothes/lights.png" id="3_bbsyl"]
+[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="6_6t4pu"]
[ext_resource type="PackedScene" uid="uid://detf8uwimqp3v" path="res://scenes/character.tscn" id="6_tdil0"]
-[ext_resource type="SpriteFrames" uid="uid://bhyon1s1op8ly" path="res://scenes/items.tres" id="7_3ykci"]
-[ext_resource type="Texture2D" uid="uid://clakkue2mohs4" path="res://sprites/ui/greenBtn.png" id="14_yk2bu"]
-[ext_resource type="Texture2D" uid="uid://cd8mirubbhn10" path="res://sprites/ui/redBtn.png" id="15_g5gd1"]
-[ext_resource type="Texture2D" uid="uid://cl0wwlm6yw0ug" path="res://sprites/ui/fullbodyBtn.png" id="15_rfctk"]
-[ext_resource type="Texture2D" uid="uid://nc0wkek55yhu" path="res://sprites/ui/seperateBtn.png" id="16_px53c"]
-[ext_resource type="Texture2D" uid="uid://wr3ns0ywb75q" path="res://sprites/logo.png" id="16_y58oj"]
+[ext_resource type="PackedScene" uid="uid://bvbelmb6rvy4f" path="res://scenes/platform.tscn" id="7_vqx6c"]
+[ext_resource type="Texture2D" uid="uid://venieklgphn5" path="res://sprites/clothes/blue_camo_jeans.svg" id="8_bqcl8"]
[node name="Game" type="Node"]
-script = ExtResource("1_qt3fe")
-[node name="World" type="Node2D" parent="."]
-
-[node name="Background" type="Sprite2D" parent="World"]
-position = Vector2(306.682, 204.039)
-scale = Vector2(0.618038, 0.725217)
+[node name="Background" type="Sprite2D" parent="."]
+position = Vector2(400, 240)
texture = ExtResource("1_uee2i")
+metadata/_edit_lock_ = true
-[node name="Stand" type="Sprite2D" parent="World"]
-position = Vector2(321.326, 368.764)
+[node name="Stand" type="Sprite2D" parent="."]
+position = Vector2(125, 461)
+scale = Vector2(1.28991, 1.3328)
texture = ExtResource("2_q0w7j")
-[node name="BoxersOfAmericaFrame" type="Sprite2D" parent="World"]
-position = Vector2(77.9707, 272.449)
-texture = ExtResource("4_327cy")
-
-[node name="iCrazyFrame" type="Sprite2D" parent="World"]
-position = Vector2(74.389, 113.776)
-scale = Vector2(0.700948, 0.7129)
+[node name="PictureFrame" type="Sprite2D" parent="."]
+position = Vector2(107.454, 127.574)
texture = ExtResource("2_n1kmf")
+[node name="Light3D" type="PointLight2D" parent="PictureFrame"]
+position = Vector2(35.118, -14.56)
+texture = ExtResource("3_bbsyl")
+metadata/_edit_lock_ = true
+
[node name="Character" parent="." instance=ExtResource("6_tdil0")]
-position = Vector2(313.61, 133.222)
+position = Vector2(117, 234)
+metadata/_edit_lock_ = true
-[node name="Bottoms" type="AnimatedSprite2D" parent="."]
-position = Vector2(316.681, 303.715)
-sprite_frames = ExtResource("7_3ykci")
-animation = &"bottoms"
+[node name="Bottoms" parent="." groups=["pants"] instance=ExtResource("7_vqx6c")]
+position = Vector2(120, 409)
-[node name="Tops" type="AnimatedSprite2D" parent="."]
-position = Vector2(325.091, 213.195)
-sprite_frames = ExtResource("7_3ykci")
-animation = &"tops"
+[node name="Platform" parent="." groups=["pants"] instance=ExtResource("7_vqx6c")]
+position = Vector2(335, 78)
-[node name="Fullbody" type="AnimatedSprite2D" parent="."]
-visible = false
-position = Vector2(558.266, 434.335)
-sprite_frames = ExtResource("7_3ykci")
-animation = &"fullbody"
+[node name="Object" parent="." instance=ExtResource("6_6t4pu")]
+position = Vector2(335, 79)
+group = "pants"
+texture = ExtResource("8_bqcl8")
-[node name="Logo" type="Sprite2D" parent="."]
-position = Vector2(546.704, 311.642)
-scale = Vector2(0.172412, 0.162644)
-texture = ExtResource("16_y58oj")
-
-[node name="CanvasLayer" type="CanvasLayer" parent="."]
-
-[node name="UI" type="Control" parent="CanvasLayer"]
-layout_mode = 3
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-metadata/_edit_use_anchors_ = true
-
-[node name="TopsFwdBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 0
-anchor_left = 0.735474
-anchor_top = 0.406494
-anchor_right = 0.807141
-anchor_bottom = 0.563994
-texture_normal = ExtResource("14_yk2bu")
-stretch_mode = 4
-metadata/_edit_use_anchors_ = true
-
-[node name="TopsBckBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 0
-anchor_left = 0.236586
-anchor_top = 0.399881
-anchor_right = 0.308252
-anchor_bottom = 0.55738
-offset_bottom = 1.04904e-05
-texture_normal = ExtResource("15_g5gd1")
-metadata/_edit_use_anchors_ = true
-
-[node name="BottomsBckBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 1
-anchors_preset = -1
-anchor_left = 0.230677
-anchor_top = 0.61427
-anchor_right = 0.302344
-anchor_bottom = 0.77177
-offset_bottom = -2.28882e-05
-texture_normal = ExtResource("15_g5gd1")
-stretch_mode = 4
-metadata/_edit_use_anchors_ = true
-
-[node name="BottomsFwdBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 1
-anchors_preset = -1
-anchor_left = 0.736785
-anchor_top = 0.613892
-anchor_right = 0.808452
-anchor_bottom = 0.771392
-offset_left = -1.4782e-05
-texture_normal = ExtResource("14_yk2bu")
-stretch_mode = 4
-metadata/_edit_use_anchors_ = true
-
-[node name="FullbodyBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 1
-anchors_preset = -1
-anchor_left = 0.265919
-anchor_top = 0.0531643
-anchor_right = 0.417585
-anchor_bottom = 0.115664
-offset_left = 1.14441e-05
-offset_right = 1.52588e-05
-texture_normal = ExtResource("15_rfctk")
-stretch_mode = 4
-metadata/_edit_use_anchors_ = true
-
-[node name="SeparateBtn" type="TextureButton" parent="CanvasLayer/UI"]
-layout_mode = 1
-anchors_preset = -1
-anchor_left = 0.666512
-anchor_top = 0.0395699
-anchor_right = 0.818178
-anchor_bottom = 0.10457
-offset_left = -1.14441e-05
-texture_normal = ExtResource("16_px53c")
-stretch_mode = 4
-metadata/_edit_use_anchors_ = true
-
-[connection signal="pressed" from="CanvasLayer/UI/TopsFwdBtn" to="." method="_on_tops_fwd_btn_pressed"]
-[connection signal="pressed" from="CanvasLayer/UI/TopsBckBtn" to="." method="_on_tops_bck_btn_pressed"]
-[connection signal="pressed" from="CanvasLayer/UI/BottomsBckBtn" to="." method="_on_bottoms_bck_btn_pressed"]
-[connection signal="pressed" from="CanvasLayer/UI/BottomsFwdBtn" to="." method="_on_bottoms_fwd_btn_pressed"]
-[connection signal="pressed" from="CanvasLayer/UI/FullbodyBtn" to="." method="_on_fullbody_btn_pressed"]
-[connection signal="pressed" from="CanvasLayer/UI/SeparateBtn" to="." method="_on_separate_btn_pressed"]
+[node name="TileMap" type="TileMap" parent="."]
+format = 2
diff --git a/scenes/items.tres b/scenes/items.tres
deleted file mode 100644
index 310c47d..0000000
--- a/scenes/items.tres
+++ /dev/null
@@ -1,76 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://bhyon1s1op8ly"]
-
-[ext_resource type="Texture2D" uid="uid://wfsffpk4h8p" path="res://sprites/clothes/sweat_pants.png" id="1_5mrf2"]
-[ext_resource type="Texture2D" uid="uid://b3xtl8c73nw30" path="res://sprites/clothes/beatup_jeans.png" id="2_0n07e"]
-[ext_resource type="Texture2D" uid="uid://bl8w5mjjo4i73" path="res://sprites/clothes/jeans.png" id="3_7udtq"]
-[ext_resource type="Texture2D" uid="uid://310b2835i5d8" path="res://sprites/clothes/dj_shirt.png" id="7_b8d0l"]
-[ext_resource type="Texture2D" uid="uid://5heuxqo78jns" path="res://sprites/clothes/fullbody/canonrhode.png" id="7_iagv2"]
-[ext_resource type="Texture2D" uid="uid://cgnumy58myojg" path="res://sprites/clothes/fullbody/coat.png" id="8_uraqp"]
-[ext_resource type="Texture2D" uid="uid://6y443cg1s6up" path="res://sprites/clothes/fullbody/edsoutfit.png" id="9_osdr5"]
-[ext_resource type="Texture2D" uid="uid://dt1tsnusorwv8" path="res://sprites/clothes/korm_shirt.png" id="10_81cd5"]
-[ext_resource type="Texture2D" uid="uid://crgedi1ppq2ow" path="res://sprites/clothes/fullbody/formal.png" id="10_uqjix"]
-[ext_resource type="Texture2D" uid="uid://b07kumnwr7c0w" path="res://sprites/clothes/fullbody/mario.png" id="11_ssvy5"]
-[ext_resource type="Texture2D" uid="uid://c8xa7sal3omnm" path="res://sprites/clothes/fullbody/schoolgirl.png" id="12_3wtcm"]
-[ext_resource type="Texture2D" uid="uid://b0sf2e2e5jfab" path="res://sprites/clothes/z_shirt.png" id="12_i81ab"]
-[ext_resource type="Texture2D" uid="uid://lxsoletgafdk" path="res://sprites/clothes/fullbody/snowboarding.png" id="13_wlerh"]
-[ext_resource type="Texture2D" uid="uid://cgxm7h4ukqpyh" path="res://sprites/clothes/fullbody/wendy.png" id="14_w0d1o"]
-
-[resource]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("1_5mrf2")
-}, {
-"duration": 1.0,
-"texture": ExtResource("2_0n07e")
-}, {
-"duration": 1.0,
-"texture": ExtResource("3_7udtq")
-}],
-"loop": true,
-"name": &"bottoms",
-"speed": 1.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("7_iagv2")
-}, {
-"duration": 1.0,
-"texture": ExtResource("8_uraqp")
-}, {
-"duration": 1.0,
-"texture": ExtResource("9_osdr5")
-}, {
-"duration": 1.0,
-"texture": ExtResource("10_uqjix")
-}, {
-"duration": 1.0,
-"texture": ExtResource("11_ssvy5")
-}, {
-"duration": 1.0,
-"texture": ExtResource("12_3wtcm")
-}, {
-"duration": 1.0,
-"texture": ExtResource("13_wlerh")
-}, {
-"duration": 1.0,
-"texture": ExtResource("14_w0d1o")
-}],
-"loop": true,
-"name": &"fullbody",
-"speed": 5.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("7_b8d0l")
-}, {
-"duration": 1.0,
-"texture": ExtResource("10_81cd5")
-}, {
-"duration": 1.0,
-"texture": ExtResource("12_i81ab")
-}],
-"loop": true,
-"name": &"tops",
-"speed": 1.0
-}]
diff --git a/scenes/object.tscn b/scenes/object.tscn
new file mode 100644
index 0000000..ff1a068
--- /dev/null
+++ b/scenes/object.tscn
@@ -0,0 +1,26 @@
+[gd_scene load_steps=3 format=3 uid="uid://dn152ouc7l21p"]
+
+[ext_resource type="Script" path="res://scripts/object.gd" id="1_tyfcj"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_xd2jg"]
+size = Vector2(111, 125.5)
+
+[node name="Object" type="Node2D"]
+script = ExtResource("1_tyfcj")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+position = Vector2(4.5, 6.5)
+scale = Vector2(1.32143, 1.32292)
+
+[node name="Area2D" type="Area2D" parent="."]
+metadata/_edit_lock_ = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2(5, 7)
+shape = SubResource("RectangleShape2D_xd2jg")
+metadata/_edit_lock_ = true
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]
+[connection signal="body_exited" from="Area2D" to="." method="_on_area_2d_body_exited"]
+[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"]
+[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"]
diff --git a/scenes/platform.tscn b/scenes/platform.tscn
new file mode 100644
index 0000000..e03becf
--- /dev/null
+++ b/scenes/platform.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=4 format=3 uid="uid://bvbelmb6rvy4f"]
+
+[ext_resource type="Script" path="res://scripts/platform.gd" id="1_xgdk6"]
+[ext_resource type="Texture2D" uid="uid://c52oho3nvkt45" path="res://sprites/clothes/scale.png" id="2_ic83p"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_ieyrm"]
+size = Vector2(111, 126)
+
+[node name="Platform" type="StaticBody2D"]
+script = ExtResource("1_xgdk6")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+position = Vector2(4.5, 7)
+scale = Vector2(1.32143, 1.28571)
+texture = ExtResource("2_ic83p")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2(4.5, 7)
+shape = SubResource("RectangleShape2D_ieyrm")
+metadata/_edit_lock_ = true
diff --git a/scenes/wardrobe.tscn b/scenes/wardrobe.tscn
new file mode 100644
index 0000000..8f718ef
--- /dev/null
+++ b/scenes/wardrobe.tscn
@@ -0,0 +1,51 @@
+[gd_scene load_steps=3 format=3 uid="uid://crwoe1shep3qn"]
+
+[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="1_0jlsi"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_oig6u"]
+size = Vector2(111, 125.5)
+
+[node name="Wordrobe" type="Panel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+metadata/_edit_use_anchors_ = true
+
+[node name="Grid" type="GridContainer" parent="."]
+layout_mode = 2
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+columns = 4
+metadata/_edit_use_anchors_ = true
+
+[node name="Object" parent="Grid" instance=ExtResource("1_0jlsi")]
+position = Vector2(51, 54)
+texture = null
+
+[node name="Bottoms" type="StaticBody2D" parent="Grid" groups=["bottoms"]]
+
+[node name="ColorRect" type="ColorRect" parent="Grid/Bottoms"]
+custom_minimum_size = Vector2(111, 125)
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -49.0
+offset_top = 116.0
+offset_right = 62.0
+offset_bottom = 241.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(1, 1, 1, 0.0980392)
+metadata/_edit_use_anchors_ = true
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Grid/Bottoms"]
+position = Vector2(6, 178.25)
+shape = SubResource("RectangleShape2D_oig6u")
diff --git a/screenshot.gif b/screenshot.gif
new file mode 100644
index 0000000..ef6345c
Binary files /dev/null and b/screenshot.gif differ
diff --git a/screenshot.png b/screenshot.png
deleted file mode 100644
index af34b01..0000000
Binary files a/screenshot.png and /dev/null differ
diff --git a/screenshots/main_ui.png b/screenshots/main_ui.png
new file mode 100644
index 0000000..02461f8
Binary files /dev/null and b/screenshots/main_ui.png differ
diff --git a/sprites/clothes/logo.png.import b/screenshots/main_ui.png.import
similarity index 69%
rename from sprites/clothes/logo.png.import
rename to screenshots/main_ui.png.import
index 554e477..76d3459 100644
--- a/sprites/clothes/logo.png.import
+++ b/screenshots/main_ui.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://ch1y0g1plqys6"
-path="res://.godot/imported/logo.png-68ff395daf2515f85e13ba18ce4a426d.ctex"
+uid="uid://dycgk1pvyl7fu"
+path="res://.godot/imported/main_ui.png-ac6532fbb861d9876368e8a8c16e4467.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://sprites/clothes/logo.png"
-dest_files=["res://.godot/imported/logo.png-68ff395daf2515f85e13ba18ce4a426d.ctex"]
+source_file="res://screenshots/main_ui.png"
+dest_files=["res://.godot/imported/main_ui.png-ac6532fbb861d9876368e8a8c16e4467.ctex"]
[params]
diff --git a/scripts/character.gd b/scripts/character.gd
index f792632..5c590a2 100644
--- a/scripts/character.gd
+++ b/scripts/character.gd
@@ -1,4 +1,3 @@
-@tool
extends Node2D
@onready var _eyes = $Eyes
diff --git a/scripts/clothing.gd b/scripts/clothing.gd
new file mode 100644
index 0000000..2bfe0df
--- /dev/null
+++ b/scripts/clothing.gd
@@ -0,0 +1,37 @@
+# This project is licensed under the GPL-3.0 license.
+# See the LICENSE file in the project root for more information.
+extends TextureRect
+
+var is_draggable = false
+var is_inside_draggable = false
+var body_ref
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(delta):
+ if is_draggable:
+ if Input.is_action_just_pressed("click"):
+ global_position = get_global_mouse_position()
+ elif Input.is_action_just_released("click"):
+ is_draggable = false
+ var tween = get_tree().create_tween()
+ if is_inside_draggable:
+ tween.tween_property(self,"postion",body_ref.position,0.2).set_ease(Tween.EASE_OUT)
+ else:
+ tween.tween_property(self,"global_postion",body_ref.position,0.2).set_ease(Tween.EASE_OUT)
+
+func _get_drag_data(at_position):
+ var preview_texture = TextureRect.new()
+
+ preview_texture.texture = texture
+ preview_texture.expand_mode = 1
+ preview_texture.size = Vector2(106, 112)
+
+ set_drag_preview(preview_texture)
+
+ return preview_texture.texture
+
+func _can_drop_data(at_position, data):
+ return data is Texture2D
+
+func _drop_data(at_position, data):
+ texture = data
diff --git a/scripts/config.gd b/scripts/config.gd
deleted file mode 100644
index 460c050..0000000
--- a/scripts/config.gd
+++ /dev/null
@@ -1,33 +0,0 @@
-extends Node
-
-func debug_config():
- # If the game is in
- if OS.is_debug_build():
- return "res://config.cfg"
- else:
- return "user://config.cfg"
-
-func set_config(config_file = "user://config.cfg"):
- # Create new ConfigFile object.
- var config = ConfigFile.new()
-
- # Store some values.
- config.set_value("window", "height", 1024)
- config.set_value("window", "width", 768)
-
- # Save it to a file (overwrite if already exists)
- if !FileAccess.file_exists(config_file):
- config.save(config_file)
-
-func get_config(section, value, config_file = "user://config.cfg"):
- var config = ConfigFile.new()
-
- # Load data from a file.
- var err = config.load(config_file)
-
- # If the file didn't load, ignore it.
- if err != OK:
- return
-
- for cfg in config.get_sections():
- return config.get_value(section, value)
diff --git a/scripts/game.gd b/scripts/game.gd
deleted file mode 100644
index 2b41643..0000000
--- a/scripts/game.gd
+++ /dev/null
@@ -1,47 +0,0 @@
-extends Node
-
-
-@onready var tops = $Tops
-@onready var bottoms = $Bottoms
-
-
-func _ready():
- var config_file = Config.debug_config()
-
- if !FileAccess.file_exists(config_file):
- Config.set_config()
-
- if FileAccess.file_exists(config_file):
- var window_height = Config.get_config("window", "height", config_file)
- var window_width = Config.get_config("window", "width", config_file)
- print_debug(window_height)
- print_debug(window_width)
-
- if window_height && window_width != null:
- DisplayServer.window_set_size(Vector2i(window_height, window_width))
-
-func _on_tops_fwd_btn_pressed():
- var current_frame = tops.frame
- tops.frame = current_frame + 1;
-
-func _on_tops_bck_btn_pressed():
- var current_frame = tops.frame
- tops.frame = current_frame + -1;
-
-
-func _on_bottoms_bck_btn_pressed():
- var current_frame = bottoms.frame
- bottoms.frame = current_frame + -1;
-
-
-func _on_bottoms_fwd_btn_pressed():
- var current_frame = bottoms.frame
- bottoms.frame = current_frame + 1;
-
-
-func _on_fullbody_btn_pressed():
- pass # Replace with function body.
-
-
-func _on_separate_btn_pressed():
- pass # Replace with function body.
diff --git a/scripts/global.gd b/scripts/global.gd
new file mode 100644
index 0000000..22d4120
--- /dev/null
+++ b/scripts/global.gd
@@ -0,0 +1,5 @@
+# This project is licensed under the GPL-3.0 license.
+# See the LICENSE file in the project root for more information.
+extends Node
+
+var is_dragging = false
diff --git a/scripts/gui.gd b/scripts/gui.gd
new file mode 100644
index 0000000..20440b7
--- /dev/null
+++ b/scripts/gui.gd
@@ -0,0 +1,3 @@
+# This project is licensed under the GPL-3.0 license.
+# See the LICENSE file in the project root for more information.
+extends Control
diff --git a/scripts/object.gd b/scripts/object.gd
new file mode 100644
index 0000000..7183fef
--- /dev/null
+++ b/scripts/object.gd
@@ -0,0 +1,61 @@
+# This project is licensed under the GPL-3.0 license.
+# See the LICENSE file in the project root for more information.
+@tool
+extends Node2D
+
+@export var group: String = "dropable"
+@export var texture: Texture2D
+
+var is_draggable = false
+var is_inside_dropable = false
+var body_ref
+var offset: Vector2
+
+@onready var sprite = $Sprite2D
+@onready var collsion = $Area2D/CollisionShape2D
+
+func _ready():
+ sprite.texture = texture
+ collsion.position = sprite.position
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(delta):
+ if is_draggable:
+ if Input.is_action_just_pressed("click"):
+ offset = global_position - get_global_mouse_position()
+ Global.is_dragging = true
+
+ if Input.is_action_pressed("click"):
+ global_position = get_global_mouse_position() - offset
+ elif Input.is_action_just_released("click"):
+ Global.is_dragging = false
+ var tween = get_tree().create_tween()
+ if is_inside_dropable:
+ tween.tween_property(self, "position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT)
+ else:
+ tween.tween_property(self, "global_position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT)
+
+
+func _on_area_2d_body_entered(body):
+ if body.is_in_group(group):
+ is_inside_dropable = true
+ body.modulate = Color(Color.REBECCA_PURPLE, 1)
+ scale = Vector2(1.05, 1.05)
+ body_ref = body
+
+func _on_area_2d_body_exited(body:StaticBody2D):
+ if body.is_in_group(group):
+ is_inside_dropable = false
+ body.modulate = Color(Color.MEDIUM_PURPLE, .7)
+ scale = Vector2(1.05, 1.05)
+
+
+func _on_area_2d_mouse_entered():
+ if not Global.is_dragging:
+ is_draggable = true
+ scale = Vector2(1.05, 1.05)
+
+func _on_area_2d_mouse_exited():
+ if not Global.is_dragging:
+ is_draggable = false
+ scale = Vector2(1, 1)
diff --git a/scripts/platform.gd b/scripts/platform.gd
new file mode 100644
index 0000000..414ae85
--- /dev/null
+++ b/scripts/platform.gd
@@ -0,0 +1,12 @@
+# This project is licensed under the GPL-3.0 license.
+# See the LICENSE file in the project root for more information.
+extends StaticBody2D
+
+func _ready():
+ modulate = Color(Color.MEDIUM_PURPLE, 0.7)
+
+func _process(delta):
+ if Global.is_dragging:
+ visible = true
+ else:
+ visible = false
diff --git a/sprites/character/zack.png b/sprites/character/zack.png
deleted file mode 100644
index fe2a685..0000000
Binary files a/sprites/character/zack.png and /dev/null differ
diff --git a/sprites/clothes/amtrak_hoodie.png b/sprites/clothes/amtrak_hoodie.png
deleted file mode 100644
index d0abf21..0000000
Binary files a/sprites/clothes/amtrak_hoodie.png and /dev/null differ
diff --git a/sprites/clothes/amtrak_hoodie.png.import b/sprites/clothes/amtrak_hoodie.png.import
deleted file mode 100644
index 723562f..0000000
--- a/sprites/clothes/amtrak_hoodie.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://covg37pdusbuy"
-path="res://.godot/imported/amtrak_hoodie.png-915303b36a13a3f81b56a259a96dfc60.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/amtrak_hoodie.png"
-dest_files=["res://.godot/imported/amtrak_hoodie.png-915303b36a13a3f81b56a259a96dfc60.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/atomic_shirt.png b/sprites/clothes/atomic_shirt.png
deleted file mode 100644
index 2b03376..0000000
Binary files a/sprites/clothes/atomic_shirt.png and /dev/null differ
diff --git a/sprites/clothes/atomic_shirt.png.import b/sprites/clothes/atomic_shirt.png.import
deleted file mode 100644
index 1922505..0000000
--- a/sprites/clothes/atomic_shirt.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbf2fv1mxdygt"
-path="res://.godot/imported/atomic_shirt.png-e1562af2eed6677399909eaf790f9e4c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/atomic_shirt.png"
-dest_files=["res://.godot/imported/atomic_shirt.png-e1562af2eed6677399909eaf790f9e4c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/beat_up_jeans.svg b/sprites/clothes/beat_up_jeans.svg
index 3701b17..65773fa 100644
--- a/sprites/clothes/beat_up_jeans.svg
+++ b/sprites/clothes/beat_up_jeans.svg
@@ -1,81 +1,15 @@
-
diff --git a/sprites/clothes/beatup_jeans.png b/sprites/clothes/beatup_jeans.png
deleted file mode 100644
index 7d33865..0000000
Binary files a/sprites/clothes/beatup_jeans.png and /dev/null differ
diff --git a/sprites/clothes/beatup_jeans.png.import b/sprites/clothes/beatup_jeans.png.import
deleted file mode 100644
index f6e6bcf..0000000
--- a/sprites/clothes/beatup_jeans.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b3xtl8c73nw30"
-path="res://.godot/imported/beatup_jeans.png-fba8a80ca3f3d052ec042c34803cc9e7.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/beatup_jeans.png"
-dest_files=["res://.godot/imported/beatup_jeans.png-fba8a80ca3f3d052ec042c34803cc9e7.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/blue-ruffle-logo.afdesign b/sprites/clothes/blue-ruffle-logo.afdesign
deleted file mode 100644
index dad9a94..0000000
Binary files a/sprites/clothes/blue-ruffle-logo.afdesign and /dev/null differ
diff --git a/sprites/clothes/blue_camo_jeans.svg b/sprites/clothes/blue_camo_jeans.svg
index 0b97aa6..5abd880 100644
--- a/sprites/clothes/blue_camo_jeans.svg
+++ b/sprites/clothes/blue_camo_jeans.svg
@@ -1,152 +1,33 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
+
diff --git a/sprites/clothes/blue_skirt.svg b/sprites/clothes/blue_skirt.svg
index 5329680..4ccf992 100644
--- a/sprites/clothes/blue_skirt.svg
+++ b/sprites/clothes/blue_skirt.svg
@@ -1,75 +1,13 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/sprites/ui/cursor.png b/sprites/clothes/cursor.png
similarity index 100%
rename from sprites/ui/cursor.png
rename to sprites/clothes/cursor.png
diff --git a/sprites/ui/cursor.png.import b/sprites/clothes/cursor.png.import
similarity index 72%
rename from sprites/ui/cursor.png.import
rename to sprites/clothes/cursor.png.import
index b2d619e..e11583b 100644
--- a/sprites/ui/cursor.png.import
+++ b/sprites/clothes/cursor.png.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b4g0qprd6i545"
-path="res://.godot/imported/cursor.png-8f7f1d226048e0d8db54ed4c75641444.ctex"
+path="res://.godot/imported/cursor.png-510ed8f4707337aeaa4855fa575b5224.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://sprites/ui/cursor.png"
-dest_files=["res://.godot/imported/cursor.png-8f7f1d226048e0d8db54ed4c75641444.ctex"]
+source_file="res://sprites/clothes/cursor.png"
+dest_files=["res://.godot/imported/cursor.png-510ed8f4707337aeaa4855fa575b5224.ctex"]
[params]
diff --git a/sprites/clothes/dj_shorts.svg b/sprites/clothes/dj_shorts.svg
index bdae6ce..2ae865e 100644
--- a/sprites/clothes/dj_shorts.svg
+++ b/sprites/clothes/dj_shorts.svg
@@ -1,103 +1,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/clothes/formal_skirt.svg b/sprites/clothes/formal_skirt.svg
index a50f1b7..9efb523 100644
--- a/sprites/clothes/formal_skirt.svg
+++ b/sprites/clothes/formal_skirt.svg
@@ -1,51 +1,93 @@
-
-
-
-
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="formal_skirt.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ id="svg2007"
+ version="1.1"
+ viewBox="0 0 29.356469 33.543056"
+ height="33.543056mm"
+ width="29.356468mm">
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/clothes/fullbody/canonrhode.png b/sprites/clothes/fullbody/canonrhode.png
deleted file mode 100644
index f314ed0..0000000
Binary files a/sprites/clothes/fullbody/canonrhode.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/canonrhode.png.import b/sprites/clothes/fullbody/canonrhode.png.import
deleted file mode 100644
index 635fb98..0000000
--- a/sprites/clothes/fullbody/canonrhode.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://5heuxqo78jns"
-path="res://.godot/imported/canonrhode.png-34049a7d8e1bd7f2f1e79a1bb0a53e6e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/canonrhode.png"
-dest_files=["res://.godot/imported/canonrhode.png-34049a7d8e1bd7f2f1e79a1bb0a53e6e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/coat.png b/sprites/clothes/fullbody/coat.png
deleted file mode 100644
index f52a99a..0000000
Binary files a/sprites/clothes/fullbody/coat.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/edsoutfit.png b/sprites/clothes/fullbody/edsoutfit.png
deleted file mode 100644
index 8f5848f..0000000
Binary files a/sprites/clothes/fullbody/edsoutfit.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/edsoutfit.png.import b/sprites/clothes/fullbody/edsoutfit.png.import
deleted file mode 100644
index 437c7c8..0000000
--- a/sprites/clothes/fullbody/edsoutfit.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://6y443cg1s6up"
-path="res://.godot/imported/edsoutfit.png-367388d9f85cbf0ed71362f37d74fa4f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/edsoutfit.png"
-dest_files=["res://.godot/imported/edsoutfit.png-367388d9f85cbf0ed71362f37d74fa4f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/formal.png b/sprites/clothes/fullbody/formal.png
deleted file mode 100644
index 1c62a57..0000000
Binary files a/sprites/clothes/fullbody/formal.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/formal.png.import b/sprites/clothes/fullbody/formal.png.import
deleted file mode 100644
index c63e180..0000000
--- a/sprites/clothes/fullbody/formal.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://crgedi1ppq2ow"
-path="res://.godot/imported/formal.png-ad806d237a0a6cac18782e49981b6fa2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/formal.png"
-dest_files=["res://.godot/imported/formal.png-ad806d237a0a6cac18782e49981b6fa2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/mario.png b/sprites/clothes/fullbody/mario.png
deleted file mode 100644
index c8db014..0000000
Binary files a/sprites/clothes/fullbody/mario.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/mario.png.import b/sprites/clothes/fullbody/mario.png.import
deleted file mode 100644
index 97e1f6f..0000000
--- a/sprites/clothes/fullbody/mario.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b07kumnwr7c0w"
-path="res://.godot/imported/mario.png-6e51bf75093eebd6b666b8535927575c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/mario.png"
-dest_files=["res://.godot/imported/mario.png-6e51bf75093eebd6b666b8535927575c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/schoolgirl.png b/sprites/clothes/fullbody/schoolgirl.png
deleted file mode 100644
index a6ecf70..0000000
Binary files a/sprites/clothes/fullbody/schoolgirl.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/schoolgirl.png.import b/sprites/clothes/fullbody/schoolgirl.png.import
deleted file mode 100644
index d61622a..0000000
--- a/sprites/clothes/fullbody/schoolgirl.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c8xa7sal3omnm"
-path="res://.godot/imported/schoolgirl.png-32f14199b814658cd142fd79d92c28df.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/schoolgirl.png"
-dest_files=["res://.godot/imported/schoolgirl.png-32f14199b814658cd142fd79d92c28df.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/snowboarding.png b/sprites/clothes/fullbody/snowboarding.png
deleted file mode 100644
index 968fab9..0000000
Binary files a/sprites/clothes/fullbody/snowboarding.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/snowboarding.png.import b/sprites/clothes/fullbody/snowboarding.png.import
deleted file mode 100644
index 3758596..0000000
--- a/sprites/clothes/fullbody/snowboarding.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://lxsoletgafdk"
-path="res://.godot/imported/snowboarding.png-f5b50f794211ea753cb7782eafcbab3b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/snowboarding.png"
-dest_files=["res://.godot/imported/snowboarding.png-f5b50f794211ea753cb7782eafcbab3b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullbody/wendy.png b/sprites/clothes/fullbody/wendy.png
deleted file mode 100644
index 58afde7..0000000
Binary files a/sprites/clothes/fullbody/wendy.png and /dev/null differ
diff --git a/sprites/clothes/fullbody/wendy.png.import b/sprites/clothes/fullbody/wendy.png.import
deleted file mode 100644
index 18d2b2a..0000000
--- a/sprites/clothes/fullbody/wendy.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cgxm7h4ukqpyh"
-path="res://.godot/imported/wendy.png-e8ad05b117de48ee6b0cdfc02a6e87d2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/fullbody/wendy.png"
-dest_files=["res://.godot/imported/wendy.png-e8ad05b117de48ee6b0cdfc02a6e87d2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/fullsnack_shirt.svg b/sprites/clothes/fullsnack_shirt.svg
index ee8c400..0d66500 100644
--- a/sprites/clothes/fullsnack_shirt.svg
+++ b/sprites/clothes/fullsnack_shirt.svg
@@ -1,35 +1,261 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/world/icrazy_frame.svg b/sprites/clothes/icrazy_frame.svg
similarity index 100%
rename from sprites/world/icrazy_frame.svg
rename to sprites/clothes/icrazy_frame.svg
diff --git a/sprites/world/icrazy_frame.svg.import b/sprites/clothes/icrazy_frame.svg.import
similarity index 74%
rename from sprites/world/icrazy_frame.svg.import
rename to sprites/clothes/icrazy_frame.svg.import
index f0e5726..9c6bcf9 100644
--- a/sprites/world/icrazy_frame.svg.import
+++ b/sprites/clothes/icrazy_frame.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bi7ayrxnn7hex"
-path="res://.godot/imported/icrazy_frame.svg-96baf65adc7b6794f97c6c0d94fcce08.ctex"
+path="res://.godot/imported/icrazy_frame.svg-032c353b0b85ae71d6c5843b8929a60c.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://sprites/world/icrazy_frame.svg"
-dest_files=["res://.godot/imported/icrazy_frame.svg-96baf65adc7b6794f97c6c0d94fcce08.ctex"]
+source_file="res://sprites/clothes/icrazy_frame.svg"
+dest_files=["res://.godot/imported/icrazy_frame.svg-032c353b0b85ae71d6c5843b8929a60c.ctex"]
[params]
diff --git a/sprites/clothes/jeans.png b/sprites/clothes/jeans.png
deleted file mode 100644
index 1e27e57..0000000
Binary files a/sprites/clothes/jeans.png and /dev/null differ
diff --git a/sprites/clothes/jeans.png.import b/sprites/clothes/jeans.png.import
deleted file mode 100644
index ecc93b9..0000000
--- a/sprites/clothes/jeans.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bl8w5mjjo4i73"
-path="res://.godot/imported/jeans.png-cb872dec1c87d219bb56d373215c361d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/jeans.png"
-dest_files=["res://.godot/imported/jeans.png-cb872dec1c87d219bb56d373215c361d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/jeans.svg b/sprites/clothes/jeans.svg
index daf5f8d..6071567 100644
--- a/sprites/clothes/jeans.svg
+++ b/sprites/clothes/jeans.svg
@@ -1,91 +1,19 @@
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
diff --git a/sprites/clothes/logo.png b/sprites/clothes/logo.png
deleted file mode 100644
index 1855097..0000000
Binary files a/sprites/clothes/logo.png and /dev/null differ
diff --git a/sprites/clothes/pants_icon.svg b/sprites/clothes/pants_icon.svg
new file mode 100644
index 0000000..eb8ad9a
--- /dev/null
+++ b/sprites/clothes/pants_icon.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/screenshot.png.import b/sprites/clothes/pants_icon.svg.import
similarity index 60%
rename from screenshot.png.import
rename to sprites/clothes/pants_icon.svg.import
index 1174e39..9c78434 100644
--- a/screenshot.png.import
+++ b/sprites/clothes/pants_icon.svg.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://bjio4exj7ic6b"
-path="res://.godot/imported/screenshot.png-024a21af5d37bf0f0dd0e2bccdd149d0.ctex"
+uid="uid://bn2le7r61mcmq"
+path="res://.godot/imported/pants_icon.svg-1b70a1b4db0c8229d68cbbafffd7bf3c.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://screenshot.png"
-dest_files=["res://.godot/imported/screenshot.png-024a21af5d37bf0f0dd0e2bccdd149d0.ctex"]
+source_file="res://sprites/clothes/pants_icon.svg"
+dest_files=["res://.godot/imported/pants_icon.svg-1b70a1b4db0c8229d68cbbafffd7bf3c.ctex"]
[params]
@@ -32,3 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/sprites/clothes/retro_shirt.svg b/sprites/clothes/retro_shirt.svg
index a2f80b3..4dcff76 100644
--- a/sprites/clothes/retro_shirt.svg
+++ b/sprites/clothes/retro_shirt.svg
@@ -1,17 +1,192 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/clothes/scale.png b/sprites/clothes/scale.png
index 7a0a9b4..17ab738 100644
Binary files a/sprites/clothes/scale.png and b/sprites/clothes/scale.png differ
diff --git a/sprites/clothes/shirt_icon.svg b/sprites/clothes/shirt_icon.svg
new file mode 100644
index 0000000..2f163a1
--- /dev/null
+++ b/sprites/clothes/shirt_icon.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/sprites/character/zack.png.import b/sprites/clothes/shirt_icon.svg.import
similarity index 60%
rename from sprites/character/zack.png.import
rename to sprites/clothes/shirt_icon.svg.import
index 42485d3..0521887 100644
--- a/sprites/character/zack.png.import
+++ b/sprites/clothes/shirt_icon.svg.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://3rmb0kj376t1"
-path="res://.godot/imported/zack.png-f8da36885e697645dad9d11e96d24cd4.ctex"
+uid="uid://sl7vgiqmblpd"
+path="res://.godot/imported/shirt_icon.svg-96421effc10bfb14afa97232b2ab5d13.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://sprites/character/zack.png"
-dest_files=["res://.godot/imported/zack.png-f8da36885e697645dad9d11e96d24cd4.ctex"]
+source_file="res://sprites/clothes/shirt_icon.svg"
+dest_files=["res://.godot/imported/shirt_icon.svg-96421effc10bfb14afa97232b2ab5d13.ctex"]
[params]
@@ -32,3 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/sprites/clothes/sweat_pants.png b/sprites/clothes/sweat_pants.png
deleted file mode 100644
index 1c023e5..0000000
Binary files a/sprites/clothes/sweat_pants.png and /dev/null differ
diff --git a/sprites/clothes/sweat_pants.png.import b/sprites/clothes/sweat_pants.png.import
deleted file mode 100644
index 8e5edb3..0000000
--- a/sprites/clothes/sweat_pants.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://wfsffpk4h8p"
-path="res://.godot/imported/sweat_pants.png-d8ccfd16bd13d1a37fa594caf5da185b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/clothes/sweat_pants.png"
-dest_files=["res://.godot/imported/sweat_pants.png-d8ccfd16bd13d1a37fa594caf5da185b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/clothes/sweat_pants.svg b/sprites/clothes/sweat_pants.svg
index 7905528..1657cda 100644
--- a/sprites/clothes/sweat_pants.svg
+++ b/sprites/clothes/sweat_pants.svg
@@ -1,56 +1,9 @@
-
-
-
-
+
+
+
+
+
-
+
diff --git a/sprites/clothes/train_hoodie.svg b/sprites/clothes/train_hoodie.svg
index 9c47441..0bc7b9c 100644
--- a/sprites/clothes/train_hoodie.svg
+++ b/sprites/clothes/train_hoodie.svg
@@ -1,25 +1,218 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/clothes/whatsnew_shirt.svg b/sprites/clothes/whatsnew_shirt.svg
index 788610a..2b47130 100644
--- a/sprites/clothes/whatsnew_shirt.svg
+++ b/sprites/clothes/whatsnew_shirt.svg
@@ -1,14 +1,158 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sprites/logo.png b/sprites/logo.png
deleted file mode 100644
index 1855097..0000000
Binary files a/sprites/logo.png and /dev/null differ
diff --git a/sprites/logo.png.import b/sprites/logo.png.import
deleted file mode 100644
index f422dc9..0000000
--- a/sprites/logo.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://wr3ns0ywb75q"
-path="res://.godot/imported/logo.png-9048fb90decc23e071a5e31cbd95178e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/logo.png"
-dest_files=["res://.godot/imported/logo.png-9048fb90decc23e071a5e31cbd95178e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/ui/fullbodyBtn.png b/sprites/ui/fullbodyBtn.png
deleted file mode 100644
index 1474909..0000000
Binary files a/sprites/ui/fullbodyBtn.png and /dev/null differ
diff --git a/sprites/ui/fullbodyBtn.png.import b/sprites/ui/fullbodyBtn.png.import
deleted file mode 100644
index 05fd609..0000000
--- a/sprites/ui/fullbodyBtn.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cl0wwlm6yw0ug"
-path="res://.godot/imported/fullbodyBtn.png-f506c185022437b56c8bcc7e37108083.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/ui/fullbodyBtn.png"
-dest_files=["res://.godot/imported/fullbodyBtn.png-f506c185022437b56c8bcc7e37108083.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/ui/greenBtn.png b/sprites/ui/greenBtn.png
deleted file mode 100644
index 036fd0d..0000000
Binary files a/sprites/ui/greenBtn.png and /dev/null differ
diff --git a/sprites/ui/greenBtn.png.import b/sprites/ui/greenBtn.png.import
deleted file mode 100644
index 2205cb0..0000000
--- a/sprites/ui/greenBtn.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://clakkue2mohs4"
-path="res://.godot/imported/greenBtn.png-4d4dd91a26d599b1f56f508992a67f2c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/ui/greenBtn.png"
-dest_files=["res://.godot/imported/greenBtn.png-4d4dd91a26d599b1f56f508992a67f2c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/ui/redBtn.png b/sprites/ui/redBtn.png
deleted file mode 100644
index df6499b..0000000
Binary files a/sprites/ui/redBtn.png and /dev/null differ
diff --git a/sprites/ui/redBtn.png.import b/sprites/ui/redBtn.png.import
deleted file mode 100644
index ebc9e50..0000000
--- a/sprites/ui/redBtn.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cd8mirubbhn10"
-path="res://.godot/imported/redBtn.png-e2a2e519f53fb6bff43505aa9622a1cf.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/ui/redBtn.png"
-dest_files=["res://.godot/imported/redBtn.png-e2a2e519f53fb6bff43505aa9622a1cf.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/ui/seperateBtn.png b/sprites/ui/seperateBtn.png
deleted file mode 100644
index 9de6a40..0000000
Binary files a/sprites/ui/seperateBtn.png and /dev/null differ
diff --git a/sprites/ui/seperateBtn.png.import b/sprites/ui/seperateBtn.png.import
deleted file mode 100644
index fe04822..0000000
--- a/sprites/ui/seperateBtn.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://nc0wkek55yhu"
-path="res://.godot/imported/seperateBtn.png-9c26f70de7cb496b00568eacdb9e191f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/ui/seperateBtn.png"
-dest_files=["res://.godot/imported/seperateBtn.png-9c26f70de7cb496b00568eacdb9e191f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/sprites/world/boxersOfAmericaFrame.png b/sprites/world/boxersOfAmericaFrame.png
deleted file mode 100644
index 3e6ceb3..0000000
Binary files a/sprites/world/boxersOfAmericaFrame.png and /dev/null differ
diff --git a/sprites/world/boxersOfAmericaFrame.png.import b/sprites/world/boxersOfAmericaFrame.png.import
deleted file mode 100644
index b1f5067..0000000
--- a/sprites/world/boxersOfAmericaFrame.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d1u3w61r0uv7p"
-path="res://.godot/imported/boxersOfAmericaFrame.png-305851a525e3ee9fbe3ec9956a4aa80b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/world/boxersOfAmericaFrame.png"
-dest_files=["res://.godot/imported/boxersOfAmericaFrame.png-305851a525e3ee9fbe3ec9956a4aa80b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1