1
0
Fork 0
mirror of https://github.com/tonytins/dressupzack synced 2025-05-06 21:54:48 -04:00

Switch to C# (#8)

I learned C# primarily for game development but held off switching to it on Godot 3 because it was still rough around edges - crashed way too many times. It seems to be working as it should as of 3.1.1 and that's why I'm rewriting all the GDScript portions in C# as much as possible.

However, this does make it incompatible with the Steam version, as of this writing, until the Godot devs decide how they want to publish it in future updates.
This commit is contained in:
Anthony Wilcox 2019-06-11 01:30:02 -04:00 committed by GitHub
parent 25f2212d4d
commit bb7d4c2d2c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 885 additions and 354 deletions

352
.gitignore vendored
View file

@ -1,7 +1,7 @@
export
# Created by https://www.gitignore.io/api/linux,macos,windows,godot,visualstudiocode
# Edit at https://www.gitignore.io/?templates=linux,macos,windows,godot,visualstudiocode
# Created by https://www.gitignore.io/api/godot,linux,macos,windows,visualstudio,visualstudiocode
# Edit at https://www.gitignore.io/?templates=godot,linux,macos,windows,visualstudio,visualstudiocode
### Godot ###
@ -9,7 +9,6 @@ export
.import/
export.cfg
export_presets.cfg
*.log
# Mono-specific ignores
.mono/
@ -93,4 +92,349 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
# End of https://www.gitignore.io/api/linux,macos,windows,godot,visualstudiocode
### 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/master/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/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# 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
# 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/
# 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
*.tmp_proj
*_wpftmp.csproj
*.log
*.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
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# 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
# 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
*- Backup*.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 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/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# End of https://www.gitignore.io/api/godot,linux,macos,windows,visualstudio,visualstudiocode

View file

@ -4,6 +4,16 @@
Nathan's Dress Up is a open source dress up game. It's a remake of my original Flash game, ZC's Dress Up.
## Prerequisites
- [Godot](https://godotengine.org/download/windows) 3.1.1 or later, Mono version
- .NET Build Tools
- [Mono SDK](https://www.mono-project.com/download/stable/)
- [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/?q=build+tools)
- Visual Studio or MonoDevelop
_Built and tested on Godot 3.1.1 from Windows 10 1903 with Visual Studio Build Tools 2017_
## Screenshot
![](screenshot.gif)

77
project/.editorconfig Normal file
View file

@ -0,0 +1,77 @@
root = true
[*]
charset = utf-8
end_of_line = crlf
indent_style = space
indent_size = 4
insert_final_newline = false
trim_trailing_whitespace = true
[*.{csproj,proj,projitems,shproj,fsproj,target,props}]
indent_style = space
indent_size = 2
[*.{fs,fsx,fsi}]
indent_style = space
indent_size = 4
[*.cs]
# New line preferences
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current
# only use var when it's obvious what the variable type is
csharp_style_var_for_built_in_types = true : none
csharp_style_var_when_type_is_apparent = true : none
csharp_style_var_elsewhere = true : suggestion
# Code style defaults
dotnet_sort_system_directives_first = true
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false
# Pattern matching
csharp_style_pattern_matching_over_is_with_cast_check = true : suggestion
csharp_style_pattern_matching_over_as_with_null_check = true : suggestion
csharp_style_inlined_variable_declaration = true : suggestion
# Null checking preferences
csharp_style_throw_expression = true : warning
csharp_style_conditional_delegate_call = true : warning
# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = do_not_ignore
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

View file

@ -1,12 +0,0 @@
extends Node
# export (String, FILE, "*.json") var item_file : String
func load_items(file_path) -> Dictionary:
var file = File.new()
assert file.file_exists(file_path)
file.open(file_path)
var items = parse_json(file.get_as_text())
assert items.size() > 0
return items

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{64EE4F89-7A23-452A-8772-9E7C07A71ED9}</ProjectGuid>
<OutputType>Library</OutputType>
<OutputPath>.mono\temp\bin\$(Configuration)</OutputPath>
<RootNamespace>NathansDressUp</RootNamespace>
<AssemblyName>Nathan's Dress Up</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<BaseIntermediateOutputPath>.mono\temp\obj</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)\$(Configuration)</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>portable</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>portable</DebugType>
<Optimize>true</Optimize>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Tools|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>portable</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TOOLS;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="GodotSharp">
<HintPath>$(ProjectDir)\.mono\assemblies\GodotSharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="GodotSharpEditor" Condition=" '$(Configuration)' == 'Tools' ">
<HintPath>$(ProjectDir)\.mono\assemblies\GodotSharpEditor.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyDynamicInfo.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AssemblyDynamicInfo.tt</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="src\GameScn.cs" />
<Compile Include="src\PauseScn.cs" />
<Compile Include="src\Soundtrack.cs" />
<Compile Include="src\TitleScn.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Properties\AssemblyDynamicInfo.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>AssemblyDynamicInfo.cs</LastGenOutput>
</Content>
</ItemGroup>
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<ItemGroup>
<None Include="project.licenseheader" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

View file

@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nathan's Dress Up", "Nathan's Dress Up.csproj", "{64EE4F89-7A23-452A-8772-9E7C07A71ED9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Tools|Any CPU = Tools|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Release|Any CPU.Build.0 = Release|Any CPU
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Tools|Any CPU.ActiveCfg = Tools|Any CPU
{64EE4F89-7A23-452A-8772-9E7C07A71ED9}.Tools|Any CPU.Build.0 = Tools|Any CPU
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,8 @@
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
using System.Reflection;
[assembly: AssemblyVersion("0.0.1906.1104")]
[assembly: AssemblyFileVersion("0.0.1906.1104")]

View file

@ -0,0 +1,14 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
var now = DateTime.UtcNow;
var version = $"0.0.{now.Year % 100:D2}{now.Month:D2}.{now.Day:D2}{now.Hour:D2}";
#>
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
using System.Reflection;
[assembly: AssemblyVersion("<#= version #>")]
[assembly: AssemblyFileVersion("<#= version #>")]

View file

@ -0,0 +1,27 @@
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
using System.Reflection;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Nathan's Dress Up")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
// [assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

4
project/packages.config Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net45" />
</packages>

View file

@ -23,14 +23,6 @@ boot_splash/bg_color=Color( 0.8, 0.8, 0.4, 1 )
config/icon="res://icon.png"
name_sv="Nathans klä upp"
[autoload]
GameKit="*res://src/GameKit.gd"
[debug]
gdscript/completion/autocomplete_setters_and_getters=true
[debug]
gdscript/completion/autocomplete_setters_and_getters=true
@ -62,3 +54,4 @@ quality/intended_usage/framebuffer_allocation.mobile=0
quality/2d/use_pixel_snap=true
vram_compression/import_etc=true
environment/default_environment="res://default_env.tres"
quality/dynamic_fonts/use_oversampling=false

View file

@ -0,0 +1,4 @@
extensions: designer.cs generated.cs
extensions: .cs .cpp .h
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.

View file

@ -67,7 +67,7 @@ texture = ExtResource( 4 )
[node name="Eyes" type="AnimatedSprite" parent="Base"]
position = Vector2( 114.227, 63.9224 )
frames = SubResource( 2 )
frame = 4
frame = 13
playing = true
[node name="Mouth" type="AnimatedSprite" parent="Base"]

View file

@ -39,7 +39,7 @@ custom_colors/font_color_bg = Color( 0.921569, 0.921569, 0.921569, 1 )
custom_colors/font_color_fg = Color( 1, 1, 1, 1 )
[node name="Pants" type="Tabs" parent="Wordrobe"]
visible = false
editor/display_folded = true
anchor_right = 1.0
anchor_bottom = 1.0
margin_top = 31.0
@ -76,9 +76,9 @@ margin_bottom = 112.0
texture_normal = ExtResource( 6 )
[node name="RemovePants" type="Button" parent="Wordrobe/Pants/PantsGrid"]
margin_top = 116.0
margin_right = 106.0
margin_bottom = 228.0
margin_left = 440.0
margin_right = 546.0
margin_bottom = 112.0
rect_min_size = Vector2( 0, 112 )
custom_colors/font_color_disabled = Color( 0, 0, 0, 1 )
custom_colors/font_color = Color( 0, 0, 0, 1 )
@ -88,6 +88,8 @@ icon = ExtResource( 7 )
flat = true
[node name="Shirts" type="Tabs" parent="Wordrobe"]
editor/display_folded = true
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
margin_top = 31.0
@ -204,7 +206,6 @@ margin_bottom = 112.0
texture_normal = ExtResource( 20 )
[node name="Accessoires" type="Tabs" parent="Wordrobe"]
editor/display_folded = true
visible = false
anchor_right = 1.0
anchor_bottom = 1.0

View file

@ -1,20 +1,18 @@
[gd_scene load_steps=6 format=2]
[gd_scene load_steps=5 format=2]
[ext_resource path="res://src/CreditsScn.gd" type="Script" id=1]
[ext_resource path="res://styles/DressUpTheme.res" type="Theme" id=2]
[ext_resource path="res://scn/Character.tscn" type="PackedScene" id=3]
[ext_resource path="res://scn/PauseScn.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/Soundtrack.gd" type="Script" id=5]
[ext_resource path="res://styles/DressUpTheme.res" type="Theme" id=1]
[ext_resource path="res://scn/Character.tscn" type="PackedScene" id=2]
[ext_resource path="res://scn/PauseScn.tscn" type="PackedScene" id=3]
[ext_resource path="res://src/Soundtrack.cs" type="Script" id=4]
[node name="Credits" type="Node"]
script = ExtResource( 1 )
[node name="RichTextLabel" type="RichTextLabel" parent="."]
margin_left = 33.0
margin_top = 19.0
margin_right = 320.0
margin_bottom = 206.0
theme = ExtResource( 2 )
theme = ExtResource( 1 )
bbcode_text = "Nathan's Dress Up is a remake of Zack's Dress Up, a flash game created from 2006 to 2009. The character use to be a blue fox named Zack but was changed to a blue fennec named Nathan."
text = "Nathan's Dress Up is a remake of Zack's Dress Up, a flash game created from 2006 to 2009. The character use to be a blue fox named Zack but was changed to a blue fennec named Nathan."
@ -24,7 +22,7 @@ anchor_right = 0.5
margin_left = -159.0
margin_right = 160.0
margin_bottom = 586.0
theme = ExtResource( 2 )
theme = ExtResource( 1 )
bbcode_enabled = true
bbcode_text = "[center]Created by
Anthony Wilcox
@ -55,17 +53,10 @@ Made with
Godot Engine
"
[node name="Character" parent="." instance=ExtResource( 3 )]
[node name="Character" parent="." instance=ExtResource( 2 )]
position = Vector2( 68.8273, 256.845 )
[node name="WinDialogs" parent="." instance=ExtResource( 4 )]
[node name="WinDialogs" parent="." instance=ExtResource( 3 )]
[node name="Music" type="AudioStreamPlayer" parent="."]
script = ExtResource( 5 )
[node name="Version" type="Label" parent="."]
margin_left = 950.908
margin_top = 568.64
margin_right = 990.908
margin_bottom = 582.64
text = "Version"
script = ExtResource( 4 )

View file

@ -1,10 +1,10 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://src/GameScn.gd" type="Script" id=1]
[ext_resource path="res://src/GameScn.cs" type="Script" id=1]
[ext_resource path="res://sprites/icrazy_frame.svg" type="Texture" id=2]
[ext_resource path="res://sprites/lights.png" type="Texture" id=3]
[ext_resource path="res://scn/Clothes.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/Soundtrack.gd" type="Script" id=5]
[ext_resource path="res://src/Soundtrack.cs" type="Script" id=5]
[ext_resource path="res://scn/PauseScn.tscn" type="PackedScene" id=6]
[ext_resource path="res://scn/Character.tscn" type="PackedScene" id=7]

View file

@ -0,0 +1,56 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://styles/DressUpTheme.res" type="Theme" id=1]
[node name="LicenseWin" type="AcceptDialog"]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -202.0
margin_top = -137.5
margin_right = 202.0
margin_bottom = 137.5
theme = ExtResource( 1 )
window_title = "KLIC"
resizable = true
[node name="LicenseTxt" type="RichTextLabel" parent="."]
anchor_left = 0.5
anchor_right = 0.5
margin_left = -194.0
margin_top = 8.0
margin_right = 194.0
margin_bottom = 239.0
bbcode_enabled = true
bbcode_text = "Nathan's Dress Up is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Nathan's Dress Up is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Nathan's Dress Up. If not, see: https://www.gnu.org/licenses/
[center]##########################[/center]
Nathan's Dress Up (c) by Anthony Wilcox
Nathan's Dress Up is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
You should have received a copy of the license along with this work.
If not, see <http://creativecommons.org/licenses/by-sa/4.0/>."
text = "Nathan's Dress Up is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Nathan's Dress Up is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Nathan's Dress Up. If not, see: https://www.gnu.org/licenses/
##########################
Nathan's Dress Up (c) by Anthony Wilcox
Nathan's Dress Up is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
You should have received a copy of the license along with this work.
If not, see <http://creativecommons.org/licenses/by-sa/4.0/>."

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://styles/DressUpTheme.res" type="Theme" id=1]
[ext_resource path="res://src/PauseScn.gd" type="Script" id=2]
[ext_resource path="res://src/PauseScn.cs" type="Script" id=2]
[node name="WinDialogs" type="Control"]
anchor_left = 0.5
@ -148,58 +148,6 @@ margin_right = 65.0
margin_bottom = 24.0
text = "KMUS"
align = 1
[node name="LicenseWin" type="AcceptDialog" parent="."]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -202.0
margin_top = -137.5
margin_right = 202.0
margin_bottom = 137.5
window_title = "KLIC"
resizable = true
[node name="LicenseTxt" type="RichTextLabel" parent="LicenseWin"]
anchor_left = 0.5
anchor_right = 0.5
margin_left = -194.0
margin_top = 8.0
margin_right = 194.0
margin_bottom = 238.0
bbcode_enabled = true
bbcode_text = "Nathan's Dress Up is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Nathan's Dress Up is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Nathan's Dress Up. If not, see: https://www.gnu.org/licenses/
[center]##########################[/center]
Nathan's Dress Up (c) by Anthony Wilcox
Nathan's Dress Up is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
You should have received a copy of the license along with this work.
If not, see <http://creativecommons.org/licenses/by-sa/4.0/>."
text = "Nathan's Dress Up is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Nathan's Dress Up is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Nathan's Dress Up. If not, see: https://www.gnu.org/licenses/
##########################
Nathan's Dress Up (c) by Anthony Wilcox
Nathan's Dress Up is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
You should have received a copy of the license along with this work.
If not, see <http://creativecommons.org/licenses/by-sa/4.0/>."
[connection signal="pressed" from="PauseWin/PauseVbox/SettingsBtn" to="." method="_on_SettingsBtn_pressed"]
[connection signal="pressed" from="PauseWin/PauseVbox/ResumeBtn" to="." method="_on_ResumeBtn_pressed"]
[connection signal="pressed" from="PauseWin/PauseVbox/ExitBtn" to="." method="_on_ExitBtn_pressed"]

View file

@ -1,9 +1,9 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://src/TitleScn.gd" type="Script" id=1]
[ext_resource path="res://src/TitleScn.cs" type="Script" id=1]
[ext_resource path="res://styles/DressUpTheme.res" type="Theme" id=2]
[ext_resource path="res://sprites/title.svg" type="Texture" id=3]
[ext_resource path="res://scn/PauseScn.tscn" type="PackedScene" id=4]
[ext_resource path="res://scn/LicenseWin.tscn" type="PackedScene" id=4]
[node name="Start" type="Node"]
script = ExtResource( 1 )
@ -50,56 +50,7 @@ margin_right = 136.0
margin_bottom = 71.0
text = "KLIC"
[node name="ModePanel" type="WindowDialog" parent="MenuRf"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -73.0
margin_top = -46.0
margin_right = 73.0
margin_bottom = 46.0
[node name="PlayVbox" type="VBoxContainer" parent="MenuRf/ModePanel"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 5.0
margin_top = 5.0
margin_right = -5.0
margin_bottom = -5.0
[node name="ModeLbl" type="Label" parent="MenuRf/ModePanel/PlayVbox"]
margin_right = 136.0
margin_bottom = 14.0
text = "KGMO"
align = 1
[node name="ModernBtn" type="Button" parent="MenuRf/ModePanel/PlayVbox"]
margin_top = 18.0
margin_right = 136.0
margin_bottom = 38.0
text = "Modern"
[node name="ClassicBtn" type="Button" parent="MenuRf/ModePanel/PlayVbox"]
margin_top = 42.0
margin_right = 136.0
margin_bottom = 62.0
text = "KCLS"
[node name="WinDialogs" parent="." instance=ExtResource( 4 )]
margin_left = 97.0
margin_top = 37.0
margin_right = 97.0
margin_bottom = 37.0
[node name="Version" type="Label" parent="."]
margin_left = 950.908
margin_top = 568.64
margin_right = 990.908
margin_bottom = 582.64
text = "Version"
[node name="LicenseWin" parent="." instance=ExtResource( 4 )]
[connection signal="pressed" from="MenuRf/StartVbox/PlayBtn" to="." method="_on_PlayBtn_pressed"]
[connection signal="pressed" from="MenuRf/StartVbox/CreditsBtn" to="." method="_on_CreditsBtn_pressed"]
[connection signal="pressed" from="MenuRf/StartVbox/LicenseBtn" to="." method="_on_LicenseBtn_pressed"]
[connection signal="pressed" from="MenuRf/ModePanel/PlayVbox/ModernBtn" to="." method="_on_ModernBtn_pressed"]
[connection signal="pressed" from="MenuRf/ModePanel/PlayVbox/ClassicBtn" to="." method="_on_ClassicBtn_pressed"]

View file

@ -4,5 +4,5 @@ extends Node
func _process(delta):
if Input.is_action_pressed("ui_pause"):
GameKit.is_game_paused(true)
# GameKit.is_game_paused(true)
$WinDialogs/PauseWin.show()

View file

@ -1,4 +0,0 @@
extends Node
func _ready():
$Version.text = GameKit.version

View file

@ -1,21 +0,0 @@
# Anthony Wilcox licenses this file to you under the GPL license.
# See the LICENSE file in the project root for more information.
extends Node
var version = "2.0"
func is_game_paused(is_paused):
if is_paused == true:
get_tree().paused = true
else:
get_tree().paused = false
func switch_scenes(new_mode):
if new_mode == "classic":
get_tree().change_scene("res://scn/ClassicScn.tscn")
elif new_mode == "credits":
get_tree().change_scene("res://scn/CreditsScn.tscn")
elif new_mode == "play":
get_tree().change_scene("res://scn/GameScn.tscn")
elif new_mode == "title":
get_tree().change_scene("res://scn/TitleScn.tscn")

129
project/src/GameScn.cs Normal file
View file

@ -0,0 +1,129 @@
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
using Godot;
public enum ClothingLayer
{
Shirts,
Pants,
Undies,
Accessory
}
public class GameScn : Node
{
void ChangeClothes(string path, ClothingLayer clothingLayer)
{
var texture = ResourceLoader.Load<Texture>($"res://sprites/{path}");
switch (clothingLayer)
{
case ClothingLayer.Shirts:
var top = GetNode<Sprite>("Nathan/Top");
top.Texture = texture;
break;
case ClothingLayer.Pants:
var bottom = GetNode<Sprite>("Nathan/Bottom");
bottom.Texture = texture;
break;
case ClothingLayer.Undies:
var undies = GetNode<Sprite>("Nathan/Undies");
undies.Texture = texture;
break;
case ClothingLayer.Accessory:
var accessory = GetNode<Sprite>("Nathan/Accessory");
accessory.Texture = texture;
break;
}
}
void ChangeClothes(ClothingLayer clothingLayer)
{
var blankTopPath = "tops_placeholder.png";
var blankBottomPath = "bottoms_placeholder.png";
switch (clothingLayer)
{
case ClothingLayer.Shirts:
ChangeClothes(blankTopPath, ClothingLayer.Shirts);
break;
case ClothingLayer.Pants:
ChangeClothes(blankBottomPath, ClothingLayer.Pants);
break;
case ClothingLayer.Accessory:
ChangeClothes(blankTopPath, ClothingLayer.Accessory);
break;
}
}
TextureButton ClothesButton(string path, ClothingLayer clothingType)
{
switch (clothingType)
{
case ClothingLayer.Accessory:
return GetNode<TextureButton>($"Clothes/Wordrobe/Accessoires/AccsGrid/{path}");
case ClothingLayer.Undies:
return GetNode<TextureButton>($"Clothes/Wordrobe/Underwear/UndiesGrid/{path}");
default:
case ClothingLayer.Pants:
return GetNode<TextureButton>($"Clothes/Wordrobe/Pants/PantsGrid/{path}");
case ClothingLayer.Shirts:
return GetNode<TextureButton>($"Clothes/Wordrobe/Shirts/ShirtsGrid/{path}");
}
}
public override void _Process(float delta)
{
// Accessories
// ====================================================
if (ClothesButton("CanonCam", ClothingLayer.Accessory).Pressed)
ChangeClothes("camera.png", ClothingLayer.Accessory);
//if (ClothesButton("RemoveAccessory", ClothingLayer.Accessory).Pressed)
// ChangeClothes(ClothingLayer.Accessory);
// Pants
// ====================================================
if (ClothesButton("Jeans", ClothingLayer.Pants).Pressed)
ChangeClothes("jeans.svg", ClothingLayer.Pants);
if (ClothesButton("Sweats", ClothingLayer.Pants).Pressed)
ChangeClothes("sweat_pants.svg", ClothingLayer.Pants);
if (ClothesButton("BeatUpJeans", ClothingLayer.Pants).Pressed)
ChangeClothes("beat_up_jeans.svg", ClothingLayer.Pants);
if (ClothesButton("BlueCamoJeans", ClothingLayer.Pants).Pressed)
ChangeClothes("blue_camo_jeans.svg", ClothingLayer.Pants);
//if (ClothesButton("RemovePants", ClothingLayer.Pants).Pressed)
// ChangeClothes(ClothingLayer.Pants);
// Underwear
// ====================================================
if (ClothesButton("Briefs", ClothingLayer.Undies).Pressed)
ChangeClothes("briefs.svg", ClothingLayer.Undies);
if (ClothesButton("ZBriefs", ClothingLayer.Undies).Pressed)
ChangeClothes("z_briefs.svg", ClothingLayer.Undies);
if (ClothesButton("Fundosi", ClothingLayer.Undies).Pressed)
ChangeClothes("fundosi.svg", ClothingLayer.Undies);
if (ClothesButton("OwOCensor", ClothingLayer.Undies).Pressed)
ChangeClothes("owo_censor.svg", ClothingLayer.Undies);
// Shirts
// ====================================================
if (ClothesButton("TrainHoodie", ClothingLayer.Shirts).Pressed)
ChangeClothes("train_hoodie.svg", ClothingLayer.Shirts);
if (ClothesButton("Sweatshirt", ClothingLayer.Shirts).Pressed)
ChangeClothes("old_sweatshirt.svg", ClothingLayer.Shirts);
}
}

View file

@ -1,95 +0,0 @@
# Anthony Wilcox licenses this file to you under the GPL license.
# See the LICENSE file in the project root for more information.
extends "res://src/GameKit.gd"
# Default clothing
onready var bottoms = load("res://sprites/bottoms_placeholder.png")
onready var tops = load("res://sprites/tops_placeholder.png")
onready var accessory = load("res://sprites/tops_placeholder.png")
# ZC's Dress Up was stylized to be cute, not adult.
# Underwear cam be suggestive but never lewd.
onready var undies = load("res://sprites/briefs.svg")
func change_bottoms(new_bottom):
bottoms = new_bottom
if new_bottom == null:
$Nathan/Bottom.texture = bottoms
if undies == load("res://sprites/owo_censor.svg"):
change_undies(null)
$Nathan/Bottom.texture = bottoms
func change_undies(new_undies):
undies = new_undies
$Nathan/Undies.texture = undies
func change_tops(new_top):
tops = new_top
if new_top == null:
$Nathan/Top.texture = tops
$Nathan/Top.texture = tops
func change_accessoires(new_accessory):
accessory = new_accessory
if new_accessory == null:
$Nathan/Accessory.texture = accessory
$Nathan/Accessory.texture = accessory
# warning-ignore:unused_argument
func _process(delta):
# Change clothes
# ===========================================================
if $Clothes/Wordrobe/Accessoires/AccsGrid/CanonCam.is_pressed():
change_accessoires(load("res://sprites/camera.png"))
if $Clothes/Wordrobe/Pants/PantsGrid/Jeans.is_pressed():
change_bottoms(load("res://sprites/jeans.svg"))
if $Clothes/Wordrobe/Pants/PantsGrid/Sweats.is_pressed():
change_bottoms(load("res://sprites/sweat_pants.svg"))
if $Clothes/Wordrobe/Pants/PantsGrid/BeatUpJeans.is_pressed():
change_bottoms(load("res://sprites/beat_up_jeans.svg"))
if $Clothes/Wordrobe/Underwear/UndiesGrid/Briefs.is_pressed():
change_undies(load("res://sprites/briefs.svg"))
if $Clothes/Wordrobe/Underwear/UndiesGrid/ZBriefs.is_pressed():
change_undies(load("res://sprites/z_briefs.svg"))
if $Clothes/Wordrobe/Underwear/UndiesGrid/Fundosi.is_pressed():
change_undies(load("res://sprites/fundosi.svg"))
if $Clothes/Wordrobe/Underwear/UndiesGrid/OwOCensor.is_pressed():
change_bottoms(null)
change_undies(load("res://sprites/owo_censor.svg"))
if $Clothes/Wordrobe/Pants/PantsGrid/BlueCamoJeans.is_pressed():
change_bottoms(load("res://sprites/blue_camo_jeans.svg"))
if $Clothes/Wordrobe/Shirts/ShirtsGrid/TrainHoodie.is_pressed():
change_tops(load("res://sprites/train_hoodie.svg"))
if $Clothes/Wordrobe/Shirts/ShirtsGrid/Sweatshirt.is_pressed():
change_tops(load("res://sprites/old_sweatshirt.svg"))
# Remove clothes
# ===========================================================
if $Clothes/Wordrobe/Accessoires/AccsGrid/RemoveAccessory.is_pressed():
change_accessoires(null)
if $Clothes/Wordrobe/Shirts/ShirtsGrid/RemoveShirt.is_pressed():
change_tops(null)
if $Clothes/Wordrobe/Pants/PantsGrid/RemovePants.is_pressed():
change_bottoms(null)

43
project/src/PauseScn.cs Normal file
View file

@ -0,0 +1,43 @@
using Godot;
public class PauseScn : Control
{
void IsGamePaused(bool isPaused)
{
if (isPaused)
GetTree().Paused = true;
else
GetTree().Paused = false;
}
public override void _Ready()
{
}
public override void _Process(float delta)
{
if (Input.IsActionPressed("ui_pause"))
{
GetNode<Popup>("PauseWin").Show();
IsGamePaused(true);
}
}
void _on_ExitBtn_pressed()
{
IsGamePaused(false);
GetTree().ChangeScene("res://scn/TitleScn.tscn");
}
void _on_SettingsBtn_pressed()
{
GetNode<Popup>("SettingsWin").Show();
}
void _on_ResumeBtn_pressed()
{
GetNode<Popup>("PauseWin").Hide();
IsGamePaused(false);
}
}

View file

@ -1,34 +0,0 @@
# Anthony Wilcox licenses this file to you under the GPL license.
# See the LICENSE file in the project root for more information.
extends Node
func _process(delta):
if Input.is_action_just_pressed("ui_pause"):
$PauseWin.show()
GameKit.is_game_paused(true)
func _on_ExitBtn_pressed():
GameKit.is_game_paused(false)
GameKit.switch_scenes("title")
func _on_SettingsBtn_pressed():
$SettingsWin.show()
func _on_CreditsBtn_pressed():
GameKit.switch_scenes("credits")
func _on_LicenseBtn_pressed():
$LicenseWin.show()
func _on_CloseAbtBtn_pressed():
$AboutWin.hide()
func _on_MusicBtn_toggled(button_pressed):
if button_pressed == true:
$Music.playing = true
else:
$Music.playing = false
func _on_ResumeBtn_pressed():
$PauseWin.hide()
GameKit.is_game_paused(false)

27
project/src/Soundtrack.cs Normal file
View file

@ -0,0 +1,27 @@
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
using Godot;
public class Soundtrack : AudioStreamPlayer
{
public override void _Ready () {
//Connect ("finished", this, "PlayRandomSong");
//PlayRandomSong();
}
void PlayRandomSong () {
var rand = new RandomNumberGenerator();
rand.Randomize ();
var tracks = new string[] {
"reminiscing",
"together_again",
"at_the_lake",
"mushrooms",
};
var index = rand.RandiRange(0, tracks.Length);
var audiostream = ResourceLoader.Load<AudioStream>($"res://music/{tracks[index]}.ogg");
Stream = audiostream;
Play();
}
}

View file

@ -1,22 +0,0 @@
# Anthony Wilcox licenses this file to you under the GPL license.
# See the LICENSE file in the project root for more information.
extends AudioStreamPlayer
const tracks = [
'reminiscing',
'together_again',
'at_the_lake',
'mushrooms',
]
func _ready():
connect("finished", self, "play_random_song")
play_random_song()
func play_random_song():
randomize()
var rand_db = randi() % tracks.size()
var audiostream = load('res://music/' + tracks[rand_db] + '.ogg')
stream = audiostream
play()

18
project/src/TitleScn.cs Normal file
View file

@ -0,0 +1,18 @@
// Anthony Wilcox licenses this file to you under the GPL license.
// See the LICENSE file in the project root for more information.
using Godot;
public class TitleScn : Node {
void _on_PlayBtn_pressed() {
GetTree().ChangeScene("res://scn/GameScn.tscn");
}
void _on_CreditsBtn_pressed() {
GetTree().ChangeScene("res://scn/CreditsScn.tscn");
}
void _on_LicenseBtn_pressed()
{
GetNode<Popup>("LicenseWin").Show();
}
}

View file

@ -1,21 +0,0 @@
# Anthony Wilcox licenses this file to you under the GPL license.
# See the LICENSE file in the project root for more information.
extends Node
func _ready():
$Version.text = GameKit.version
func _on_ClassicBtn_pressed():
GameKit.switch_scenes("classic")
func _on_ModernBtn_pressed():
GameKit.switch_scenes("play")
func _on_CreditsBtn_pressed():
GameKit.switch_scenes("credits")
func _on_LicenseBtn_pressed():
$WinDialogs/LicenseWin.show()
func _on_PlayBtn_pressed():
GameKit.switch_scenes("play")