添加项目文件。
This commit is contained in:
commit
715524a666
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
.idea/
|
||||
.vs/
|
||||
.vscode/
|
||||
.fleet/
|
||||
# Ignore the Android build directory
|
||||
android/
|
||||
export_presets.cfg
|
||||
*.translation
|
||||
*.user
|
||||
AppConfig.yaml
|
||||
ColdMint.Traveler.csproj.old
|
21
ColdMint.Traveler.csproj
Normal file
21
ColdMint.Traveler.csproj
Normal file
|
@ -0,0 +1,21 @@
|
|||
<Project Sdk="Godot.NET.Sdk/4.3.0">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net7.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'ios' ">net8.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
<RootNamespace>ColdMint</RootNamespace>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>12</LangVersion>
|
||||
|
||||
<StartAction>Program</StartAction>
|
||||
<StartProgram>D:\Godot_v4.3-stable_mono_win64\Godot_v4.3-stable_mono_win64.exe</StartProgram>
|
||||
<StartArguments>--path $(SolutionDir) > godot.log</StartArguments>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2024.2.0" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.1.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="6.0.29" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.10" />
|
||||
</ItemGroup>
|
||||
</Project>
|
19
ColdMint.Traveler.sln
Normal file
19
ColdMint.Traveler.sln
Normal file
|
@ -0,0 +1,19 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColdMint.Traveler", "ColdMint.Traveler.csproj", "{73860AFB-EAF0-42BE-B373-073DC6417BDA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
ExportDebug|Any CPU = ExportDebug|Any CPU
|
||||
ExportRelease|Any CPU = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
|
||||
{73860AFB-EAF0-42BE-B373-073DC6417BDA}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
2
ColdMint.Traveler.sln.DotSettings
Normal file
2
ColdMint.Traveler.sln.DotSettings
Normal file
|
@ -0,0 +1,2 @@
|
|||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=packsack/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
BIN
Godot_v4.3-stable_mono_win64.20241206-095159-359.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-095159-359.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-095215-094.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-095215-094.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-100229-635.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-100229-635.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-100900-973.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-100900-973.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-100938-233.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-100938-233.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-101350-223.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-101350-223.log
Normal file
Binary file not shown.
BIN
Godot_v4.3-stable_mono_win64.20241206-101419-819.log
Normal file
BIN
Godot_v4.3-stable_mono_win64.20241206-101419-819.log
Normal file
Binary file not shown.
674
LICENSE
Normal file
674
LICENSE
Normal file
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program 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.
|
||||
|
||||
This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
275
LICENSE_JA
Normal file
275
LICENSE_JA
Normal file
|
@ -0,0 +1,275 @@
|
|||
GNU 一般公衆利用許諾書(GNU GENERAL PUBLIC LICENSE)
|
||||
バージョン3、2007年6月29日
|
||||
|
||||
日本語訳、2018年8月21日
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
(訳: 本ライセンス文書を、一字一句忠実に複製、頒布することは許可する。しかし変更は認めない。)
|
||||
|
||||
This is an unofficial translation of the GNU General Public License into Japanese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL–only the original English text of the GNU GPL does that. However, we hope that this translation will help Japanese speakers understand the GNU GPL better.
|
||||
|
||||
(訳: 以下は GNU General Public License の非公式な日本語訳です。これはフリーソフトウェア財団(Free Software Foundation)によって正式に発表されたものではなく、GNU GPL が適用されたソフトウェアの頒布条件を法的に有効な形で述べたものではありません。頒布条件としては、GNU GPL の英語版テキストで指定されているもののみが有効です。しかしながら、私たちはこの翻訳が、日本語を使用する人々にとって GNU GPL をより良く理解する助けとなることを望んでいます。)
|
||||
|
||||
You may publish this translation, modified or unmodified, only under the terms at https://www.gnu.org/licenses/translations.html.
|
||||
|
||||
(訳: あなたはこの翻訳を、改変の有無を問わず、https://www.gnu.org/licenses/translations.html に記載された条件の下でのみ公開することができます。)
|
||||
|
||||
翻訳は八田真行 mhatta@gnu.org が行った。原文は https://www.gnu.org/licenses/gpl.txt である。誤訳の指摘や訳の改善案を歓迎する。なお、日本語訳の利用条件は原文に準ずる。
|
||||
|
||||
日本語訳を用意するに当たっては、独立行政法人 情報処理推進機構(IPA)の支援を得た。
|
||||
|
||||
はじめに
|
||||
GNU 一般公衆利用許諾書は、ソフトウェアやその他の種類の著作物のための、フリーかつコピーレフトを主張するライセンスです。
|
||||
|
||||
ソフトウェアやその他の実用的著作物向けのライセンスの大半は、あなたから著作物を共有したり変更したりする自由を奪い去るよう設計されています。それらとは対照的に、GNU 一般公衆利用許諾書は、あなたに対してあるプログラムの全てのバージョンを共有、変更する自由を保証すること、すなわち、そのソフトウェアがそのユーザすべてにとってフリーでありつづけることを保証することを目的としています。私たちフリーソフトウェア財団(Free SoftwareFoundation)は、GNU 一般公衆利用許諾書を私たちのソフトウェアの大半に適用しています。その作者が私たちと同様の方法で公開するならば、他のいかなる著作物にも適用することが可能です。もちろん、あなたのプログラムにも適用することができます。
|
||||
|
||||
私たちがフリーソフトウェアについて語るとき、私たちは自由について言及しているのであって、価格は問題にしていません。私たちが用意した一般公衆利用許諾書の数々は、フリーソフトウェアのコピーを頒布する(そして希望によっては頒布に際して手数料を要求する)自由をあなたに保証すべく設計されています。すなわち、ソースコードを受領するか、望めばそれを手に入れられるということ、ソフトウェアを変更し、その一部を新たなフリープログラムで利用することができるということ、そしてこうしたことが可能であることをあなたが知っているということが保証されるのです。
|
||||
|
||||
(訳注: GNU GPL 以外の一般公衆利用許諾書として、GNU AGPL と GNU LGPL が用意されている。)
|
||||
|
||||
あなたの権利を守るため、私たちは誰か他人が上記のようなあなたの権利を否定したり、権利を放棄するように求めることを防ぐ必要があります。そこで、あなたがソフトウェアのコピーを頒布したり改変したりする場合、あなたにはある種の責任が発生します。それは、他人の自由を尊重するという責任です。たとえば、本許諾書が適用されたプログラムのコピーをあなたが頒布する場合、それが無料であろうと手数料を取る場合であろうと、あなたは受領者たちに、あなた自身が受け取ったのと同じ自由を渡さなければなりません。あなたは、彼らもまた、ソースコードを受領するか後に得られることを保証しなければなりません。そしてあなたは、彼らに本許諾書の条項を示し、彼らの権利について彼らに知らしめなければなりません。
|
||||
|
||||
GNU GPL を利用する開発者は、あなたの権利を2段階の手順を踏んで守ります。その手順とは、(1)ソフトウェアに著作権を主張し、(2)あなたに本許諾書を提示して、ソフトウェアを複製、頒布、または改変する法的な許可を与える、というものです。
|
||||
|
||||
開発者や作者を守るため、GPL では、このフリーソフトウェアには何の保証もないということを明確に説明しています。ユーザと開発者両方の便宜のため、GPL では改変されたバージョンには変更された旨を印づけるよう要求しており、改変されたバージョンの問題が、誤って以前のバージョンの作者に帰せられることがないようにしています。
|
||||
|
||||
一部の機器は、それらに収録されたソフトウェアを改変した上で再びインストールしたり、実行したりするために必要なアクセスを、製造者には拒否しないにもかわらずユーザに対しては拒否するよう設計されています。これは、ユーザが自らの有するソフトウェアを変更する自由を守るという GPL の目的とは、根本的に相容れません。このような技術の濫用は、往々にして個人使用向けの製品の分野で見られるものですが、まさにこのような分野こそ、こうした慣行が最も容認しがたいものとなるのです。そこで私たちは、このバージョンの GPL を、そうした製品においてこの種の慣行を禁止するように設計しました。もし同種の問題が他の領域にまで相当程度広がってきた場合には、私たちはユーザの自由を守るためのに必要とされるだけ、GPL の将来のバージョンにおいてこの規定をそうした領域にも拡大すべく準備を整えています。
|
||||
|
||||
最後に、すべてのプログラムはソフトウェア特許によって絶え間なく脅かされています。およそ国家は、特許が汎用コンピュータにおけるソフトウェアの開発と利用を制限することを認めるべきではありません。しかし、そういったことを認めてしまっている地域においては、私たちは、特許がフリーなプログラムに適用され、実質的にプログラムがプロプライエタリにされてしまうという特別な脅威を避けたいと思います。こうした事態を防ぐために、GPL では、プログラムを非フリーとするために特許を使うことはできないということを保証します。
|
||||
|
||||
(訳注: 本許諾書で「プロプライエタリ(proprietary)」とは、ソフトウェアの利用や再頒布、改変が禁止されているか、許可を得ることが必要とされているか、あるいは厳しい制限が課せられていて自由にそうすることが事実上できなくなっている状態のことを指す。詳しくは https://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftware を参照せよ。)
|
||||
|
||||
複製、頒布、改変に関する正確な利用条件は以下で述べていきます。
|
||||
|
||||
利用条件 (TERMS AND CONDITIONS)
|
||||
0. 定義
|
||||
「本許諾書」(The License)とは、GNU 一般公衆利用許諾書のバージョン3を指す。
|
||||
|
||||
「『コピーライト』」(Copyright)とは、いわゆる著作権のみならず、半導体マスクのようなその他の作品に適用される、著作権に類似した法的権利をも意味する。
|
||||
|
||||
(訳注: この規定により、本許諾書は著作権法で保護されたいわゆる「著作物」よりも広い範囲をカバーすることになる。よってこの訳のライセンス本文中においては、work(s) に「著作物」ではなく「作品」という訳語を宛てることにした。)
|
||||
|
||||
「『プログラム』」(The Program)とは、本許諾書の下でライセンスされた、『コピーライト』が主張可能な作品すべてを意味する。個々のライセンシーは「あなた」として表現される。ライセンシーは個人でも組織でも構わない。
|
||||
|
||||
ある作品の「改変」(modify)とは、その作品の全体ないし一部を、『コピーライト』の許可を必要とするようなやり方で複製ないし翻案することを意味する。ただし、完全に同一なコピーを作成する場合は除く。改変の結果出来た作品は、以前の作品の「改変されたバージョン」(modified version)、または、以前の作品を「基にした」(based on)作品と呼ばれる。
|
||||
|
||||
「『保護された作品』」(covered work)とは、改変されていない『プログラム』か、『プログラム』を基にした作品のいずれかを指す。
|
||||
|
||||
ある作品の「普及」(propagate)とは、コンピュータ上で実行すること、または私的なコピーを改変することを除き、適用可能な『コピーライト』法規の下で許可無く行うと、権利侵害として、直接的、あるいは間接的にあなたが責任を問われる何らかの行為を意味する。普及には、複製、頒布(改変の有無を問わない)、公衆への利用可能化が含まれ、またいくつかの国々では他の活動も含まれる可能性がある。
|
||||
|
||||
ある作品の「伝達」(convey)とは、第三者がコピーを作成ないし受領するのを可能とする普及行為すべてを意味する。ただし、コンピュータネットワーク越しにユーザとやりとりするだけで、コピーの転送は伴わない場合は、伝達ではない。対話的なユーザインターフェースが「『適切な法的告知』」(Appropriate Legal Notices)を表示するという場合、そのインターフェースは(1)適切な『コピーライト』告知を表示し、(2)ユーザに対して、その作品には何の保証もない(別途保証が提供されている場合は除く)ということ、ライセンシーはその作品を本許諾書の下で伝達できるということ、そして本許諾書のコピーを見るにはどうしたらよいかということを便利かつ顕著に視認できるような機能を含むものとする。もしインターフェースが、メニューのようなユーザコマンドやオプションの一覧を表示するならば、その一覧中には上記の基準を満たすようなアイテムが目立つように含まれていなければならない。
|
||||
|
||||
1. ソースコード
|
||||
ある作品の「ソースコード」(source code)とは、その作品に改変を加えるに当たって好ましいと考えられる形式のことである。「オブジェクトコード」(object code)とは、作品がとりうるソースコード以外の形式すべてを意味する。
|
||||
|
||||
「標準インターフェース」(Standard Interface)とは、標準化団体として認知された組織によって定義された公式な標準か、ある特定のプログラミング言語向けに指定されたインターフェースの場合には、その言語を利用する開発者の間で広く使われているインターフェースのことを指す。
|
||||
|
||||
実行可能な作品の「『システムライブラリ』」(System Libraries)とは、(a)「主要コンポーネント」(Major Component)の頒布物に通常含まれるが、その主要コンポーネントの一部ではなく、かつ(b) 作品をその「主要コンポーネント」といっしょに利用することを可能にする、あるいは公衆にとってソースコード形式で利用可能な実装がひとつは存在する標準インターフェースを提供するためにのみ機能するものすべてを意味する。ただし、全体としての作品そのものは除く。ここでいう「主要コンポーネント」とは、実行可能な作品がその上で実行されるある特定のオペレーティングシステム(そういったものが必要ならば)の主要で不可欠な一部分(カーネルやウィンドウシステムなど)、あるいはその作品を作成するのに使われるコンパイラ、実行するのに使われるオブジェクトコードインタプリタなどを意味する。
|
||||
|
||||
オブジェクトコード形式の作品に「『対応するソース』」(Corresponding Source)とは、その作品を生成、インストール、(実行可能な作品に関しては)オブジェクトコードを実行、または作品を改変する上で必要とされるソースコードのすべてを意味する。この場合、そうした活動をコントロールするためのスクリプトは『対応するソース』に含まれるが、その作品にとっての『システムライブラリ』や、先ほど列挙した活動を行う上で改変されることなく利用されるものの作品の一部ではない、汎用のツールや一般的に利用可能なフリープログラムは除外される。例えば『対応するソース』には、その作品のソースファイルと連携するインターフェース定義ファイルに加え、共有ライブラリや動的にリンクされた下位プログラムと作品のその他の部分との間での親密なデータのやりとりやコントロールフローなどのために、その作品が設計上明確に必要とする、そうした共有ライブラリや下位プログラムのソースコードなどが含まれる。
|
||||
|
||||
『対応するソース』には、ユーザが『対応するソース』の他の部分から自動的に再生成できるものを含む必要はない。
|
||||
|
||||
ソースコード形式の作品にとっての『対応するソース』とは、その作品そのものである。
|
||||
|
||||
2. 基本的な許可
|
||||
本許諾書の下で認められるすべての権利は、『プログラム』に主張される『コピーライト』の条項に基づき授与されるものであり、ここで述べられた条件が満たされている限り覆すことはできない。本許諾書は、改変されていない『プログラム』をあなたが無制限に実行することを許可し、明示的に確約する。『保護された作品』を実行することから得られた出力結果は、その出力内容が『保護された作品』を構成する場合のみ本許諾書で保護される。本許諾書は、あなたが有するフェアユースまたはその同等物の権利を、『コピーライト』法規によって提供される通りに承認する。
|
||||
|
||||
その他の状況においてあなたのライセンスが有効である限り、『保護された作品』の、伝達を伴わない作成、実行、および普及は無条件に行うことができる。他者にあなた専用の改変を行わせる、あるいは他者にあなたがそういった作品を実行するための機能を提供させるということが唯一の目的であれば、『保護された作品』を他者に伝達することができる。ただしその場合、あなたが『コピーライト』を支配していない部分すべての伝達に関しては、本許諾書の条項に従わなければならない。従って、あなたのために『保護された作品』を作成または実行する者は、専らあなたのためだけに、あなたの監督と支配の下で、あなたとの関係の範囲外ではあなたが『コピーライト』を有する一部分のいかなるコピーをも作成することを禁止するという条件の下で行わなければならないということになる。
|
||||
|
||||
上記以外のあらゆる状況下においては、伝達は以下で述べる条件の下でのみ許可される。再許諾は認められない。下記第10項により、再許諾は必要ないからである。
|
||||
|
||||
3. ユーザの法的権利を、技術的保護手段の回避を禁ずる法律から守る
|
||||
『保護された作品』は、1996年12月20日に採択されたWIPO著作権条約第11項の下での義務を満たす適用可能な法のいずれか、あるいはそれに類似の法が、回避の禁止または制限の対象として規定する、「効果的な技術的手段」(effective technological measure)の一部として見なされてはならない。
|
||||
|
||||
(訳注: WIPO著作権条約については、http://www.cric.or.jp/db/treaty/wch_index.html 等を参照せよ。)
|
||||
|
||||
あなたが『保護された作品』を伝達する場合、『保護された作品』に関して本許諾書の下で権利を行使することにより、技術的手段の回避に影響が出る範囲において、そのような手段の回避を禁じるいかなる法的権力をも放棄することになる。また、あなたはその作品のユーザに対して、技術的手段の回避を禁じるためにあなたや第三者の法的権利を強制するための手段として、その作品の動作や改変を制限するいかなる意図も否認することになる。
|
||||
|
||||
4. 一字一句忠実なコピーの伝達
|
||||
あなたは、自分が受領した『プログラム』のソースコードと一字一句同じコピーであれば、いかなる媒体でも伝達することができる。ただしその場合、あなたはそれぞれのコピーにおいて、目立つように、かつ適切な形で、ふさわしい『コピーライト』告知を掲載しなければならない。すなわち、本許諾書と、下記第7項に従い追加された非許可的条項のすべてがそのコードに適用される旨の告知を掲載し、あらゆる保証が存在しない旨の告知をすべてそのまま保全し、かつ『プログラム』の受領者すべてに、『プログラム』といっしょにこの許諾書のコピーを与えなければならない。
|
||||
|
||||
あなたは、自分が伝達するコピーのそれぞれに関していかなる価格を付けても良いし、無料で伝達しても構わない。また、報酬を取ってサポートや保証保護(warranty protection)を提供しても良い。
|
||||
|
||||
5. 改変されたバージョンのソースの伝達
|
||||
あなたは、『プログラム』を基にした作品、あるいはそうした作品を『プログラム』から作成するための改変点を、上記第4項の規定に従ってソースコード形式で伝達することができる。ただしその場合、あなたは以下に示す条件のすべてを満たさなければならない:
|
||||
|
||||
a) 作品には、あなたが作品を改変したということと、改変に関連した日時を記述した告知を目立つように載せなければならない。
|
||||
b) 作品には、それが本許諾書と、下記第7項に従って追加された条件すべての下で公開されていることを記述した告知を目立つように載せなければならない。この条件は、上記第4項における「告知をすべてそのまま保全」するための条項を改変する。
|
||||
c) 作品の全部分を、総体として、コピーを所有するに至った人全員に、本許諾書の下でライセンスしなければならない。そこで、本許諾書は、本許諾書第7項に基づく適用可能な追加的条項のすべてとともに、作品全体に、すなわちその全部分に、それらがどのようにパッケージされているかに関わらず適用されることになる。本許諾書は、これ以外のやり方には作品をライセンスする許可を与えないが、あなたが本許諾書以外で別途許可を得ていた場合には、それによって得られた許可まで無効とするものではない。
|
||||
d) 改変された作品が対話的なユーザインターフェースを有する場合、それらのインターフェースは『適切な法的告知』を表示しなければならない。ただし、『プログラム』に元々『適切な法的告知』を表示しない対話的なインターフェースがある場合、あなたの作品で表示するようにする必要はない。
|
||||
一巻の記憶装置の中か頒布媒体上で、『保護された作品』と、本来『保護された作品』の拡張ではなく、『保護された作品』とより大規模なプログラムを形成するような形で結合されているわけでもないその他の分離かつ独立した作品とをまとめた編集物は、編集作業とそれに由来する『コピーライト』が、個々の作品が許可する範囲を越えて編集物のユーザの作品へのアクセスや法的権利を制限するのに使われない限り、「集積物」(aggregate)と呼ばれる。単に『保護された作品』を集積物に含めるだけでは、その集積物の他の部分にまで本許諾書が適用されるということにはならない。
|
||||
|
||||
6. ソース以外の形式における伝達
|
||||
あなたは、オブジェクトコード形式の『保護された著作物』を、上記第4項および第5項の規定に従って伝達することができる。ただしその場合、あなたは機械読み取り可能な『対応するソース』も本許諾書の条件に従って、以下のいずれかの方法で伝達しなければならない。
|
||||
|
||||
a) オブジェクトコードを物理的製品(物理的頒布媒体を含む)で、あるいはそれに組み込んで伝達する。その際、『対応するソース』を、ソフトウェアのやりとりで一般的に使われる耐久性のある物理的媒体に固定していっしょに頒布する。
|
||||
b) オブジェクトコードを物理的製品(物理的頒布媒体を含む)で、あるいはそれに組み込んで伝達する。その際、最低でも3年間、あるいはあなたがその製品モデルに補修用部品やカスタマーサポートを提供する限り有効な、書面による申し出を添付する。その申し出には、(1)オブジェクトコードを所有する者すべてに対して、その製品に含まれるソフトウェアのうち本許諾書で保護されるものすべてに『対応するソース』のコピーを、ソフトウェアのやりとりで一般的に使われる耐久性のある物理的媒体で頒布する旨を記載する。その際、物理的にこのソースの伝達を行うのにかかる正当なコスト以上の価格を要求してはならない。あるいは、(2)『対応するソース』を無料でネットワークサーバから複製するためのアクセスを提供する旨を記載する。
|
||||
c) オブジェクトコードの個々のコピーを、対応するソースを提供するという書面による申し出のコピーといっしょに伝達する。この選択肢は特別な場合、かつ非商業的な場合のみに、そしてあなたがオブジェクトコードを上記小項 6b に合致した申し出といっしょに受領した場合にのみに認められる。
|
||||
d) オブジェクトコードを、指定の場所から複製するためのアクセスを提供することによって伝達し、対応するソース』に対しても同じ場所を通じて同じ方法で複製するための同等のアクセスを提供する。伝達は無料でも手数料を課しても構わないが、『対応するソース』に対して追加的な課金を行ってはならない。受領者に対して、『対応するソース』をオブジェクトコードといっしょに複製することを義務づける必要はない。オブジェクトコードの複製元がネットワークサーバの場合、対応するソースは同等の複製機能をサポートする異なったサーバ(あなたか第三者が運営)上にあっても良い。その場合、オブジェクトコードの傍らに、『対応するソース』はどこで見つけられるかを明確に指示しておかなければならない。どのサーバが『対応するソース』をホストするかに関わらず、あなたは『対応するソース』がこれらの条項を満たすために必要なかぎり利用可能であることを保証する責任がある。
|
||||
e) オブジェクトコードをピア・ツー・ピア伝送を使って伝達する。ただしこの場合、あなたは上記小項 6d に従い、その作品のオブジェクトコードと『対応するソース』がどこで一般公衆に無料で提供されるのかということを他のピアに知らせておかなければならない。
|
||||
オブジェクトコードの分離した一部であり、そのソースコードが『対応するソース』から『システムライブラリ』として除外されているものは、オブジェクトコード作品を伝達する場合に含める必要はない。
|
||||
|
||||
「ユーザ製品」(User Product)とは、(1)「コンシューマ製品」(consumer product)、すなわち、個人、子供、あるいは家庭用に通常使用される有形個人資産すべてか、あるいは(2)居住所における導入を目的に設計ないし販売されるものすべてを指す。ある物品がコンシューマ製品であるかを決定する際疑義がある場合には、極力範囲を広げる方向で決定されるべきである。ここで、ある特定のユーザによって受領されたある特定の製品にとっての「通常使用」(nomally used)とは、その種の製品において典型的な、あるいは一般的な利用のことであり、その特定のユーザが置かれた状況や、その特定のユーザがその製品を実際にどう使っているか、どう使うことを予期しているか、あるいは予期されているかとは関係ない。その製品に相当な商業的、産業的または非コンシューマ的な利用法があったとしても、そうした利用がその製品の唯一重要な利用形態を代表するものでない限り、その製品はコンシューマ製品である。
|
||||
|
||||
ユーザ製品の「『インストール用情報』」(Installation Information)とは、ユーザ製品内の『保護された作品』に関して、『対応するソース』の改変されたバージョンから得られる『保護された作品』の改変されたバージョンを、インストール、実行するために必要な手法、手順、認証キーやその他の情報すべてを意味する。この情報は、改変されたオブジェクトコードの継続的な動作が、改変が為されたということによってのみ拒否されたり妨害されることが決してないことを保証するのに十分なものでなければならない。
|
||||
|
||||
本節の下において、作品をユーザ製品の内で、またはユーザ製品と共に、あるいは特にユーザ製品での利用を念頭においてオブジェクトコードで伝達し、またその伝達がユーザ製品の受領者への所有と利用の権利の永遠ないし有期の移転の一部として起こる場合(移転がどのように行われるかは問わない)、この条項の下で『対応するソース』は『インストール用情報』と共に提供されなければならない。しかしこの条件は、あなたと第三者のいずれもが改変されたオブジェクトコードをユーザ製品にインストールする能力を有していない際には適用されない(例えば、作品がROMにインストールされている場合)。
|
||||
|
||||
『インストール用情報』を提供する条件には、受領者によって改変ないしインストールされた作品、あるいはそうした作品が改変ないしインストールされたユーザ製品に対し、サービスや保証、アップデートを提供しつづけるという条件は含まれない。改変自体がネットワークの運用に実質的かつ有害な影響をもたらし、ネットワークを介したコミュニケーションのプロトコルや規則に違反する場合には、ネットワークアクセスを拒否しても構わない。
|
||||
|
||||
伝達される『対応するソース』や提供される『インストール用情報』が本節を満たすためには、それらが公に文書化された形式で(かつ公衆に対してソースコード形式で利用可能な実装とともに)提供されなければならない。この場合、これらの圧縮展開や読み込み、複製に特別なパスワードやキーを必要としてならない。
|
||||
|
||||
7. 追加的条項
|
||||
「追加的許可」(Additional permissions)とは、本許諾書が課す条件に一つかそれ以上の例外を設けることにより、本許諾書の条項を補足する条項のことである。『プログラム』全体に適用可能な追加的許可は、適用可能な法の下でそれらが有効である限り、あたかもそれらが本許諾書に含まれているかのように扱われなければならない。追加的許可が『プログラム』の一部にのみ適用される場合、その部分に関してはそういった追加的許可の下で別途利用可能だが、『プログラム』全体としては追加的許可に関わりなく本許諾書によってのみ管理される。
|
||||
|
||||
あなたが『保護された作品』のコピーを伝達する場合、あなたは追加的許可をそのコピー、あるいはその一部から削除することを選択できる(追加的許可は、あなたが作品をある種の形で改変する際には、そうした許可自身の削除を要求するような形で書かれてもよい)。あなたは、あなたによって『保護された作品』に追加され、あなたが適切な『コピーライト』許可を有するか、与えることができる限り、その一部分に追加的許可を設定することができる。
|
||||
|
||||
本許諾書の他の条件に関わらず、あなたが『保護された作品』に追加した一部分について(その部分の『コピーライト』保有者らによって正式に許可されていれば)、本許諾書の条項を、以下に示す条項で補足することができる:
|
||||
|
||||
a) 本許諾書第15項および第16項の条項とは異なった形で保証の否認や責任の限定を主張する。あるいは、
|
||||
b) 追加した一部分において、明示的で妥当な法的告知や作者特定の保全、またはそれを含む作品において『適切な法的告知』の表示を要求する。あるいは、
|
||||
c) 追加した一部分の出自を不当に表示することを禁じるか、あるいはそのような一部分の改変されたバージョンはオリジナルのバージョンとは異なっているということを適切な方法で印づけることを要求する。あるいは、
|
||||
d) その一部分のライセンサーや作者の名前を、宣伝目的で利用することを制限する。あるいは、
|
||||
e) 商品名や商標、サービスマークの利用に関して、商標法に従い権利を授与することを拒否する。あるいは、
|
||||
f) その一部分(あるいはその改変されたバージョン)を伝達する者に、受領者への責任に関して契約上の引き受けがあり、そうした責任が直接的にそういったライセンサーや作者にまで課せられる場合、その一部分のライセンサーや作者の免責を要求する。
|
||||
他の非許可的な追加的条項は下記第10項が意味するところの「さらなる権利制限」(further restrictions)とみなされる。あなたが受領した『プログラム』、あるいはその一部に、それが本許諾書とともにさらなる権利制限である条項によっても管理されていると述べた告知が含まれている場合には、あなたはそういった条項を削除して構わない。あるライセンス文書にさらなる権利制限がふくまれているが、しかし本許諾書の下での再許諾や伝達を許可しているならば、あなたはそのライセンス文書の条項によって管理されている一部分を『保護された作品』に追加することができる。ただしその場合、さらなる権利制限はそのような再許諾や伝達では無効としなければならない。
|
||||
|
||||
あなたが本節に従って『保護された著作物』に条項を追加した場合、あなたは関係するソースファイル中に、それらのファイルに適用される追加的条項に関する声明、あるいは適用可能な条項を見つけることができる場所を示す告知を掲載しなければならない。
|
||||
|
||||
追加的条項は、それが許可的であろうと非許可的であろうと、別途書面化されたライセンスという形式で述べられてもよいし、本許諾書への例外として述べられてもよい。上記の要件はどちらの場合でも適用される。
|
||||
|
||||
8. 終了
|
||||
あなたは『保護された作品』を、本許諾書の下で明示的に提供されている場合を除いて、普及、または改変してはならない。それ以外に『保護された作品』を普及、または改変しようとする試みはすべて無効であり、本許諾書の下であなたに認められた権利(下記第11項の第3段落に従い授与されたパテントライセンスすべてを含む)を自動的に終了させることになる。
|
||||
|
||||
しかしながら、あなたが本許諾書への違反をすべて中止するならば、あなたがある特定の『コピーライト』保有者から得たライセンスは、(a)その『コピーライト』保有者が明白かつ決定的にあなたへのライセンスを終了させるか、あるいはさせないまでは暫定的に、(b)その『コピーライト』保有者が、あなたに対し違反について、何らかの正当な手段によりライセンス停止後60日以内に通知することができなかった場合には永続的に、回復される。
|
||||
|
||||
加えて、あなたがある特定の『コピーライト』保有者から得たライセンスは、その『コピーライト』保有者があなたに対して違反を何らかの正当な手段で通知し、それより前にその『コピーライト』保有者から、(当該作品に限らずその『コピーライト』保有者の作品のいずれかに関して)本許諾書に関する違反の通知を受領したことがなく、さらにあなたがその通知を受領してから30日以内に違反を正した場合、永続的に回復される。
|
||||
|
||||
本節に従いあなたの権利が終了した場合でも、本許諾書に従ってあなたからコピーや権利を受領した当事者が得た許諾は終了しない。あなたの権利が終了され、永続的に回復されなかった場合には、あなたは同じライセンス対象に関し下記第10項に従って新たにライセンスを受領する資格を失うものとする。
|
||||
|
||||
9. コピーの所有に必要とされない受諾
|
||||
あなたは、『プログラム』のコピーを受領あるいは実行するために本許諾書を受諾する必要はない。コピーを受領するためにピア・ツー・ピア伝送を使った結果としてのみ発生する『保護された作品』の付随的な普及も、同様に受諾を必要としない。しかしながら、他の場合においては、本許諾書以外にあなたに対して『保護された作品』の普及や改変をする許可を認めるものはない。これらの行為は、本許諾書を受諾しない限り『コピーライト』を侵害することになる。そこで、『保護された作品』を改変あるいは普及することにより、あなたはそうした行為を行うために本許諾書を受諾したということを示したことになる。
|
||||
|
||||
10. 下流の受領者への自動的許諾
|
||||
あなたが『保護された作品』を伝達するたびに、受領者は自動的にオリジナルのライセンサーから、本許諾書に従いその作品を実行、改変、普及するライセンスを得る。なお、あなたには第三者が本許諾書に従うことを強制する責任はない。
|
||||
|
||||
「主体取引」(entity transaction)とは、ある組織そのもの、ないしその組織の実質的に全ての資産の支配権が移転するか、あるいは組織の細分化や合併が行われるような取引を指す。もし主体取引の結果として『保護された作品』の普及が起こった場合、作品のコピーを受領したそれぞれの取引当事者は、利害関係のある当事者の先任者から、その先任者が前段落に従って有する、あるいは与えることができる、その作品に関するライセンスもまたすべて受領する。加えて個々の取引当事者は、利害関係のある先任者から、その先任者が有しているか、適正な努力によって得ることが可能な限りにおいて、その作品の『対応するソース』の所有権も得る権利を有する。
|
||||
|
||||
あなたは本許諾書の下で授与された、あるいは確約された権利の行使に対して、本許諾書が規定する以上のさらなる権利制限を課してはならない。たとえば、あなたはライセンス料、ロイヤルティや他の料金を、本許諾書の下で認められている権利の行使に関して課してはならない。また、あなたは『プログラム』やその一部の作成、利用、販売、販売の申し出、取り込みによって何らかのパテントクレームが侵害されたとして、訴訟(訴訟における反対請求ないし反訴を含む)を開始してはならない。
|
||||
|
||||
11. 特許
|
||||
「貢献者」(contributor)とは、本許諾書の下で『プログラム』、あるいは『プログラム』が基にした作品を利用することを正式に許可した『コピーライト』保有者のことを指す。従って、そのようにしてライセンスされた作品は、貢献者による「貢献者バージョン」(contributor version)と呼ばれる。
|
||||
|
||||
ある貢献者の「必須パテントクレーム」(essential patent claims)とは、すでに取得しているか、あるいは今後取得する見込みがあるため、その貢献者が現在所有ないし支配していると言える特許のうち、貢献者バージョンに対して、本許諾書で許可されているような作成や利用、販売といった何らかの形の行為を行うことによって侵害される可能性があるパテントクレームのすべてを意味する。ただし、貢献者バージョンをさらに改変した結果としてのみ侵害されるようなクレームは含まれない。この定義において、「支配」には本許諾書が課す条件と整合的なやり方で特許の再許諾を認める権利も含まれる。
|
||||
|
||||
個々の貢献者はあなたに対して、その貢献者の必須パテントクレームに関し、あなたがその貢献者バージョンの内容を作成、利用、販売、販売の申し出、取り込み、その他実行、改変、普及するために必要な、非排他的で全世界的に有効、かつロイヤルティフリーのパテントライセンスを授与する。
|
||||
|
||||
以下の3段落において「『パテントライセンス』」とは、ある特許を実施しないという明示的な協定やコミットメントのすべてを指す(例えば、ある特許の実施に対する明示的な許可や、特許侵害訴訟を提起しないという誓約など)。そのような『パテントライセンス』をある当事者に「授与」するとは、その当事者と特許を実施しないという協定やコミットメントを結ぶことを意味する。
|
||||
|
||||
もしあなたが、『保護された作品』の伝達を、それがある『パテントライセンス』に依存しており、よってその作品の『対応するソース』は、すべての人にとって、公衆が利用可能なネットワークサーバや他の容易にアクセス可能な手段を通じ、無料かつ本許諾書に従って複製可能ではないということを知りながら行うならば、あなたは(1)『対応するソース』も同様に利用可能にするか、(2)この特定の作品に関して『パテントライセンス』から得られる便益を自ら剥奪するか、あるいは(3)下流の受領者に対しても、本許諾書の条項と整合的な形で、『パテントライセンス』が拡大されるように計らうかのいずれかを行わなければならない。ここで「『パテントライセンス』に依存するのを知りながら」というのは、あなたが『保護された作品』をある国で伝達すること、あるいはあなたの受領者が『保護された著作物』をある国で利用することが、『パテントライセンス』を授与されない限り、その国において、あなたにとってそれが有効だと信じるだけの理由がある一つかそれ以上の同定可能な特許を侵害するということを実際に知っているということである。
|
||||
|
||||
ある一対一の取引や協定に基づき、あるいは関連して、あなたが『保護された作品』の伝達、または伝達によって引き起こされる普及を行い、その際『保護された作品』を受領した一部の当事者に対して、『保護された作品』の特定のコピーの利用、普及、改変、または伝達を正式に許可するような『パテントライセンス』を授与するならば、あなたが授与した『パテントライセンス』は『保護された作品』やそれを基にした作品のすべての受領者にまで自動的に拡大されることになる。
|
||||
|
||||
ある『パテントライセンス』が「差別的」(discriminatory)であるとは、本許諾書の下で明確に認められた一つかそれ以上の権利を、『パテントライセンス』がカバーする範囲内に含まなかったり、そうした権利の行使を禁じたり、あるいは権利を行使しないことを条件として課すようなものである場合を指す。あなたを一方の当事者とし、ソフトウェアの頒布を生業とする第三者との間で、あなたは第三者に対し、作品を伝達する活動の程度に基づいて支払いを行う一方、第三者は、あなたから『保護された作品』を受領したすべての当事者に対して「差別的」な『パテントライセンス』を、(a) あなたが伝達した『保護された作品』のコピー(またはそうしたコピーから作成されたコピー)に対して、または(b) 『保護された作品』を含む特定製品や編集物を、主要な、あるいは関連した対象として授与する、というような協定を結んでいる場合、あなたは『保護された作品』を伝達してはならない。ただし、あなたがそのような協定を締結したり、『パテントライセンス』を授与されたのが2007年3月28日より以前である場合は本節の例外とする。
|
||||
|
||||
本許諾書に含まれる一切の記述は、適用可能な特許法の下であなたが利用可能な暗黙のライセンス、その他侵害への防御手段を排除したり制限したりするように解釈されてはならない。
|
||||
|
||||
12. 他者の自由を明け渡してはならない
|
||||
何らかの条件(裁判所の指令や協定など)があなたに課せられ、それが本許諾書の条件と矛盾したとしても、あなたが本許諾書の条件を免れることにはならない。あなたが、『保護された作品』を、本許諾書が課す義務と他の関連した義務の両方を同時に満たすような形で伝達できないのであれば、結果としてあなたがそれを伝達することは全く不可能ということになる。例えばあなたが、自分が『プログラム』を伝達した人々がさらに伝達を行う場合には、彼らからロイヤルティを徴収する、というような義務を負う条項に同意していた場合、あなたがそういった条項と本許諾書の両方を満たすには、『プログラム』の伝達を完全に止めてしまうしかないだろう。
|
||||
|
||||
13. GNU Affero 一般公衆利用許諾書との利用
|
||||
本許諾書に含まれる他の条件に関わらず、あなたには、『保護された作品』を GNU Affero 一般公衆利用許諾書バージョン3の下で許諾された作品とリンクまたは結合して単一の結合物とし、その結果物を伝達する許可が与えられる。本許諾書の条項は『保護された作品』である部分に関してはそのまま適用されるが、結合物それ自体としては、GNU Affero 一般公衆利用許諾書の第13項が規定する、ネットワークを介したやりとりに関する特殊な条件も適用されることになる。
|
||||
|
||||
14. 本許諾書の改訂されたバージョン
|
||||
フリーソフトウェア財団は、改訂された、あるいは新しいバージョンのGNU 一般公衆利用許諾書を折りに触れて発行することができる。そのような新バージョンは、その精神においては現在のバージョンと似たものになるだろうが、細部については新たな問題や懸念を解決すべく異なるものになるだろう。
|
||||
|
||||
それぞれのバージョンには、見分けがつくようなバージョン番号が振られている。『プログラム』に、ある特定のバージョン番号が振られたGNU 一般公衆利用許諾書「かそれ以降のバージョンのいずれか(or any later version)」が適用されると指定されていた場合、あなたは指定された番号のバージョンか、それ以降にフリーソフトウェア財団によって発行されたいずれかのバージョンのどちらの利用条件に従うかを選ぶことができる。『プログラム』が本許諾書のバージョン番号を指定していなかった場合には、あなたはフリーソフトウェア財団がそれまでに発行したバージョンの中からどれを選択しても構わない。
|
||||
|
||||
(訳注: 日本語訳のバージョンは日付で管理している。冒頭を見よ。)
|
||||
|
||||
『プログラム』において、GNU 一般公衆利用許諾書の将来のバージョンのうちどれが適用されうるかは代理人が決定できる、と指定されていた場合、その代理人が、あるバージョンを受諾すると述べた公的な声明は、あなたに対し、その『プログラム』に関してそのバージョンのGNU GPLを選ぶことを永続的かつ正式に許可するのと等しい。
|
||||
|
||||
本許諾書の今後のバージョンでは、あなたに追加的な、または従来とは異なった形での許可を与えるかもしれない。しかしながら、作者や『コピーライト』保有者に対し、あなたが以降のバージョンに従うことを選んだ結果として、追加的な義務が課せられることはない。
|
||||
|
||||
15. 保証の否認
|
||||
『プログラム』には、適用可能な法で許可されている範囲において何の保証もない。書面で述べられていない限り、『コピーライト』保有者やその他の当事者は『プログラム』を「あるがまま(as is)」で、明示的、暗示的を問わず、いかなる種類の保証もなく提供する。この保証には、商用可能性や特定目的への適合性の暗黙的保証が含まれるが、これらに限定されない。『プログラム』の質や性能に関するリスクはすべてあなたに帰属する。『プログラム』に問題があると判明した場合、あなたは必要なすべての対応、補修、修正にかかる費用を負うものとする。
|
||||
|
||||
(訳注: 原文すべて大文字で強調)
|
||||
|
||||
16. 責任の限定
|
||||
適用可能な法において義務づけられるか、書面による同意がない限り、『コピーライト』保有者あるいはその他『プログラム』を上記で許可された通りに改変あるいは伝達する当事者は、たとえそうした保有者や他の当事者が損害が発生する可能性について事前に通知されていたとしても、あなたに対して損害賠償責任を有することはない。ここでいう損害には、『プログラム』の利用あるいは利用できないことから発生した一般的、特殊的、偶然的、必然的な損害のすべてが含まれる(データの消失やデータの不正確な解釈、あなたや第三者によって被った、あるいは『プログラム』が他のプログラムといっしょにうまく動作しなかったために引き起こされた損害などが含まれるが、これらに限定されない)。
|
||||
|
||||
(訳注: 原文すべて大文字で強調)
|
||||
|
||||
17. 第 15 項と第 16 項の解釈について
|
||||
上記のような保証の否認や責任の限定が、特定国内においてそういった条項が指定する通りの法的効力を持ち得ない場合、再審裁判所は、『プログラム』に関連したすべての民事責任の絶対的棄権に最も近く肉薄する国内法を適用すべきである。ただし、報酬の見返りとして責任の保証や引き受けが『プログラム』のコピーに付随する場合は除く。
|
||||
|
||||
利用条件はここまで
|
||||
|
||||
以上の条項をあなたの新しいプログラムに適用する方法
|
||||
あなたが新たなプログラムを開発したとして、公衆によってそれが利用される可能性を最大限高めたいならば、そのプログラムをフリーソフトウェアとし、本許諾書の条項の下で誰でも再頒布ないし変更できるようにするのが最善の道です。そうするためには、プログラムに以下のような告知を付け加えてください。その場合、保証が除外されているということを最も効果的に明言するため、それぞれのソースファイルの冒頭に告示を付け加えるのが最も安全です。少なくとも、「Copyright」から始まる行と、告知全文がある場所へのポインタだけは各ファイルに含めておいてください。
|
||||
|
||||
<one line to give the program’s name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program 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.
|
||||
|
||||
This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
(訳:
|
||||
|
||||
<プログラムの名前と、それが何をするかについての簡単な説明を1行程度。>
|
||||
Copyright (C) <年> <作者の名前>
|
||||
|
||||
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェ
|
||||
ア財団によって発行されたGNU 一般公衆利用許諾書(バージョン3か、それ以降
|
||||
のバージョンのうちどれか)が定める条件の下で再頒布または改変することが
|
||||
できます。
|
||||
|
||||
このプログラムは有用であることを願って頒布されますが、*全くの無保証*で
|
||||
す。*商業可能性の保証や特定目的への適合性は、言外に示されたものも含め、
|
||||
全く存在しません。*詳しくはGNU 一般公衆利用許諾書をご覧ください。あな
|
||||
たはこのプログラムと共に、GNU 一般公衆利用許諾書のコピーを一部受け取っ
|
||||
ているはずです。もし受け取っていなければ、
|
||||
<https://www.gnu.org/licenses/> をご覧ください。
|
||||
|
||||
)
|
||||
電子や紙のメールであなたに問い合わせる方法についての情報も書き加えましょう。
|
||||
|
||||
プログラムが端末で対話的に機能するものならば、対話モードで起動した際に以下のような短い告知が出力されるようにしてください:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w’.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c’ for details.
|
||||
|
||||
(訳:
|
||||
<プログラム名> Copyright (C) <年> <作者の名前>
|
||||
このプログラムは*全くの無保証*で提供されます。詳しくは「show w」と
|
||||
タイプして下さい。これはフリーソフトウェアであり、ある条件の下で再頒布することが
|
||||
奨励されています。詳しくは「show c」とタイプして下さい。
|
||||
|
||||
)
|
||||
ここで、仮想的なコマンド「show w」と「show c」 は一般公衆利用許諾書の適切な部分を表示するようになっていなければなりません。もちろん、あなたのプログラムのコマンドは例と違っていてもかまいません。GUIインターフェースならば、代わりに「…について」ボックスを使うのも良いでしょう。
|
||||
|
||||
また、必要ならばあなたは、(プログラマーとして働いていたら)あなたの雇用主、あるいは場合によっては学校に依頼して、そのプログラムに関する「著作権放棄声明(copyright disclaimer)」に署名してもらうべきです。この点に関するより詳しい情報や、GNU GPLを適用し、その条項に従うにはどうすればよいのかについては、https://www.gnu.org/licenses/ をご覧ください。
|
||||
|
||||
GNU 一般公衆利用許諾書では、あなたのプログラムをプロプライエタリなプログラムに統合することを認めていません。あなたのプログラムがサブルーチンライブラリならば、プロプライエタリなアプリケーションとあなたのライブラリをリンクすることを許可したほうがより有益であると考えるかもしれません。もしこれがあなたの望むことならば、この許諾書の代わりにGNU 劣等一般公衆利用許諾書を適用してください。ただしその前に、ぜひ https://www.gnu.org/philosophy/why-not-lgpl.ja.html をお読みください。
|
||||
|
||||
日本語訳の変更履歴
|
||||
2007年9月5日 初訳出。
|
||||
2018年8月20日 本家のフォーマットを踏襲してMarkdown化。文中の http を https に(原文に追従)。訳注を整理。原文大文字を訳文でも強調
|
||||
2018年8月21日 翻訳の公開に関する条件を追記。
|
178
LICENSE_ZH
Normal file
178
LICENSE_ZH
Normal file
|
@ -0,0 +1,178 @@
|
|||
GNU通用公共许可协议
|
||||
第三版,2007年6月29日
|
||||
版权所有 © 2007 自由软件基金会 <http://fsf.org/>
|
||||
任何人皆可复制和发布本协议的完整副本,但不得修改
|
||||
【译者声明】
|
||||
This is an unofficial translation of the GNU General Public License into Chinese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help Chinese speakers understand the GNU GPL better.
|
||||
这是GNU通用公共许可协议的一份非官方中文翻译,并非自由软件基金会所发表,不适用于使用GNU通用公共许可协议发布的软件的法律声明——只有GNU通用公共许可协议英文原版才具有法律效力。不过我们希望本翻译能够帮助中文读者更好地理解GNU通用公共许可协议。
|
||||
|
||||
You may publish this translation, modified or unmodified, only under the terms at https://www.gnu.org/licenses/translations.html.
|
||||
|
||||
【引言】
|
||||
GNU通用公共许可协议是一份面向软件及其他类型作品的,自由的版权共产协议。
|
||||
就多数软件而言,许可协议被设计用于剥夺你分享和修改软件的自由。相反,GNU通用公共许可协议力图保障你分享和修改某程序全部版本的权利——确保自由软件对其用户来说是自由的。我们自由软件基金会将GNU通用公共许可协议用于我们的大多数软件,并为一些其他作品的作者效仿。你也可以将本协议用于你的程序。
|
||||
所谓自由软件,强调自由,而非免费。本GNU通用公共许可协议设计用于确保你享有分发自由软件的自由(你可以为此服务收费),确保你可以在需要的时候获得这些软件的源码,确保你可以修改这些软件或者在新的自由软件中复用其中某些片段,并且确保你在这方面享有知情权。
|
||||
为保障你的权益,我们需要作一些限定:禁止任何人否认你的上述权利,或者要求你放弃它们。因此,当你分发或修改这些软件时,你有一定的责任——尊重他人的自由。如果你分发这种程序的副本,无论收费还是免费,你必须给予与你同等的权利。你还要确保他们也能收到源码并了解他们的权利。
|
||||
采用GNU通用公共许可协议的开发者通过两步保障你的权益:其一,申明软件的版权;其二,通过本协议使你可以合法地复制、分发和修改该软件。
|
||||
为了保护每一位作者和开发者,GNU通用公共许可协议指明一点:自由软件并没有品质担保。为用户和作者双方着想,GNU通用公共许可协议要求修改版必须有标记,以免其问题被错误地归到先前版本的作者身上。
|
||||
某些设备设计成拒绝用户安装运行修改过的软件,但厂商不受限。这和我们保护用户享有修改软件的自由的宗旨存在根本性矛盾。该滥用协议的模式出现于个人用品领域,这恰是最不可接受的。因此,我们设计了这版GNU通用公共许可协议来禁止这类产品。如果此类问题在其他领域涌现,我们时刻准备着在将来的版本中把规定扩展到相应领域,以保护用户的自由。
|
||||
最后,每个程序都持续受到软件专利的威胁。政府不应该允许专利限制通用计算机软件的开发和应用,在做不到这点时,我们希望避免专利应用有效地使自由软件私有化的危险。就此,GNU通用公共许可协议保证专利不能使程序非自由化。
|
||||
|
||||
下文是关于复制、分发和修改的严谨描述和实施条件。
|
||||
|
||||
【关于复制、分发和修改的术语和条件】
|
||||
〇、定义
|
||||
|
||||
“本协议”指GNU通用公共许可协议第三版。
|
||||
“版权”也指适用于诸如半导体掩模的其他类型作品的类似法律。
|
||||
“本程序”指任何在本协议保护下的有版权的作品。每个许可获得者称作“你”。“许可获得者”和“接收者”可以是个人或组织。
|
||||
“修改”一个作品指需要版权许可的复制及对作品全面的或部分的改编行为,有别于制作副本。所产生的作品称作前作的“修改版”,或“基于”前作的作品。
|
||||
“受保护作品”指程序或其派生作品。
|
||||
“传播”作品指那些未经许可就会在适用版权法律下构成直接或间接侵权的行为,不包括在计算机上运行和私下的修改。传播包括复制、分发(无论修改与否)、向公众公开,以及在某些国家的其他行为。
|
||||
“转发”作品指让他方能够制作或者接收副本的行为。仅仅通过计算机网络和用户交互,没有传输副本,则不算转发。
|
||||
一个显示“适当的法律声明”的交互式用户界面应包括一个便捷而醒目的可视化特性:(1)显示适当的版权声明;(2)告知用户没有品质担保(提供了品质担保的情况除外),许可获得者可以在本协议约束下转发该作品,及查看本协议副本的途径。如果该界面提供一个命令列表,如菜单,其表项应符合上述规范。
|
||||
|
||||
一、源码
|
||||
|
||||
作品的源码指其可修改的首选形式,目标码指所有其他形式。
|
||||
“标准接口”指标准化组织定义的官方标准中的接口,或针为某种编程语言设定的接口中为开发者广泛使用的接口。
|
||||
可执行作品中的“系统库”不是指整个程序,而是涵盖此等内容:(a)以通常形式和主部件打包到一起却并非后者一部分,且(b)仅为和主部件一起使作品可用或实现某些已有公开实现源码的接口。“主部件”在这里指可执行作品运行依赖的操作系统(如果存在)的必要部件(内核、窗口系统等),生成该作品的编译器,或运行所需的目标码解释器。
|
||||
目标码形式的作品中“相应的源码”指所有修改作品及生成、安装、运行(对可执行作品而言)目标码所需的源码,包括控制上述行为的脚本。可是,其中不包括系统库、通用工具、未修改直接用于支持上述行为却不是该作品一部分的通常可得的自由软件。例如,相应的源码包含配合作品源文件的接口定义,以及共享库和作品专门依赖的动态链接子程序的源码。这里的依赖体现为频密的数据交换或者该子程序和作品其他部分的控制流切换。
|
||||
相应的源码不必包含那些用户可以通过源码其他部分自动生成的内容。
|
||||
源码形式作品的相应源码即其本身。
|
||||
|
||||
二、基本许可
|
||||
|
||||
本协议的一切授权都是对本程序的版权而言的,并且在所述条件都满足时不可撤销。本协议明确批准你不受限制地运行本程序的未修改版本。受保护作品的运行输出,仅当其内容构成一个受保护作品时,才会为本协议所约束。如版权法所赋予,本协议承认你正当使用或与之等价的权利。
|
||||
只要你获得的许可仍有效,你可以制作、运行和传播那些你并不转发的受保护作品。只要你遵守本协议中关于转发你不占有版权的材料的条款,你可以向他人转发,仅仅以求对方为你做定制或向你提供运行这些作品的工具。那些为你制作或运行这些受保护作品的人,应该在你的指引和控制下,谨代表你工作,即禁止他们在双方关系之外制作任何你提供的受版权保护材料的副本。
|
||||
仅当满足后文所述条件时,其他各种情况下的转发才是允许的。不允许再授权行为,而第十条的存在使再授权变得没有必要。
|
||||
|
||||
三、保护用户的合法权益免受反破解法限制
|
||||
|
||||
在任何满足1996年12月20日通过的WIPO版权条约第11章要求的法律,或类似的禁止或限制技术手段破解的法律下,受保护作品不应该视为有效技术手段的一部分。
|
||||
当你转发一个受保护作品时,你将失去任何通过法律途径限制技术手段破解的权力,乃至于通过行使本协议所予权利实现的破解。你即已表明无心通过限制用户操作或修改受保护作品来确保你或第三方关于禁止技术手段破解的法定权利。
|
||||
|
||||
四、转发完整副本
|
||||
|
||||
你可以通过任何媒介发布你接收到的本程序的完整源码副本,但要做到:为每一个副本醒目而恰当地发布版权;完整地保留关于本协议及按第七条加入的非许可性条款;完整地保留免责声明;给接收者附上一份本协议的副本。
|
||||
你可以免费或收费转发,也可以选择提供技术支持或品质担保以换取收入。
|
||||
|
||||
五、转发修改过的源码版本
|
||||
|
||||
你可以以源码形式转发基于本程序的作品或修改的内容,除满足第四条外还需要满足以下几点要求:
|
||||
a)该作品必须带有醒目的修改声明及相应的日期。
|
||||
b)该作品必须带有醒目的声明,指出其在本协议及任何符合第七条的附加条件下发布。这个要求修正了第四条关于“完整保留”的内容。
|
||||
c)你必须按照本协议将该作品整体向想要获得许可的人授权,本协议及符合第七条的附加条款就此适用于整个作品,即其每一部分,不管如何建包。本协议不允许以其他形式授权该作品,但如果你收到别的许可则另当别论。
|
||||
d)如果该作品有交互式用户界面,则其必须显示适当的法律声明。然而,当本程序有交互式用户界面却不显示适当的法律声明时,你的作品也不必。
|
||||
一个在存储或分发媒介上的受保护作品和其他分离的单体作品的联合作品,在既不是该受保护作品的自然扩展,也不以构筑更大的程序为目的,并且自身及其产生的版权并非用于限制单体作品给予联合作品用户的访问及其他合法权利时,称为“聚合体”。在聚合作品中包含受保护作品并不会使本协议影响聚合作品的其他部分。
|
||||
|
||||
六、以非源码形式转发
|
||||
|
||||
你可以如第四条和第五条所述那样以目标码形式转发受保护作品,同时在本协议规范下以如下方式之一转发机器可读的对应源码:
|
||||
a)目标码通过实体产品(涵盖某种实体分发媒介)转发时,通过常用于软件交换的耐用型实体媒介随同转发相应的源码。
|
||||
b)目标码通过实体产品(涵盖某种实体分发媒介)转发时,伴以具有至少三年且与售后服务等长有效期的书面承诺,给予目标码的持有者:(1)包含产品全部软件的相应源码的常用于软件交换的耐用型实体媒介,且收费不超过其合理的转发成本;或者(2)通过网络免费获得相应源码的途径。
|
||||
c)单独转发目标码时,伴以提供源码的书面承诺。本选项仅在你收到目标码及b项形式的承诺的情况下可选。
|
||||
d)通过在指定地点提供目标码获取服务(无论是否收费)的形式转发目标码时,在同一地点以同样的方式提供对等的源码获取服务,并不得额外收费。你不以要求接收者在复制目标码的同时复制源码。如果提供目标码复制的地点为网络服务器,相应的源码可以提供在另一个支持相同复制功能的服务器上(由你或者第三方运营),不过你要在目标码处指出相应源码的确切路径。不管你用什么源码服务器,你有义务要确保持续可用以满足这些要求。
|
||||
e)通过点对点传输转发目标码时,告知其他节点目标码和源码在何处以d项形式向大众免费提供。
|
||||
“面向用户的产品”指(1)“消费品”,即个人、家庭或日常用途的个人有形财产;或者(2)面向社会团体设计或销售,却落入居家之物。在判断一款产品是否消费品时,争议案例的判断将向利于扩大保护靠拢。就特定用户接收到特定产品而言,“正常使用”指对此类产品的典型或一般使用,不管该用户的身份,该用户对该产品的实际用法,以及该产品的预期用法。无论产品是否实质上具有商业上的,工业上的,及非面向消费者的用法,它都视为消费品,除非以上用法代表了它唯一的重要使用模式。
|
||||
“安装信息”对面向用户的产品而言,指基于修改过的源码安装运行该产品中的受保护作品的修改版所需的方法、流程、认证码及其他信息。这些信息必须足以保证修改过的目标码不会仅仅因为被修改过而不能继续工作。
|
||||
如果你根据本条在,或随,或针对一款面向用户的产品,以目标码形式转发某作品,且转发体现于该产品的所有权和使用权永久或者在一定时期内转让予接收者的过程(无论其有何特点),根据本条进行的源码转发必须伴有安装信息。不过,如果你和第三方都没有保留在该产品上安装修改后的目标码的能力(如作品安装在ROM上),这项要求不成立。 要求提供安装信息并不要求为修改或安装的作品,以及其载体产品继续提供技术支持、品质担保和升级。当修改本身对网络运行有实质上的负面影响,或违背了网络通信协议和规则时,可以拒绝其联网。
|
||||
根据本条发布的源码及安装信息,必须以公共的文件格式(并且存在可用的空开源码的处理工具)存在,同时不得对解压、阅读和复制设置任何密码。
|
||||
|
||||
七、附加条款
|
||||
|
||||
“附加许可”用于补充本协议,以允许一些例外情况。合乎适用法律的对整个程序适用的附加许可,应该被视为本协议的内容。如果附加许可作用于程序的某部分,则该部分受此附加许可约束,而其他部分不受其影响。
|
||||
当你转发本程序时,你可以选择性删除副本或其部分的附加条款。(附加条款可以写明在某些情况下要求你修改时删除该条款。)在你拥有或可授予恰当版权许可的受保护作品中,你可以在你添加的材料上附加许可。
|
||||
尽管已存在本协议的其他条款,对你添加到受保护作品的材料,你可以(如果你获得该材料版权持有人的授权)以如下条款补充本协议:
|
||||
a)表示不提供品质担保或有超出十五、十六条的责任。
|
||||
b)要求在此材料中或在适当的法律声明中保留特定的合理法律声明或创作印记。
|
||||
c)禁止误传材料的起源,或要求合理标示修改以别于原版。
|
||||
d)限制以宣传为目的使用该材料的作者或授权人的名号。
|
||||
e)降低约束以便赋予在商标法下使用商品名、商品标识及服务标识。
|
||||
f)要求任何转发该材料(或其修改版)并对接收者提供契约性责任许诺的人,保证这种许诺不会给作者或授权人带来连带责任。
|
||||
此外的非许可性附加条款都被视作第十条所说的“进一步的限制”。如果你接收到的程序或其部分,声称受本协议约束,却补充了这种进一步的限制条款,你可以去掉它们。如果某许可协议包含进一步的限制条款,但允许通过本协议再授权或转发,你可以通过本协议再授权或转发加入了受前协议管理的材料,不过要同时移除上述条款。
|
||||
如果你根据本条向受保护作品添加了调控,你必须在相关的源文件中加入对应的声明,或者指出哪里可以找到它们。
|
||||
附加条款,不管是许可性的还是非许可性的,可以以独立的书面协议出现,也可以声明为例外情况,两种做法都可以实现上述要求。
|
||||
|
||||
八、终止授权
|
||||
|
||||
除非在本协议明确授权下,你不得传播或修改受保护作品。其他任何传播或修改受保护作品的企图都是无效的,并将自动中止你通过本协议获得的权利(包括第十一条第3段中提到的专利授权)。
|
||||
然而,当你不再违反本协议时,你从特定版权持有人处获得的授权恢复:(1)暂时恢复,直到版权持有人明确终止;(2)永久恢复,如果版权持有人没能在60天内以合理的方式指出你的侵权行为。
|
||||
再者,如果你第一次收到了特定版权持有人关于你违反本协议(对任意作品)的通告,且在收到通告后30天内改正,那你可以继续享此有授权。
|
||||
当你享有的权利如本条所述被中止时,已经从你那根据本协议获得授权的他方的权利不会因此中止。在你的权利恢复之前,你没有资格凭第十条获得同一材料的授权。
|
||||
|
||||
九、持有副本无需接受协议
|
||||
|
||||
你不必为接收或运行本程序而接受本协议。类似的,仅仅因点对点传输接收到副本引发的对受保护作品的辅助性传播,并不要求接受本协议。但是,除本协议外没有什么可以授权你传播或修改任何受保护作品。如果你不接受本协议,这些行为就侵犯了版权。因此,一旦修改和传播一个受保护作品,就表明你接受本协议。
|
||||
|
||||
十、对下游接收者的自动授权
|
||||
|
||||
每当你转发一个受保护作品,其接收者自动获得来自初始授权人的授权,依照本协议可以运行、修改和传播此作。你没有要求第三方遵守该协议的义务。
|
||||
“实体事务”指转移一个组织的控制权或全部资产、或拆分或合并组织的事务。如果实体事务导致一个受保护作品的传播,则事务中各收到作品副本方,都有获得前利益相关者享有或可以如前段所述提供的对该作品的任何授权,以及从前利益相关者处获得并拥有相应的源码的权利,如果前利益相关者享有或可以通过合理的努力获得此源码。
|
||||
你不可以对本协议所授权利的行使施以进一步的限制。例如,你不可以索要授权费或版税,或就行使本协议所授权利征收其他费用;你也不能发起诉讼(包括交互诉讼和反诉),宣称制作、使用、零售、批发、引进本程序或其部分的行为侵犯了任何专利。
|
||||
|
||||
十一、专利
|
||||
|
||||
“贡献人”指通过本协议对本程序或其派生作品进行使用认证的版权持有人。授权作品成为贡献人的“贡献者版”。
|
||||
贡献人的“实质专利权限”指其拥有或掌控的,无论是已获得的还是将获得的全部专利权限中,可能被通过某种本协议允许的方式制作、使用或销售其贡献者版作品的行为侵犯的部分,不包括仅有修改其贡献者版作品才构成侵犯的部分。“掌控”所指包括享有和本协议相一致的专利再授权的权利。
|
||||
每位贡献人皆其就实质专利权限,授予你一份全球有效的免版税的非独占专利许可,以制作、使用、零售、批发、引进,及运行、修改、传播其贡献者版的内容。
|
||||
在以下三段中,“专利许可”指通过任何方式明确表达的不行使专利权(如对使用专利的明确许可和不起诉专利侵权的契约)的协议或承诺。对某方“授予”专利许可,指这种不对其行使专利权的协议或承诺。
|
||||
如果你转发的受保护作品已知依赖于某专利,而其相应的源码并不是任何人都能根据本协议从网上或其他地方免费获得,那你必须(1)以上述方式提供相应的源码;或者(2)放弃从该程序的专利许可中获得利益;或者(3)以某种和本协议相一致的方式将专利许可扩展到下游接收者。“已知依赖于”指你实际上知道若没有专利许可,你在某国家转发受保护作品的行为,或者接收者在某国家使用受保护作品的行为,会侵犯一项或多项该国认定的专利,而这些专利你有理由相信它们的有效性。
|
||||
如果根据一项事务或安排,抑或与之相关,你转发某受保护作品,或通过促成其转手以实现传播,并且该作品的接收方授予专利许可,以使指可以使用、传播、修改或转发该作品的特定副本,则此等专利许可将自动延伸及每一个收到该作品或其派生作品的人。
|
||||
如果某专利在其涵盖范围内,不包含本协议专门赋予的一项或多项权利,禁止行使它们或以不行使它们为前提,则该专利是“歧视性”的。如果你和软件发布行业的第三方有合作,合作要求你就转发受保护作品的情况向其付费,并授予作品接收方歧视性专利,而且该专利(a)与你转发的副本(或在此基础上制作的副本)有关,或针对包含该受保护作品的产品或联合作品,你不得转发本程序,除非参加此项合作或取得该专利早于2007年3月28日。
|
||||
本协议的任何部分不应被解释成在排斥或限制任何暗含的授权,或者其他在适用法律下对抗侵权的措施。
|
||||
|
||||
十二、不得牺牲他人的自由
|
||||
|
||||
即便你面临与本协议条款冲突的条件(来自于法庭要求、协议或其他),那也不能成为你违背本协议的理由。倘若你不能在转发受保护作品时同时满足本协议和其他文件的要求,你就不能转发本程序。例如,当你同意了某些要求你就再转发问题向你的转发对象收取版税的条款时,唯一能同时满足它和本协议要求的做法便是不转发本程序。
|
||||
|
||||
十三、和GNU Affero通用公共许可协议一起使用
|
||||
|
||||
尽管已存在本协议的一些条款,你可以将任何受保护作品与以GNU Affero通用公共许可协议管理的作品关联或组合成一个联合作品,并转发。本协议对其中的受保护作品部分仍然有效,但GNU Affero通用公共许可协议第十三条的关于网络交互的特别要求适用于整个联合作品。
|
||||
|
||||
十四、本协议的修订版
|
||||
|
||||
自由软件联盟可能会不定时发布GNU通用公共许可协议的修订版或新版。新版将秉承当前版本的精神,但对问题或事项的描述细节不尽相同。
|
||||
每一版都会有不同的版本号,如果本程序指定其使用的GNU通用公共许可协议的版本“或任何更新的版本”,你可以选择遵守该版本或者任何更新的版本的条款。如果本程序没有指定协议版本,你可以选用自由软件联盟发布的任意版本的GNU通用公共许可协议。
|
||||
如果本程序指定代理来决定将来那个GNU通用公共许可协议版本适用,则该代理的公开声明将指导你选择协议版本。
|
||||
新的版本可能会给予你额外或不同的许可。但是,任何作者或版权持有人的义务,不会因为你选择新的版本而增加。
|
||||
|
||||
十五、不提供品质担保
|
||||
|
||||
本程序在适用法律范围内不提供品质担保。除非另作书面声明,版权持有人及其他程序提供者“概”不提供任何显式或隐式的品质担保,品质担保所指包括而不仅限于有经济价值和适合特定用途的保证。全部风险,如程序的质量和性能问题,皆由你承担。若程序出现缺陷,你将承担所有必要的修复和更正服务的费用。
|
||||
|
||||
十六、责任范围
|
||||
|
||||
除非适用法律或书面协议要求,任何版权持有人或本程序按本协议可能存在的第三方修改和再发布者,都不对你的损失负有责任,包括由于使用或者不能使用本程序造成的任何一般的、特殊的、偶发的或重大的损失(包括而不仅限于数据丢失、数据失真、你或第三方的后续损失、其他程序无法与本程序协同运作),即使那些人声称会对此负责
|
||||
|
||||
十七、第十五条和第十六条的解释
|
||||
|
||||
如果上述免责声明和责任范围声明不为地方法律所支持,上诉法庭应采用与之最接近的关于放弃本程序相关民事责任的地方法律,除非本程序附带收费的品质担保或责任许诺。
|
||||
|
||||
【附录:如何将上述条款应用到你的新程序】
|
||||
如果你开发了一个新程序,并希望它能最大限度地为公众所使用,最好的办法是将其作为自由软件,以使每个人都能在本协议约束下对其再发布及修改。
|
||||
为此,请在附上以下声明。最安全的做法是将其附在每份源码的开头,以便于最有效地传递免责信息。同时,每个文件至少包含一处“版权”声明和一个协议全文的链接。
|
||||
|
||||
<用一行来标明程序名及其作用>
|
||||
版权所有(C)<年份> <作者姓名>
|
||||
本程序为自由软件,在自由软件联盟发布的GNU通用公共许可协议的约束下,你可以对其进行再发布及修改。协议版本为第三版或(随你)更新的版本。
|
||||
我们希望发布的这款程序有用,但不保证,甚至不保证它有经济价值和适合特定用途。详情参见GNU通用公共许可协议。
|
||||
你理当已收到一份GNU通用公共许可协议的副本,如果没有,请查阅<http://www.gnu.org/licenses/>
|
||||
|
||||
同时提供你的电子邮件地址或传统的邮件联系方式。
|
||||
|
||||
如果该程序是交互式的,让它在交互模式下输出类似下面的一段声明:
|
||||
|
||||
<程序名> 第69版,版权所有(C)<年份> <作者姓名>
|
||||
本程序从未提供品质担保,输入'show w'可查看详情。这是款自由软件,欢迎你在满足一定条件后对其再发布,输入'show c'可查看详情。
|
||||
|
||||
例子中的命令'show w'和'show c'应用于显示GNU通用公共许可协议相应的部分。当然你也可以因地制宜地选用别的方式,对图形界面程序可以用“关于”菜单。
|
||||
|
||||
如果你之上存在雇主(你是码农)或校方,你还应当让他们在必要时为此程序签署放弃版权声明。详情参见<http://www.gnu.org/licenses/>。
|
||||
|
||||
本GNU通用公共许可协议不允许把你的程序并入私有程序。如果你的程序是某种库,且你想允许它被私有程序链接而使之更有用,请使用GNU较宽松通用公共许可协议。决定前请先查阅<http://www.gnu.org/philosophy/why-not-lgpl.html>。
|
||||
|
||||
|
||||
翻译:阮坤良<peterrk@pku.edu.cn>
|
||||
参考:
|
||||
[繁体中文译本] https://www.gnu.org/licenses/translations.html
|
12
Properties/launchSettings.json
Normal file
12
Properties/launchSettings.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"profiles": {
|
||||
"ColdMint.Traveler": {
|
||||
"commandName": "Project"
|
||||
},
|
||||
"配置文件 1": {
|
||||
"commandName": "Executable",
|
||||
"executablePath": "D:\\Godot_v4.3-stable_mono_win64\\Godot_v4.3-stable_mono_win64.exe",
|
||||
"commandLineArgs": " --path . --verbose"
|
||||
}
|
||||
}
|
||||
}
|
97
README.md
Normal file
97
README.md
Normal file
|
@ -0,0 +1,97 @@
|
|||
[![Star History Chart](https://api.star-history.com/svg?repos=Cold-Mint/Traveller&type=Date)](https://star-history.com/#Cold-Mint/Traveller&Date)
|
||||
|
||||
English [简体中文](README_ZH.md) [にほんご](README_JA.md)
|
||||
|
||||
## Intro
|
||||
|
||||
Mint's new game.
|
||||
|
||||
A pixel cross-platform roguelite game.
|
||||
|
||||
## Recent Development progress
|
||||
|
||||
| Task | status |
|
||||
|------------------------------------------|-------------|
|
||||
| Randomly generated map | complete |
|
||||
| loot | complete |
|
||||
| Support still out of the knapsack system | complete |
|
||||
| Add AI agents to creatures | In progress |
|
||||
|
||||
## Screenshot
|
||||
|
||||
Game scene
|
||||
|
||||
![](screenshot/0.0.1/game_page.png)
|
||||
|
||||
Level graph editor
|
||||
|
||||
![](screenshot/0.0.1/level_Graph_Editor.png)
|
||||
|
||||
## Run the project locally
|
||||
|
||||
#### Download engine
|
||||
|
||||
1. Download [Godot Engine .Net](https://godotengine.org/).
|
||||
|
||||
After downloading the engine, you will need to download an additional export template to export as an executable
|
||||
program.
|
||||
|
||||
2. Download [.NetSDK](https://dotnet.microsoft.com/download).
|
||||
|
||||
Ubuntu or Linux Mint install the .net 8.0 Sdk.
|
||||
|
||||
```
|
||||
apt install dotnet-sdk-8.0
|
||||
```
|
||||
|
||||
#### Clone project
|
||||
|
||||
Enter the following command in your working directory:
|
||||
|
||||
```
|
||||
git clone https://github.com/Cold-Mint/Traveller.git
|
||||
```
|
||||
|
||||
#### Export
|
||||
|
||||
You need to fill in the Export Presets > Resources > Filter to export non-resource files or folders edit box:
|
||||
|
||||
```
|
||||
data/*
|
||||
```
|
||||
|
||||
#### Custom feature
|
||||
|
||||
- **disableVersionIsolation** Disable version isolation.
|
||||
- **enableMod** Experimental feature, the game loads dll files and pck files in the mod directory when the mod is
|
||||
enabled. Due to the isolation of AssemblyLoadContext, the main game content cannot be accessed from within the Mod for
|
||||
the time being.
|
||||
|
||||
#### Run the console on Linux
|
||||
|
||||
Enter the following command in the directory where the game is located:
|
||||
|
||||
```
|
||||
./Traveler.sh
|
||||
```
|
||||
|
||||
## Participate in translation
|
||||
|
||||
The project is prepared for localization at the beginning of writing. You can edit the csv file in the locals directory.
|
||||
To modify and add new translations.
|
||||
|
||||
## License
|
||||
|
||||
[GPL-3.0 license](LICENSE)
|
||||
|
||||
Support commercial, anyone can modify, build, and sell or distribute for free. For all derivative versions of this
|
||||
project, under the GPL, you shall **retain the author copyright** and **publish the modified source code**.
|
||||
|
||||
> Note: You have the right to sell the modified version, but not the original.
|
||||
>
|
||||
|
||||
## Contributor
|
||||
|
||||
<a href="https://github.com/Cold-Mint/Traveller/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Cold-Mint/Traveller" />
|
||||
</a>
|
90
README_JA.md
Normal file
90
README_JA.md
Normal file
|
@ -0,0 +1,90 @@
|
|||
[![Star History Chart](https://api.star-history.com/svg?repos=Cold-Mint/Traveller&type=Date)](https://star-history.com/#Cold-Mint/Traveller&Date)
|
||||
|
||||
[English](README.md) [简体中文](README_ZH.md) にほんご
|
||||
|
||||
## こくじ
|
||||
|
||||
ミントの新作ゲームです。
|
||||
|
||||
マルチピクセルのRogueliteゲームです
|
||||
|
||||
## 最近の研究開発の進捗状況です
|
||||
|
||||
| ミッション | じょうたい |
|
||||
| ----------------------------------------------------------- | ------------------ |
|
||||
| マップをランダムに生成します | 成し遂げる |
|
||||
| 戦利品 | 成し遂げる |
|
||||
| バックパックのシステムをサポートしています | 成し遂げる |
|
||||
| 生物にAIエージェントを追加します | 進行中です |
|
||||
## スクリーンショットです
|
||||
|
||||
ゲームのシーンです
|
||||
|
||||
![](screenshot/0.0.1/game_page.png)
|
||||
|
||||
ステージエディター
|
||||
|
||||
![](screenshot/0.0.1/level_Graph_Editor.png)
|
||||
## 地元でプロジェクトを進めています
|
||||
|
||||
#### ダウンロードエンジンです
|
||||
1. ダウンロード[Godot Engine .Net](https://godotengine.org/)。
|
||||
|
||||
エンジンをダウンロードした後、エクスポートテンプレートを追加でダウンロードして実行可能なプログラムにする必要があります。
|
||||
|
||||
2. ダウンロード [.NetSDK](https://dotnet.microsoft.com/download).
|
||||
|
||||
UbuntuやLinux Mintに。net8.0Sdkをインストールします。
|
||||
|
||||
```
|
||||
apt install dotnet-sdk-8.0
|
||||
```
|
||||
|
||||
|
||||
#### クローンプロジェクトです
|
||||
|
||||
作業リストに次の指示を入力します。
|
||||
|
||||
```
|
||||
git clone https://github.com/Cold-Mint/Traveller.git
|
||||
```
|
||||
|
||||
#### エクスポート
|
||||
|
||||
エクスポートプリセット>リソース>エクスポート非リソースファイルまたはフォルダ編集ボックスに記入する必要があります:
|
||||
|
||||
```
|
||||
data/*
|
||||
```
|
||||
|
||||
#### 風習特徴
|
||||
|
||||
- **disableVersionIsolation** 版孤立を無効化する。
|
||||
- **enableMod**実験的な機能、modが有効になっている場合、ゲームはmodディレクトリにdllファイルとpckファイルをロードします。assemblyloadcontextが分離されているため、当面の間、mod内からメインゲームのコンテンツにアクセスすることはできません。
|
||||
|
||||
#### Linux上でコンソールを動かします
|
||||
|
||||
ゲームの存在するディレクトリに以下のコマンドを入力します:
|
||||
|
||||
```
|
||||
./Traveler.sh
|
||||
```
|
||||
## 翻訳に携わります
|
||||
|
||||
このプロジェクトは、当初からローカライズの準備ができていました。localsディレクトリのcsvファイルを編集することができます。新しい翻訳を加えたり修正したりしています
|
||||
|
||||
## 許可証です
|
||||
|
||||
[GPL-3.0 license](LICENSE)
|
||||
|
||||
プロトコルの日本語訳を見ます:[GPL-3.0 license にほんご](LICENSE_JA)
|
||||
|
||||
商用に対応しており、誰でも修正、構築、販売、無料配布が可能です。このプロジェクトのすべての派生バージョンについて、GPLプロトコルに基づいて、あなたは**作者の著作権**を保持し、**ソースコードの修正を公開します**。
|
||||
|
||||
> 注意:修正版を販売する権利はありますが、オリジナル版は販売できません。
|
||||
|
||||
## 貢献者です
|
||||
|
||||
<a href="https://github.com/Cold-Mint/Traveller/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Cold-Mint/Traveller" />
|
||||
</a>
|
94
README_ZH.md
Normal file
94
README_ZH.md
Normal file
|
@ -0,0 +1,94 @@
|
|||
[![Star History Chart](https://api.star-history.com/svg?repos=Cold-Mint/Traveller&type=Date)](https://star-history.com/#Cold-Mint/Traveller&Date)
|
||||
|
||||
[English](README.md) 简体中文 [にほんご](README_JA.md)
|
||||
|
||||
## 简介
|
||||
|
||||
薄荷的新作游戏。
|
||||
|
||||
一款像素的跨平台的Roguelite游戏。
|
||||
|
||||
## 近期研发进度
|
||||
|
||||
| 任务 | 状态 |
|
||||
|-----------|-----|
|
||||
| 随机生成地图 | 完成 |
|
||||
| 战利品 | 完成 |
|
||||
| 支持仍出的背包系统 | 完成 |
|
||||
| 为生物添加AI代理 | 进行中 |
|
||||
|
||||
## 屏幕截图
|
||||
|
||||
游戏场景
|
||||
|
||||
![](screenshot/0.0.1/game_page.png)
|
||||
|
||||
关卡编辑器
|
||||
|
||||
![](screenshot/0.0.1/level_Graph_Editor.png)
|
||||
|
||||
## 在本地运行项目
|
||||
|
||||
#### 下载引擎
|
||||
|
||||
1. 下载[Godot Engine .Net](https://godotengine.org/)。
|
||||
|
||||
下载引擎后,您需要额外下载导出模板才能导出为可执行程序。
|
||||
|
||||
2. 下载 [.NetSDK](https://dotnet.microsoft.com/download).
|
||||
|
||||
Ubuntu或Linux Mint安装.net8.0Sdk。
|
||||
|
||||
```
|
||||
apt install dotnet-sdk-8.0
|
||||
```
|
||||
|
||||
#### 克隆项目
|
||||
|
||||
在您的工作目录输入以下指令:
|
||||
|
||||
```
|
||||
git clone https://github.com/Cold-Mint/Traveller.git
|
||||
```
|
||||
|
||||
#### 导出
|
||||
|
||||
需要在导出预设>资源>筛选导出非资源文件或文件夹编辑框内填入:
|
||||
|
||||
```
|
||||
data/*
|
||||
```
|
||||
|
||||
#### 自定义特性
|
||||
|
||||
- **disableVersionIsolation** 禁用版本隔离。
|
||||
- **enableMod** 实验性功能,当启用模组时游戏会在mod目录加载dll文件和pck文件。由于AssemblyLoadContext的隔离性,暂时不能从Mod内访问主游戏内容。
|
||||
|
||||
#### 在Linux上运行控制台
|
||||
|
||||
在游戏所在目录输入以下命令:
|
||||
|
||||
```
|
||||
./Traveler.sh
|
||||
```
|
||||
|
||||
## 参与翻译
|
||||
|
||||
此项目在编写之初就为本地化做好了准备。您可以编辑locals目录下的csv文件。来修改和添加新的翻译。
|
||||
|
||||
## 许可证
|
||||
|
||||
[GPL-3.0 license](LICENSE)
|
||||
|
||||
查看协议的中文翻译版本:[GPL-3.0 license 简体中文](LICENSE_ZH)
|
||||
|
||||
支持商用,任何人可修改,构建,并用于售卖或免费发布。对于此项目的所有衍生版本,根据GPL协议,您应当**保留作者版权**,以及*
|
||||
*公开修改后的源代码**。
|
||||
|
||||
> 注意:您有权售卖修改后的版本,但不能售卖原版。
|
||||
|
||||
## 贡献者
|
||||
|
||||
<a href="https://github.com/Cold-Mint/Traveller/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Cold-Mint/Traveller" />
|
||||
</a>
|
10
data/itemRegs/items.yaml
Normal file
10
data/itemRegs/items.yaml
Normal file
|
@ -0,0 +1,10 @@
|
|||
#Register items here.
|
||||
#在这里注册物品。
|
||||
#Note: The id must be the same as the item id in the scene. Otherwise, an ArgumentException will be thrown.
|
||||
#备注:id必须和场景内的物品id保持一致。否则会抛出ArgumentException。
|
||||
#After you declare the id of the item, add the corresponding localized text to the csv file in the locals' folder. For example, if the id is a corresponding name is item_a and the corresponding description is item_a_desc.
|
||||
#当您声明物品的id后,请在locals文件夹中的csv文件中添加相应的本地化文本。例如:id为a,则对应的名称为item_a,对应的描述为item_a_desc。
|
||||
- id: resignation_certificate
|
||||
scene_path: res://prefab/items/resignationCertificate.tscn
|
||||
icon_path: res://sprites/projectile/resignationCertificate.png
|
||||
max_stack_value: 1
|
26
data/itemRegs/magics.yaml
Normal file
26
data/itemRegs/magics.yaml
Normal file
|
@ -0,0 +1,26 @@
|
|||
#Register spells used by the projectile here.
|
||||
#在这里注册抛射体使用的法术。
|
||||
#Note: The id must be the same as the item id in the scene. Otherwise, an ArgumentException will be thrown.
|
||||
#备注:id必须和场景内的物品id保持一致。否则会抛出ArgumentException。
|
||||
#After you declare the id of the item, add the corresponding localized text to the csv file in the locals' folder. For example, if the id is a corresponding name is item_a and the corresponding description is item_a_desc.
|
||||
#当您声明物品的id后,请在locals文件夹中的csv文件中添加相应的本地化文本。例如:id为a,则对应的名称为item_a,对应的描述为item_a_desc。
|
||||
- id: necromancy
|
||||
scene_path: res://prefab/magics/curseOfTheUndead.tscn
|
||||
icon_path: res://sprites/projectile/curseOfTheUndead.png
|
||||
max_stack_value: 1
|
||||
- id: x3
|
||||
scene_path: res://prefab/magics/x3.tscn
|
||||
icon_path: res://sprites/projectile/x3.png
|
||||
max_stack_value: 1
|
||||
- id: curse
|
||||
scene_path: res://prefab/magics/curse.tscn
|
||||
icon_path: res://sprites/projectile/x3.png
|
||||
max_stack_value: 1
|
||||
- id: magic_missile
|
||||
scene_path: res://prefab/magics/magicMissile.tscn
|
||||
icon_path: res://sprites/projectile/magicMissile.png
|
||||
max_stack_value: 1
|
||||
- id: tracking_spell
|
||||
scene_path: res://prefab/magics/trackingSpell.tscn
|
||||
icon_path: res://sprites/projectile/trackingSpell.png
|
||||
max_stack_value: 1
|
13
data/itemRegs/packsacks.yaml
Normal file
13
data/itemRegs/packsacks.yaml
Normal file
|
@ -0,0 +1,13 @@
|
|||
#Register an item container here.
|
||||
#在这里注册物品容器。
|
||||
#Note: The id must be the same as the item id in the scene. Otherwise, an ArgumentException will be thrown.
|
||||
#备注:id必须和场景内的物品id保持一致。否则会抛出ArgumentException。
|
||||
#After you declare the id of the item, add the corresponding localized text to the csv file in the locals' folder. For example, if the id is a corresponding name is item_a and the corresponding description is item_a_desc.
|
||||
#当您声明物品的id后,请在locals文件夹中的csv文件中添加相应的本地化文本。例如:id为a,则对应的名称为item_a,对应的描述为item_a_desc。
|
||||
|
||||
#portable_backpacks
|
||||
#便携式背包
|
||||
- id: portable_backpacks
|
||||
scene_path: res://prefab/packsacks/PortableBackpacks.tscn
|
||||
icon_path: res://sprites/PortableBackpacks.png
|
||||
max_stack_value: 1
|
25
data/itemRegs/weapons.yaml
Normal file
25
data/itemRegs/weapons.yaml
Normal file
|
@ -0,0 +1,25 @@
|
|||
#Register your weapon here.
|
||||
#在这里注册你的武器。
|
||||
#Note: The id must be the same as the item id in the scene. Otherwise, an ArgumentException will be thrown.
|
||||
#备注:id必须和场景内的物品id保持一致。否则会抛出ArgumentException。
|
||||
#After you declare the id of the item, add the corresponding localized text to the csv file in the locals' folder. For example, if the id is a corresponding name is item_a and the corresponding description is item_a_desc.
|
||||
#当您声明物品的id后,请在locals文件夹中的csv文件中添加相应的本地化文本。例如:id为a,则对应的名称为item_a,对应的描述为item_a_desc。
|
||||
|
||||
#staff_necromancy
|
||||
#死灵法杖
|
||||
# The Necromancy Staff will act differently on different difficulties.
|
||||
#死灵法杖在不同的难度下会有不同的行为。
|
||||
#The probability of generating monsters is as follows:Hard mode 100%, Normal mode 75%, easy mode 5%
|
||||
#以下是在击杀敌人后生成怪物的概率:困难模式100%,普通模式75%,简单模式5%
|
||||
- id: staff_necromancy
|
||||
scene_path: res://prefab/weapons/StaffNecromancy.tscn
|
||||
icon_path: res://sprites/weapon/StaffNecromancy_Icon.png
|
||||
max_stack_value: 1
|
||||
- id: iron_axe
|
||||
scene_path: res://prefab/weapons/IronAxe.tscn
|
||||
icon_path: res://sprites/weapon/StaffNecromancy_Icon.png
|
||||
max_stack_value: 1
|
||||
- id: beginner_staff
|
||||
scene_path: res://prefab/weapons/BeginnerStaff.tscn
|
||||
icon_path: res://sprites/weapon/BeginnerStaff_Icon.png
|
||||
max_stack_value: 1
|
181
data/levelGraphs/test.yaml
Normal file
181
data/levelGraphs/test.yaml
Normal file
|
@ -0,0 +1,181 @@
|
|||
connection_data_list:
|
||||
- from_id: 5a284c6f-2ce5-4dba-b32e-f0fcb9e9940d
|
||||
to_id: 4de20bd2-b557-4c29-9613-d4b35ea1f239
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 4de20bd2-b557-4c29-9613-d4b35ea1f239
|
||||
to_id: 3053d123-3f71-4cd0-8f05-f821aa95c702
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 3053d123-3f71-4cd0-8f05-f821aa95c702
|
||||
to_id: fcc9333c-e70f-4a28-9029-1b1098502049
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: fcc9333c-e70f-4a28-9029-1b1098502049
|
||||
to_id: 627b8abc-abb9-4117-bdea-9f818a69f972
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 627b8abc-abb9-4117-bdea-9f818a69f972
|
||||
to_id: 478eee96-e8f6-4eea-82cd-a2ab3f54e015
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 478eee96-e8f6-4eea-82cd-a2ab3f54e015
|
||||
to_id: b2dba7b5-baab-4911-be58-7f54bdf89f86
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: fcc9333c-e70f-4a28-9029-1b1098502049
|
||||
to_id: fb43e864-e7b8-4482-a43a-34612b14aa94
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 627b8abc-abb9-4117-bdea-9f818a69f972
|
||||
to_id: fab80988-f9b6-4e53-91cd-4c063d9cb1fb
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: fb43e864-e7b8-4482-a43a-34612b14aa94
|
||||
to_id: 89805068-5b2f-4f44-92b4-58d4df704341
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: fab80988-f9b6-4e53-91cd-4c063d9cb1fb
|
||||
to_id: d28a2647-a7f3-4179-a91d-d4a1d38a7438
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 89805068-5b2f-4f44-92b4-58d4df704341
|
||||
to_id: 53abd2f0-995f-4d37-8b2f-058c70282fbd
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: 53abd2f0-995f-4d37-8b2f-058c70282fbd
|
||||
to_id: c702286c-5f8a-417b-9220-769bdfc1ea8c
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
- from_id: c702286c-5f8a-417b-9220-769bdfc1ea8c
|
||||
to_id: 310c226b-dbb2-4193-b386-7b018a725228
|
||||
from_port: 0
|
||||
to_port: 0
|
||||
room_node_data_list:
|
||||
- id: 5a284c6f-2ce5-4dba-b32e-f0fcb9e9940d
|
||||
title: 房间1
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/tutorials/spellEditor.tscn
|
||||
tags:
|
||||
- StartingRoom
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 4de20bd2-b557-4c29-9613-d4b35ea1f239
|
||||
title: 房间2
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/tutorials/tripleShotSpell.tscn
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 3053d123-3f71-4cd0-8f05-f821aa95c702
|
||||
title: 房间3
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: fcc9333c-e70f-4a28-9029-1b1098502049
|
||||
title: 房间4
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 627b8abc-abb9-4117-bdea-9f818a69f972
|
||||
title: 房间5
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 478eee96-e8f6-4eea-82cd-a2ab3f54e015
|
||||
title: 房间6
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: b2dba7b5-baab-4911-be58-7f54bdf89f86
|
||||
title: 房间7
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: fb43e864-e7b8-4482-a43a-34612b14aa94
|
||||
title: 房间8
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: fab80988-f9b6-4e53-91cd-4c063d9cb1fb
|
||||
title: 房间9
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: d28a2647-a7f3-4179-a91d-d4a1d38a7438
|
||||
title: 房间11
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 89805068-5b2f-4f44-92b4-58d4df704341
|
||||
title: 房间10
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: c702286c-5f8a-417b-9220-769bdfc1ea8c
|
||||
title: 房间13
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 53abd2f0-995f-4d37-8b2f-058c70282fbd
|
||||
title: 房间12
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
||||
- id: 310c226b-dbb2-4193-b386-7b018a725228
|
||||
title: 房间14
|
||||
description: ''
|
||||
room_template_set:
|
||||
- res://prefab/roomTemplates/dungeon/
|
||||
tags:
|
||||
room_injection_processor_data: ''
|
||||
enter_room_event_handler_id:
|
||||
exit_room_event_handler_id:
|
15
default_bus_layout.tres
Normal file
15
default_bus_layout.tres
Normal file
|
@ -0,0 +1,15 @@
|
|||
[gd_resource type="AudioBusLayout" format=3 uid="uid://cdugntqhtcyd"]
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"BGM"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = 0.0
|
||||
bus/1/send = &"Master"
|
||||
bus/2/name = &"SoundEffect"
|
||||
bus/2/solo = false
|
||||
bus/2/mute = false
|
||||
bus/2/bypass_fx = false
|
||||
bus/2/volume_db = -0.0127316
|
||||
bus/2/send = &"Master"
|
BIN
fonts/ark-pixel-12px-proportional-zh_cn.ttf
Normal file
BIN
fonts/ark-pixel-12px-proportional-zh_cn.ttf
Normal file
Binary file not shown.
34
fonts/ark-pixel-12px-proportional-zh_cn.ttf.import
Normal file
34
fonts/ark-pixel-12px-proportional-zh_cn.ttf.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cbb0bh8j0jbn0"
|
||||
path="res://.godot/imported/ark-pixel-12px-proportional-zh_cn.ttf-478ad476d12cd787ee651b8790ca25e2.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://fonts/ark-pixel-12px-proportional-zh_cn.ttf"
|
||||
dest_files=["res://.godot/imported/ark-pixel-12px-proportional-zh_cn.ttf-478ad476d12cd787ee651b8790ca25e2.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
1
icon.svg
Normal file
1
icon.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
After Width: | Height: | Size: 950 B |
37
icon.svg.import
Normal file
37
icon.svg.import
Normal file
|
@ -0,0 +1,37 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2blj0yf4ohx3"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
8
locals/Action.csv
Normal file
8
locals/Action.csv
Normal file
|
@ -0,0 +1,8 @@
|
|||
id,zh,en,ja
|
||||
action_pick_up,拾捡,Pick up ,拾います
|
||||
action_move_left,向左移动,Move left,左に移動します
|
||||
action_move_right,向右移动,Move right,右に移動します
|
||||
action_jump,跳跃,Jump,飛
|
||||
action_throw,抛出,Throw a ,ほうしゅつ
|
||||
action_use_item,使用,Use,しよう
|
||||
action_jump_down,跳下平台,Jump off platform,踊り場から飛び降ります
|
|
17
locals/Action.csv.import
Normal file
17
locals/Action.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://b0hqoab2n241u"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Action.zh.translation", "res://locals/Action.en.translation", "res://locals/Action.ja.translation"]
|
||||
|
||||
source_file="res://locals/Action.csv"
|
||||
dest_files=["res://locals/Action.zh.translation", "res://locals/Action.en.translation", "res://locals/Action.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
3
locals/Character.csv
Normal file
3
locals/Character.csv
Normal file
|
@ -0,0 +1,3 @@
|
|||
id,zh,en,ja
|
||||
character_necromancer,死灵法师,Necromancer,ネクロマンサー
|
||||
character_evil_crow,邪恶的乌鸦先生,Evil Mr. Raven,悪のミスター・レイヴン
|
|
17
locals/Character.csv.import
Normal file
17
locals/Character.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://dwrygxaehoybb"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Character.zh.translation", "res://locals/Character.en.translation", "res://locals/Character.ja.translation"]
|
||||
|
||||
source_file="res://locals/Character.csv"
|
||||
dest_files=["res://locals/Character.zh.translation", "res://locals/Character.en.translation", "res://locals/Character.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
11
locals/DeathInfo.csv
Normal file
11
locals/DeathInfo.csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
id,zh,en,ja
|
||||
#suicide
|
||||
#自杀
|
||||
death_info_self_1,{0}误伤了自己。,{0} accidentally shot themself.,{0}誤って自分を傷つけました。
|
||||
death_info_self_2,{0}忘记了瞄准。,{0} forgot to aim.,{0}照準を忘れました。
|
||||
#Died reading a separation certificate.
|
||||
#死于阅读离职证明。
|
||||
death_info_resignation_certificate,{0}阅读冷薄荷的离职证明被毒害了!(你知道的太多了),{0} Read Cold Mint's separation certificate was poisoned!(You know too much),{0}コールドミントの離職証明書を読んで毒されました!(あなたは知りすぎです)
|
||||
#Default death message
|
||||
#默认死亡信息
|
||||
death_info_default,{0}被{1}杀死了。,{0} is killed by {1}.,{0}は{1}に殺されました。
|
|
17
locals/DeathInfo.csv.import
Normal file
17
locals/DeathInfo.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://dwx0hwuy0uqio"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/DeathInfo.zh.translation", "res://locals/DeathInfo.en.translation", "res://locals/DeathInfo.ja.translation"]
|
||||
|
||||
source_file="res://locals/DeathInfo.csv"
|
||||
dest_files=["res://locals/DeathInfo.zh.translation", "res://locals/DeathInfo.en.translation", "res://locals/DeathInfo.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
2
locals/InputMapping.csv
Normal file
2
locals/InputMapping.csv
Normal file
|
@ -0,0 +1,2 @@
|
|||
id,zh,en,ja
|
||||
Left Mouse Button,鼠标左键,Left Mouse Button,マウスの左ボタンです
|
|
17
locals/InputMapping.csv.import
Normal file
17
locals/InputMapping.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://dvvc7sup2d2ii"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/InputMapping.zh.translation", "res://locals/InputMapping.en.translation", "res://locals/InputMapping.ja.translation"]
|
||||
|
||||
source_file="res://locals/InputMapping.csv"
|
||||
dest_files=["res://locals/InputMapping.zh.translation", "res://locals/InputMapping.en.translation", "res://locals/InputMapping.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
21
locals/Item.csv
Normal file
21
locals/Item.csv
Normal file
|
@ -0,0 +1,21 @@
|
|||
id,zh,en,ja
|
||||
item_staff_necromancy,死灵法杖,staffNecromancy,ネクロポリスの杖です
|
||||
item_staff_necromancy_desc,发射诅咒,可将敌人转化为邪恶的怪物。,Cast a curse that transforms enemies into evil monsters.,呪いを発射して、敵を邪悪な怪物に変えることができます。
|
||||
item_portable_backpacks,便携式背包,PortableBackpacks,ポータブルバックパック
|
||||
item_portable_backpacks_desc,为玩家提供9个物品槽。,Provides 9 item slots for the player.,プレイヤーに9つのアイテムスロットを提供します。
|
||||
item_necromancy,死灵法术,necromancy,ネクロマンシー
|
||||
item_necromancy_desc,法术的实体化弹丸。,The materialized projectile of a spell.,術の実体化した弾丸です。
|
||||
item_x3,三重射击法术,Triple shot spell,三重射撃術です
|
||||
item_x3_desc,使发射器一次射出三颗弹丸。,Make the launcher shoot three pellets at a time.,発射機から一度に三つの弾丸を発射させます。
|
||||
item_resignation_certificate,离职证明,Resignation certificate,退職証明書です
|
||||
item_resignation_certificate_desc,冷薄荷,感谢您在职时为公司做出的贡献。,"Cold Mint, thank you for your service to the company.",コールドミント、現役時代のご貢献ありがとうございました。
|
||||
item_iron_axe,铁斧子,Iron axe,鉄の斧です
|
||||
item_iron_axe_desc,铁斧子,Iron axe,鉄の斧です
|
||||
item_curse,死灵诅咒法术,The curse of the Dead,死霊呪いの術
|
||||
item_curse_desc,杀死敌人后在生成死灵敌人。,Spawn Undead enemies after killing them.,敵を殺すと死霊敵が発生します。
|
||||
item_beginner_staff,初学者法杖,Beginner's staff,初心者用の杖です
|
||||
item_beginner_staff_desc,送给初来乍到的冒险家。,For new adventurers.,初心者の冒険家に贈ります。
|
||||
item_magic_missile,魔法飞弹,Magic missile,魔法のミサイルです
|
||||
item_magic_missile_desc,轻快的法术。,A light spell.,軽快な術です。
|
||||
item_tracking_spell,追踪法术,Tracking spell,追跡術です
|
||||
item_tracking_spell_desc,使发射的子弹追踪敌人,Let the fired bullets track the enemy,発射した弾丸で敵を追跡させます
|
|
17
locals/Item.csv.import
Normal file
17
locals/Item.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://dydilbm2stxr4"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Item.zh.translation", "res://locals/Item.en.translation", "res://locals/Item.ja.translation"]
|
||||
|
||||
source_file="res://locals/Item.csv"
|
||||
dest_files=["res://locals/Item.zh.translation", "res://locals/Item.en.translation", "res://locals/Item.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
132
locals/Log.csv
Normal file
132
locals/Log.csv
Normal file
|
@ -0,0 +1,132 @@
|
|||
id,zh,en,ja
|
||||
log_map_generator_is_running,地图生成器正在运行中,请稍后重试。,"Map Generator is running, please try again later.",マップ生成器が動作中ですので、後ほどリトライしてください。
|
||||
log_missing_parameters,缺少参数。,Missing parameters.,パラメータが不足しています。
|
||||
log_room_root_node_must_be_node2d,房间根节点必须是 Node2D。,Room root node must be an instance of Node2D.,ルートノードはNode2Dでなければなりません。
|
||||
log_width_or_height_of_room_slot_must_be_1,房间槽的宽度或高度必须为1。,The width or height of the room slot must be 1.,部屋の溝の幅または高さは1でなければなりません。
|
||||
log_connected_room_timeout,连接房间超时。,Timeout when connecting rooms.,接続部屋はタイムアウトです。
|
||||
log_map_generator_missing_parameters,地图生成器缺少参数。,Map generator missing parameters.,マップジェネレータが不足しています。
|
||||
log_map_generator_attempts_to_parse_empty_layout_diagrams,地图生成器尝试解析空的布局图。,Map generator attempts to parse empty layout diagrams.,マップジェネレータは空のレイアウト図を解析しようとしています。
|
||||
log_map_generator_has_no_starting_room_data,地图生成器没有起点房间数据。,Map generator has no starting room data.,マップ生成器に起点部屋データはありません。
|
||||
log_room_placement_strategy_terminates_map_generation,房间的放置策略终止了地图生成。,The room placement strategy terminates map generation.,部屋の配置ポリシーはマップ作成を終了します。
|
||||
log_start_room_placement_information_returns_empty,起始房间放置信息返回空。,Start room placement information returns empty.,スタートルーム放置情報は空に戻ります。
|
||||
log_start_room_placement_failed,起始房间放置失败。,Start room placement failed.,スタートルーム放置失敗です。
|
||||
log_room_data_missing,房间数据缺失。,Missing room data.,部屋データが欠落しています。
|
||||
log_failed_to_calculate_the_room_location,计算房间{0}位置时失败。,Failed to calculate the location of room {0}.,部屋{0}の位置を計算するのに失敗します。
|
||||
log_place_existing_rooms,放置已存在的房间{0}。,Place existing rooms {0}.,既存の部屋を置きます{0}。
|
||||
log_room_placement_failed,房间{0}放置失败。,Room {0} placement failed.,部屋{0}の放置に失敗します。
|
||||
log_room_placement_information,房间{0}已被成功放置在{1}。,Room {0} has been successfully placed in {1}.,部屋{0}を{1}に配置しました。
|
||||
log_room_injection_processor_does_not_exist,找不到房间注入处理器{0},请检测是否在MapGenerator内注册。,"Room injection processor {0} not found, check to see if it is registered in MapGenerator.",部屋注入プロセッサ{0}が見つかりません、MapGenerator内に登録されているかどうか検出してください。
|
||||
log_time_range_debug,当前时间:{0}起始时间:{1},结束时间{2},是否在范围内{3},"Current time: {0} Start time: {1}, end time {2}, whether in range {3}",現在時間:{0}開始時間:{1}終了時間{2}範囲内かどうか{3}です
|
||||
log_player_spawn_debug,玩家{0}生成在{1}。,"Player {0} spawned at {1}.",プレイヤー{0}が{1}に生成されました。
|
||||
log_player_packed_scene_not_exist,玩家预制场景不存在。,Player packed scene does not exist.,プレイヤーのパックされたシーンが存在しません。
|
||||
log_exit_the_room_debug,节点{0}退出房间{1}。,"Node {0} exits room {1}.",ノード{0}が部屋{1}を退出します。
|
||||
log_enter_the_room_debug,节点{0}进入房间{1}。,"Node {0} enters room {1}.",ノード{0}が部屋{1}に入ります。
|
||||
log_death_info,生物{0}被{1}击败。,"Creature {0} was defeated by {1}.",生物{0}が{1}によって打ち負かされました。
|
||||
log_appConfig_not_exist,您可以在项目根目录创建名为AppConfig.yaml的文件,并在其中配置OpenObserve的数据,以便在游戏发布后持续收集日志和运行数据。,You can create a file named AppConfig.yaml in the project root directory and configure OpenObserve data in it to collect log and run data continuously after the game has been released.,プロジェクトのルートディレクトリにappconfig.yamlというファイルを作成し、そこにOpenObserveのデータを配置して、リリース後も継続的にログや実行データを収集することができます。
|
||||
log_loot_list_has_no_entries,ID为{0}的战利品表,没有指定条目。,"Loot list with ID {0}, no entry specified.",ID{0}の戦利品テーブルは、エントリ指定されていません。
|
||||
log_not_within_the_loot_spawn_range,给定的数值{0}没有在战利品{1}的生成范围{2}内。,The given value {0} is not within the spawn range {2} of loot {1}.,与えられた数値{0}は戦利品{1}の生成範囲{2}内にありません。
|
||||
log_loot_data_quantity,有{0}个战利品数据被返回。,{0} loot data was returned.,{0}個の戦利品データが返されます。
|
||||
log_loot_data_add,生成战利品{0},Add loot {0},戦利品{0}を生成する
|
||||
log_warning_node_cannot_cast_to,创建的物品{0}无法被转型为类型{1},Created items {0} cannot be cast into type {1},作成されたアイテム {0} をタイプ {1} にキャストすることはできません。
|
||||
log_start_item_register_from_file,开始从文件注册物品信息,Start registering item information from files,アイテム情報をファイルから登録開始
|
||||
log_found_files,找到{0}个文件,Found {0} files,{0}ファイルが見つかりました
|
||||
log_found_item_types,从文件中找到{0}个物品类型,Found {0} item types in files,ファイルから{0}個のアイテム・タイプが見つかった
|
||||
log_register_item,注册物品类型{0}结果为{1},Registered item type {0}; results in {1},登録されたアイテム・タイプ {0} の結果は {1} です。
|
||||
log_error_when_open_item_regs_dir,尝试打开物品信息目录{0}时发生错误,错误代码:{1},"An error occurred when trying to open the item information directory {0}, error code: {1}",アイテム情報ディレクトリ{0}を開こうとしてエラーが発生しました、エラーコード:{1}
|
||||
log_wrong_custom_arg,不匹配的参数:类型为{0}而值为{1},Mismatched parameter: type {0} and value {1},パラメータの不一致:型{0}と値{1}。
|
||||
log_item_container_is_null,物品容器为空,Item container is null,アイテム・コンテナが空です
|
||||
log_try_to_open_state_machine_that_is_on,尝试打开处于运行状态的状态机。,Try to open a state machine that is on.,実行中のステートマシンを開こうとしています。
|
||||
log_state_machine_does_not_specify_context,状态机没有指定上下文。,The state machine does not specify a context.,ステートマシンはコンテキストを指定していません。
|
||||
log_state_processor_already_registered,状态处理器已经注册。,State processor already registered.,ステートプロセッサは既に登録されています。
|
||||
log_state_machine_does_not_specify_processor,状态机没有指定处理器。,The state machine does not specify a processor.,ステートマシンはプロセッサを指定していません。
|
||||
log_try_to_set_the_same_state,尝试设置相同的状态。,Try to set the same state.,同じ状態を設定しようとしています。
|
||||
log_state_machine_does_not_specify_active_processor,状态机没有指定活动处理器。,The state machine does not specify an active processor.,ステートマシンはアクティブプロセッサを指定していません。
|
||||
log_no_points,巡逻路径没有点。,The patrol path has no points.,巡回路にポイントがありません。
|
||||
log_patrol_to_next_point,下一个点{0},当前位置{1},偏移量{2},距离为{3}。,"Next point {0}, current position {1}, offset {2}, distance {3}.",次のポイント{0}、現在の位置{1}、オフセット{2}、距離{3}。
|
||||
log_patrol_arrival_point,到达巡逻点{0}。,Arrival at patrol point {0}.,巡回ポイント{0}に到着します。
|
||||
log_patrol_origin_position,巡逻路径的起始位置是{0}。,The starting position of the patrol path is {0}.,巡回路の開始位置は{0}です。
|
||||
log_patrol_not_on_floor,不能将初始路径设置在空中。,The initial path cannot be set in the air.,初期パスを空中に設定できません。
|
||||
log_can_add_item,可以添加物品{0}。,Can add item {0}.,アイテム{0}を追加できます。
|
||||
log_patrol_enemy_detected,检测到敌人。,Enemy detected.,敵を検出しました。
|
||||
log_attacker_or_target_is_null,攻击者或目标为空。,Attacker or target is null.,攻撃者またはターゲットが空です。
|
||||
log_in_the_same_camp,在同一阵营。,In the same camp.,同じ陣営です。
|
||||
log_friendly_target,友好目标。,Friendly target.,友好的なターゲットです。
|
||||
log_can_cause_harm,可以造成伤害。,Can cause harm.,ダメージを与えることができます。
|
||||
log_camp_is_null,阵营为空。,Camp is null.,陣営が空です。
|
||||
log_set_default_camp,设置默认阵营{0}。,Set default camp {0}.,デフォルトの陣営{0}を設定します。
|
||||
log_state_change,状态变更从{0}到{1}。,State change from {0} to {1}.,状態が{0}から{1}に変更されます。
|
||||
log_state_processor_not_found,找不到状态处理器{0}。,State processor {0} not found.,ステートプロセッサ{0}が見つかりません。
|
||||
log_chase_no_enemy,追逐没有敌人。,Chase no enemy.,敵がいない追跡です。
|
||||
log_bubble_not_found,找不到气泡{0}。,Bubble {0} not found.,バブル{0}が見つかりません。
|
||||
log_owner_is_not_AiCharacter,所有者不是AiCharacter。,Owner is not AiCharacter.,所有者はAiCharacterではありません。
|
||||
log_find_nearest_item,查找最近的物品。,Find the nearest item.,最も近いアイテムを見つけます。
|
||||
log_float_label_instantiate_failed,浮动标签实例化失败。,Float label instantiation failed.,フロートラベルのインスタンス化に失敗しました。
|
||||
log_pickable_picked_up,可拾捡物被捡起了,那么不显示标签。,"If the pickable item is picked up, the label is not displayed.",でも、拾得物が拾い上げられたら、ラベルは表示されません。
|
||||
log_weapon_detected,检测到武器。,Weapon detected.,武器が検出されました。
|
||||
log_no_weapon_detected,没有检测到武器。,No weapon detected.,武器が検出されません。
|
||||
log_weapon_lost,武器丢失。,Weapon lost.,武器が失われました。
|
||||
log_nearest_node_is_null,最近的节点为空。,The nearest node is null.,最も近いノードが空です。
|
||||
log_node_is_not_WeaponTemplate,节点不是WeaponTemplate。,The node is not a WeaponTemplate.,ノードはWeaponTemplateではありません。
|
||||
log_weapon_not_in_pickup_range,武器不在拾取范围内。,The weapon is not within the pickup range.,武器は拾い取り範囲内にありません。
|
||||
log_weapon_picked_up,武器被拾取。,Weapon picked up.,武器が拾い取られました。
|
||||
log_weapon_pickup_failed,武器拾取失败。,Weapon pickup failed.,武器の拾い取りに失敗しました。
|
||||
log_enter_the_picking_range_body,进入拾取范围。,Enter the picking range.,拾い取り範囲に入ります。
|
||||
log_exit_the_picking_range_body,退出拾取范围。,Exit the picking range.,ピックアップ範囲から外します。
|
||||
log_search_for_weapon_timeout,搜索武器超时。,Search for weapon timeout.,武器の検索がタイムアウトしました。
|
||||
log_initialize_the_context,初始化上下文环境。,Initialize the context environment.,コンテキスト環境を初期化します。
|
||||
log_initialize_the_context_failed,初始化上下文环境失败。,Initialize the context environment failed.,コンテキスト環境の初期化に失敗しました。
|
||||
log_get_dll_folder_failed,获取DLL文件夹失败。,Failed to get the DLL folder.,DLLフォルダの取得に失敗しました。
|
||||
log_dll_not_exist,位于{0}的Dll文件不存在。,The Dll file located at {0} does not exist.,{0}にあるDLLファイルが存在しません。
|
||||
log_load_dll,开始加载位于{0}的DLL文件。,Start loading the DLL file located at {0}.,{0}にあるDLLファイルのロードを開始します。
|
||||
log_load_dll_argument_exception,{0}不是绝对路径。,{0} is not an absolute path.,{0}は絶対パスではありません。
|
||||
log_load_dll_argument_null_exception,{0}参数为空。,The {0} parameter is empty.,{0}パラメータが空です。
|
||||
log_load_dll_file_load_exception,加载DLL文件{0}失败。,Failed to load the DLL file {0}.,DLLファイル{0}のロードに失敗しました。
|
||||
log_load_dll_bad_image_format_exception,{0}不是有效的程序集。,{0} is not a valid assembly.,{0}は有効なアセンブリではありません。
|
||||
log_load_dll_success,成功加载位于{0}的dll文件。,Successfully loaded the dll file located at {0}.,{0}にあるDLLファイルを正常にロードしました。
|
||||
log_mod_folder_does_not_exist,位于{0}的模组文件夹不存在。,The module folder at {0} does not exist.,{0}に位置するモジュールフォルダは存在しません。
|
||||
log_mod_not_contain_dll,模组{0}不包含DLL文件。,The module {0} does not contain a DLL file.,モジュール{0}にDLLファイルが含まれていません。
|
||||
log_mod_not_contain_pck,模组{0}不包含PCK文件。,The module {0} does not contain a PCK file.,モジュール{0}にPCKファイルが含まれていません。
|
||||
log_load_pck_success,成功加载位于{0}的PCK文件。,Successfully loaded the PCK file located at {0}.,{0}にあるPCKファイルを正常にロードしました。
|
||||
log_load_pck_failed,加载PCK文件{0}失败。,Failed to load the PCK file {0}.,PCKファイル{0}のロードに失敗しました。
|
||||
log_projectile_container_is_null,抛射体容器为空。,Projectile container is null.,射出体コンテナが空です。
|
||||
log_marker2d_is_null,Marker2D为空。,Marker2D is null.,Marker2Dが空です。
|
||||
log_owner_is_null,所有者为空。,Owner is null.,所有者が空です。
|
||||
log_dll_name,已加载{0}。,Loaded {0}.,{0}をロードしました。
|
||||
log_dll_does_not_register_lifecycle_processor,位于{0}的dll文件,未注册生命周期处理器{1}。,"The DLL file located at {0} does not register the lifecycle processor {1}.",{0}にあるDLLファイルは、ライフサイクルプロセッサ{1}を登録していません。
|
||||
log_mod_lifecycle_handler_not_implement_interface,位于{0}的dll文件,生命周期处理器未实现IModLifecycleHandler接口。,"The DLL file located at {0}, the lifecycle processor does not implement the IModLifecycleHandler interface.",{0}にあるDLLファイル、ライフサイクルプロセッサはIModLifecycleHandlerインターフェースを実装していません。
|
||||
log_dll_no_parameterless_constructor,位于{0}的dll文件,没有无参构造函数。,"The DLL file located at {0} does not have a parameterless constructor.",{0}にあるDLLファイルにはパラメータのないコンストラクタがありません。
|
||||
log_dll_type_length,位于{0}的dll文件内,共包含{1}个类型。,"The DLL file located at {0} contains a total of {1} types.",{0}にあるDLLファイルには合計{1}個のタイプが含まれています。
|
||||
log_after_no_longer_in_contact_with_any_tiles,不再与任何瓦片接触后,可以造成伤害。,"After no longer coming into contact with any tiles, it can cause damage",タイルと接触しなくなった後、損傷を引き起こす可能性があります。
|
||||
log_contact_with_tiles_disables_damage,与瓦片接触禁用伤害。,"Disabling damage on contact with tiles",タイルとの接触によるダメージの無効化
|
||||
log_hide_all_node,隐藏{0}个节点。,Hide {0} nodes.,{0}ノードを非表示にします。
|
||||
log_show_all_node,显示{0}个节点。,Show {0} nodes.,{0}ノードが表示されます。
|
||||
log_enter_the_screen,进入屏幕。,Enter screen,画面に移動。
|
||||
log_exit_the_screen,退出屏幕。,Exit screen,画面を終了します。
|
||||
log_failed_to_create_room_preview,创建{0}的房间预览图失败。,Failed to create a room preview of the {0}.,{0}の部屋のプレビューを作成できませんでした。
|
||||
log_generated_item_is_empty,生成的物品{0}是空的吗{1}。,Generated item {0} is empty {1}.,生成したアイテム{0}は空ですか{1}。
|
||||
log_projectile_generate_magic_is_null,没有装填可提供抛射体的法术。,There is no reload spell that provides projectiles.,射出体を提供するスペルを装填していません。
|
||||
log_projectile_scene_is_null,抛射体场景为空。,Projectile scene is empty.,射出体は空です。
|
||||
log_projectile_is_null,抛射体为空。,Projectile scene is empty.,射出シーンは空です。
|
||||
log_projectile_weapon_range,加载法术范围{0}顺序模式吗{1}上次发射法术时采用的索引{2}。,Load spell range {0} Sequential mode {1} Index used when the spell was last fired {2}.,スペル範囲{0}順序モードですか{1}前回スペルを送信した時のインデックス{2}。
|
||||
log_no_platform_detection_raycast_found,缺少必要的平台检测射线。,Lack of necessary platform detection rays.,放射線を検出するのに必要なプラットフォームが不足しています。
|
||||
log_hide_display_item,项目{0}被隐藏了。,Item {0} is hidden.,アイテム{0}は非表示にされます。
|
||||
log_add_display_item,添加项目{0}。,Add item {0}.,項目{0}を追加します。
|
||||
log_update_display_item,更新项目{0}。,Update item {0}.,更新項目{0}です。
|
||||
log_batch_update_data,批量更新数据开始为{0}结束为{1}.,Batch update data starts with {0} and ends with {1}.,一括更新データの開始を{0}、終了を{1}とします。
|
||||
log_new_room_node_data_is_incomplete,新房间{0}数据不全。,New room {0} data is incomplete.,新しい部屋{0}はデータが不完全です。
|
||||
log_parent_room_does_not_exist,放置房间{0}时父级房间不存在。,The parent room does not exist when room {0} is placed.,部屋{0}を置いても親部屋は存在しません。
|
||||
log_room_template_does_not_exist,放置房间{0}房间模板不存在。,Room template does not exist when placing room {1}.,部屋{0}を置いた時点では部屋テンプレートは存在しません。
|
||||
log_room_slot_does_not_exist,放置房间{0}房间槽位不存在。,Room slot does not exist when placing room {0}.,置き部屋{0}部屋スロットは存在しません。
|
||||
log_available_rooms_are_not_available,放置房间{0}时,可用房间不存在。,"When placing room {0}, the available room does not exist.",部屋{0}を置いた場合、利用可能な部屋は存在しません。
|
||||
log_room_corresponding_to_resource_is_null,放置房间{0}时,资源{1}对应的房间为null.,"When room {0} is placed, the room corresponding to resource {1} is null.",部屋{0}を置く場合、リソース{1}に対応する部屋はnullとなります。
|
||||
log_slots_do_not_match,放置房间{0}时,槽位不匹配。,"When placing room {0}, the slots do not match.",部屋{0}を置く時、溝の位置が一致しません。
|
||||
log_slot_incomplete,放置房间{0}时,槽位不完整。,The slot is incomplete when placing room {0}.,部屋{0}を置く場合、溝の位置が不完全です。
|
||||
log_placement_position_is_empty,房间{0}放置位置为空。,The room {0} position is empty.,部屋{0}を空にします。
|
||||
log_parameter_inconsistency,参数不齐。,Parameter inconsistency.,パラメーターが不揃いです。
|
||||
log_room_slot_position_is_empty,房间位置描述为空。,Room location is described as empty.,部屋の位置は空です。
|
||||
log_room_overlap,房间重叠。,The rooms overlap.,部屋が重なります。
|
||||
log_game_over_event_is_empty,游戏结束事件为空。,End of game event is empty.,ゲームオーバーでイベントは空です。
|
||||
log_cannot_resurrect_non_existent_player,不能复活不存在的玩家。,Cannot resurrect non-existent players.,存在しないプレイヤーを復活させることはできません。
|
||||
log_no_audio_stream_player,没有音频播放器组件。,No audio player component.,オーディオプレーヤーキットはありません。
|
||||
log_audio_stream_player_is_playing,音频播放器正在播放中。,The audio player is playing.,オーディオプレーヤーが再生中です。
|
||||
log_play_audio,播放音频BUS为{0}Stream为{1}.,BUS is {0} and Stream is {1}.,再生オーディオはBUSが{0}Streamが{1}です。
|
|
17
locals/Log.csv.import
Normal file
17
locals/Log.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://btmjafjh5r6bk"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Log.zh.translation", "res://locals/Log.en.translation", "res://locals/Log.ja.translation"]
|
||||
|
||||
source_file="res://locals/Log.csv"
|
||||
dest_files=["res://locals/Log.zh.translation", "res://locals/Log.en.translation", "res://locals/Log.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
3
locals/Misc.csv
Normal file
3
locals/Misc.csv
Normal file
|
@ -0,0 +1,3 @@
|
|||
id,zh,en,ja
|
||||
default_player_name,白纸,blankPaper,しらかみ
|
||||
item_prompt_debug,ID:{0}\n名称:{1}\n数量:{2}\n最大叠加数量:{3}\n数据类型:{4}\n描述:{5},ID: {0}\nName: {1}\nQuantity: {2}\nMaximum stacking quantity: {3}\nData type: {4}\nDescription:{5},id:{0}\n名称:{1}\nの数は最大{2}\nシナジー数:{3}\nデータタイプ:{4}\n述べ表わす:{5}
|
|
17
locals/Misc.csv.import
Normal file
17
locals/Misc.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://bdyf1nkmm3h6c"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Misc.zh.translation", "res://locals/Misc.en.translation", "res://locals/Misc.ja.translation"]
|
||||
|
||||
source_file="res://locals/Misc.csv"
|
||||
dest_files=["res://locals/Misc.zh.translation", "res://locals/Misc.en.translation", "res://locals/Misc.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
11
locals/Slogan.csv
Normal file
11
locals/Slogan.csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
id,zh,en,ja
|
||||
slogan_0,游戏属于每一个人。,The game belongs to everyone.,ゲームはすべての人のものです。
|
||||
slogan_1,Kawaii!,Kawaii!,Kawaii!
|
||||
slogan_2,魔法是想象的世界。,Magic is an imaginary world.,魔法は想像の世界です。
|
||||
slogan_3,也试试《Minecraft》!,Also try 'Minecraft'!,「Minecraft」もやってみて!
|
||||
slogan_4,也试试《Terraria》!,Also try 'Terraria'!,「Terraria」もやってみて!
|
||||
slogan_5,也试试《Terraria》!,Also try 'Terraria'!,「Terraria」もやってみて!
|
||||
slogan_6,游戏在bug上运行。,The game runs on a bug.,ゲームはバグで動作します。
|
||||
slogan_7,こんにちは!,こんにちは!,こんにちは!
|
||||
slogan_7,你好!,你好!,你好!
|
||||
slogan_7,Hello!,Hello!,Hello!
|
|
17
locals/Slogan.csv.import
Normal file
17
locals/Slogan.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://dl2r1rydlm7pa"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/Slogan.zh.translation", "res://locals/Slogan.en.translation", "res://locals/Slogan.ja.translation"]
|
||||
|
||||
source_file="res://locals/Slogan.csv"
|
||||
dest_files=["res://locals/Slogan.zh.translation", "res://locals/Slogan.en.translation", "res://locals/Slogan.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
1
locals/SloganOnMap.csv
Normal file
1
locals/SloganOnMap.csv
Normal file
|
@ -0,0 +1 @@
|
|||
id,zh,en,ja
|
|
17
locals/SloganOnMap.csv.import
Normal file
17
locals/SloganOnMap.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://ckggihhjkgp20"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/SloganOnMap.zh.translation", "res://locals/SloganOnMap.en.translation", "res://locals/SloganOnMap.ja.translation"]
|
||||
|
||||
source_file="res://locals/SloganOnMap.csv"
|
||||
dest_files=["res://locals/SloganOnMap.zh.translation", "res://locals/SloganOnMap.en.translation", "res://locals/SloganOnMap.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
42
locals/UI.csv
Normal file
42
locals/UI.csv
Normal file
|
@ -0,0 +1,42 @@
|
|||
id,zh,en,ja
|
||||
ui_product_name,异界旅人,A traveler from another world,異界の旅人です
|
||||
ui_start_game,开始游戏,Start game,ゲームを始めます
|
||||
ui_settings,设置,Settings,備え付け
|
||||
ui_level_graph_editor,关卡图编辑器,Level graph editor,ステージマップエディター
|
||||
ui_create_room,创建房间,Create room,部屋を作ります
|
||||
ui_close,关闭,Close,閉じます
|
||||
ui_name,名称,Name,めいしょう
|
||||
ui_describe,描述,Describe,ないよう
|
||||
ui_creation,创建,Creation,創建
|
||||
ui_default_room_name,房间{0},Room{0},部屋{0}です
|
||||
ui_room_template_collection_prompt,房间模板集(传入路径为文件夹,将选择文件夹内的所有子文件),"Room template set (incoming path is folder, all subfiles in folder will be selected)",部屋テンプレートセット(着信経路をフォルダにして、フォルダ内のすべてのサブファイルを選択します。)
|
||||
ui_error_specifying_room_template_line,位于{0}错误,文件或文件夹不存在。,"Located at {0} error, file or folder does not exist.",{0}エラーに位置し、ファイルやフォルダが存在しません。
|
||||
ui_line_errors_must_start_with_res,位于{0}错误,必须以res://开头。,"Located at {0} error, must start with res://.",{0}エラーに位置し、res://で始めなければなりません。
|
||||
ui_open_the_export_directory,打开导出目录,Open the export directory,エクスポートディレクトリを開きます
|
||||
ui_save,保存,Save,セーブ
|
||||
ui_filename,文件名,File name,ファイル名
|
||||
ui_cancel,取消,Cancel,キャンセル
|
||||
ui_load,加载,Load,ロード
|
||||
ui_delete_selected_node,删除选中的节点,Delete selected node,選択されたノードを削除します
|
||||
ui_re_create_map,重新创建地图,Re-create map,地図を再作成します
|
||||
ui_seed_info,种子:{0},Seed: {0},シード:{0}
|
||||
ui_tags,标签,Tags,と呼ぶ
|
||||
ui_room_injection_processor,房间注入处理器,Room injection processor,部屋注入処理器
|
||||
ui_game_over_title,游戏结束!,Game Over!,ゲームオーバー!
|
||||
ui_death_info_describe,死因,death,死因
|
||||
ui_restart,重新开始,Restart,ぶり返す
|
||||
ui_contributor_tips,由{0}位贡献者共同打造,Built by {0} contributors,{0}のコントリビューターが共同で作り上げました
|
||||
ui_contributor,贡献者,contributor,貢献者です
|
||||
ui_coder,编程,coder,程序设计
|
||||
ui_artist,美术,artist,びじゅつ
|
||||
ui_musician,音乐,musician,音楽
|
||||
ui_character_voice,角色配音,character_voice,キャラクターボイスです
|
||||
ui_translator,翻译,translator,翻訳
|
||||
ui_unordered_list_tip,排名不分先后,Ranking is not in order,順位は関係ありません
|
||||
ui_loading,正在加载...,Loading...,読み込み中...
|
||||
ui_spell_editor,法术编辑器,Spell editor,スペルエディター
|
||||
ui_rebuild_the_world,正在重新构建世界...,Is reconstructing the world...,世界を再構築しています…
|
||||
ui_tutorial_spellEditor,按E捡起地上的武器,\n法杖需要搭配法术使用,\n靠近工作台,\n鼠标左键使用工作台。\n鼠标左键拖动物品,\n以实现在不同的容器之间移动它们。,"Press E to pick up the weapon on the ground, \nthe wand needs to be used with the spell, \nclose to the workbench, \nthe left mouse button to use the workbench.\nDrag items with the left mouse button \nto move them between different containers.",Eを押して地面の武器を拾い上げます。\n杖は魔法と組み合わせて使います。\n作業台に近づいて、\nマウスの左ボタンで作業台を使います。\nマウスの左ボタンでモノをドラッグすると、\nさまざまな容器の間を移動できます。
|
||||
ui_tutorial_break_box,鼠标左键使用武器打破箱子->,"Use the left mouse button to \nbreak the box with the weapon->",マウスの左ボタンで箱を破ります->
|
||||
ui_tutorial_jump_onto_platform,W跳上平台,\nS从平台上跳下。,"W jumps onto the platform, \nS jumps off the platform.",Wは踊り場に、\nSは踊り場に飛び降りるのです。
|
||||
ui_tutorial_combine_more_powerful_spells,组合更强力的法术->,Combine more powerful spells->,より強力な術を組み合わせます->
|
|
17
locals/UI.csv.import
Normal file
17
locals/UI.csv.import
Normal file
|
@ -0,0 +1,17 @@
|
|||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://bpdkorm7lprma"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://locals/UI.zh.translation", "res://locals/UI.en.translation", "res://locals/UI.ja.translation"]
|
||||
|
||||
source_file="res://locals/UI.csv"
|
||||
dest_files=["res://locals/UI.zh.translation", "res://locals/UI.en.translation", "res://locals/UI.ja.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
3
prefab/MainCamera.tscn
Normal file
3
prefab/MainCamera.tscn
Normal file
|
@ -0,0 +1,3 @@
|
|||
[gd_scene format=3 uid="uid://briehpw3eg1i6"]
|
||||
|
||||
[node name="Camera2D" type="Camera2D"]
|
104
prefab/entitys/BlackenedAboriginalWarrior.tscn
Normal file
104
prefab/entitys/BlackenedAboriginalWarrior.tscn
Normal file
|
@ -0,0 +1,104 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://dxx1vqpecig7i"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/character/AiCharacter.cs" id="1_ubaid"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1yxhtiqrfvvp" path="res://sprites/character/BlackenedAboriginalWarrior.png" id="2_pcmq1"]
|
||||
[ext_resource type="Script" path="res://scripts/damage/DamageNumberNodeSpawn.cs" id="3_kiam3"]
|
||||
[ext_resource type="PackedScene" uid="uid://sqqfrmikmk5v" path="res://prefab/ui/HealthBar.tscn" id="4_gt388"]
|
||||
[ext_resource type="Script" path="res://scripts/bubble/BubbleMarker.cs" id="5_y2fh5"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_f8frw"]
|
||||
size = Vector2(40, 46)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_a3myh"]
|
||||
size = Vector2(46, 65)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_qumby"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_pcmq1")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_c61vr"]
|
||||
radius = 220.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_fowd5"]
|
||||
radius = 300.0
|
||||
|
||||
[node name="BlackenedAboriginalWarrior" type="CharacterBody2D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 38
|
||||
script = ExtResource("1_ubaid")
|
||||
InitWeaponId = "staff_necromancy"
|
||||
CharacterName = "character_evil_crow"
|
||||
CanMutateAfterDeath = false
|
||||
MaxHp = 50
|
||||
CampId = "Mazoku"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(2, 10)
|
||||
shape = SubResource("RectangleShape2D_f8frw")
|
||||
|
||||
[node name="Area2DPickingArea" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2DPickingArea"]
|
||||
position = Vector2(0, 5.5)
|
||||
shape = SubResource("RectangleShape2D_a3myh")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = SubResource("SpriteFrames_qumby")
|
||||
|
||||
[node name="ItemMarker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(15, 20)
|
||||
|
||||
[node name="AttackObstacleDetection" type="RayCast2D" parent="ItemMarker2D"]
|
||||
collision_mask = 2
|
||||
|
||||
[node name="DamageNumber" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -32)
|
||||
script = ExtResource("3_kiam3")
|
||||
|
||||
[node name="HealthBar" parent="." instance=ExtResource("4_gt388")]
|
||||
visible = false
|
||||
offset_left = -46.0
|
||||
offset_top = 41.0
|
||||
offset_right = 50.0
|
||||
offset_bottom = 53.0
|
||||
|
||||
[node name="WallDetection" type="RayCast2D" parent="."]
|
||||
position = Vector2(3, -1)
|
||||
target_position = Vector2(50, 0)
|
||||
collision_mask = 6
|
||||
|
||||
[node name="AttackArea2D" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 68
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="AttackArea2D"]
|
||||
shape = SubResource("CircleShape2D_c61vr")
|
||||
|
||||
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
|
||||
|
||||
[node name="BubbleMarker" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -79)
|
||||
script = ExtResource("5_y2fh5")
|
||||
|
||||
[node name="ScoutArea2D" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 76
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ScoutArea2D"]
|
||||
shape = SubResource("CircleShape2D_fowd5")
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -20.0
|
||||
offset_top = 46.0
|
||||
offset_right = 15.0
|
||||
offset_bottom = 71.0
|
||||
horizontal_alignment = 1
|
71
prefab/entitys/Character.tscn
Normal file
71
prefab/entitys/Character.tscn
Normal file
|
@ -0,0 +1,71 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://cj65pso40syj5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/character/Player.cs" id="1_1dlls"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1twcink38sh0" path="res://sprites/Player.png" id="2_eha68"]
|
||||
[ext_resource type="Script" path="res://scripts/damage/DamageNumberNodeSpawn.cs" id="3_lrmsw"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bb8wt"]
|
||||
radius = 21.0
|
||||
height = 58.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_vmqbt"]
|
||||
radius = 43.566
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_qumby"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_eha68")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("_platformDetectionRayCast2DList")]
|
||||
light_mask = 2
|
||||
collision_layer = 4
|
||||
collision_mask = 162
|
||||
platform_floor_layers = 4294967042
|
||||
platform_wall_layers = 128
|
||||
script = ExtResource("1_1dlls")
|
||||
_platformDetectionRayCast2DList = [NodePath("PlatformDetectionRayCast1"), NodePath("PlatformDetectionRayCast2"), NodePath("PlatformDetectionRayCast3")]
|
||||
MaxHp = 32
|
||||
CampId = "Default"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CapsuleShape2D_bb8wt")
|
||||
|
||||
[node name="Area2DPickingArea" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2DPickingArea"]
|
||||
shape = SubResource("CircleShape2D_vmqbt")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = SubResource("SpriteFrames_qumby")
|
||||
|
||||
[node name="Parabola" type="Line2D" parent="."]
|
||||
width = 5.0
|
||||
default_color = Color(0.858824, 0.65098, 0.682353, 1)
|
||||
|
||||
[node name="PlatformDetectionRayCast1" type="RayCast2D" parent="."]
|
||||
collision_mask = 32
|
||||
|
||||
[node name="PlatformDetectionRayCast2" type="RayCast2D" parent="."]
|
||||
position = Vector2(20, 0)
|
||||
collision_mask = 32
|
||||
|
||||
[node name="PlatformDetectionRayCast3" type="RayCast2D" parent="."]
|
||||
position = Vector2(-20, 0)
|
||||
collision_mask = 32
|
||||
|
||||
[node name="ItemMarker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(15, 20)
|
||||
|
||||
[node name="DamageNumber" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -47)
|
||||
script = ExtResource("3_lrmsw")
|
||||
|
||||
[node name="AudioListener2D" type="AudioListener2D" parent="."]
|
111
prefab/entitys/DelivererOfDarkMagic.tscn
Normal file
111
prefab/entitys/DelivererOfDarkMagic.tscn
Normal file
|
@ -0,0 +1,111 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://cj65pso40syj5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/character/AiCharacter.cs" id="1_ubaid"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1twcink38sh0" path="res://sprites/Player.png" id="2_eha68"]
|
||||
[ext_resource type="Script" path="res://scripts/damage/DamageNumberNodeSpawn.cs" id="3_kiam3"]
|
||||
[ext_resource type="PackedScene" uid="uid://sqqfrmikmk5v" path="res://prefab/ui/HealthBar.tscn" id="4_gt388"]
|
||||
[ext_resource type="Script" path="res://scripts/bubble/BubbleMarker.cs" id="5_y2fh5"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bb8wt"]
|
||||
radius = 20.0
|
||||
height = 52.0
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_a3myh"]
|
||||
size = Vector2(46, 65)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_qumby"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_eha68")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_c61vr"]
|
||||
radius = 153.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_fowd5"]
|
||||
radius = 172.29
|
||||
|
||||
[node name="DelivererOfDarkMagic" type="CharacterBody2D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 38
|
||||
script = ExtResource("1_ubaid")
|
||||
InitWeaponId = null
|
||||
CharacterName = "character_necromancer"
|
||||
CanMutateAfterDeath = false
|
||||
_initialHp = null
|
||||
MaxHp = 50
|
||||
CampId = "Mazoku"
|
||||
LootListId = "test"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, 4)
|
||||
shape = SubResource("CapsuleShape2D_bb8wt")
|
||||
|
||||
[node name="Area2DPickingArea" type="Area2D" parent="."]
|
||||
collision_layer = 64
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2DPickingArea"]
|
||||
position = Vector2(0, 5.5)
|
||||
shape = SubResource("RectangleShape2D_a3myh")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = SubResource("SpriteFrames_qumby")
|
||||
|
||||
[node name="ItemMarker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(15, 20)
|
||||
|
||||
[node name="AttackObstacleDetection" type="RayCast2D" parent="ItemMarker2D"]
|
||||
collision_mask = 2
|
||||
|
||||
[node name="DamageNumber" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -32)
|
||||
script = ExtResource("3_kiam3")
|
||||
|
||||
[node name="HealthBar" parent="." instance=ExtResource("4_gt388")]
|
||||
visible = false
|
||||
offset_left = -46.0
|
||||
offset_top = 41.0
|
||||
offset_right = 50.0
|
||||
offset_bottom = 53.0
|
||||
|
||||
[node name="WallDetection" type="RayCast2D" parent="."]
|
||||
position = Vector2(3, -1)
|
||||
target_position = Vector2(50, 0)
|
||||
collision_mask = 6
|
||||
|
||||
[node name="AttackArea2D" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 68
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="AttackArea2D"]
|
||||
shape = SubResource("CircleShape2D_c61vr")
|
||||
|
||||
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
|
||||
|
||||
[node name="BubbleMarker" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -79)
|
||||
script = ExtResource("5_y2fh5")
|
||||
|
||||
[node name="ScoutArea2D" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 76
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ScoutArea2D"]
|
||||
shape = SubResource("CircleShape2D_fowd5")
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -57.0
|
||||
offset_top = 57.0
|
||||
offset_right = 61.0
|
||||
offset_bottom = 82.0
|
||||
grow_horizontal = 2
|
||||
horizontal_alignment = 1
|
117
prefab/furnitures/SpellEditor.tscn
Normal file
117
prefab/furnitures/SpellEditor.tscn
Normal file
|
@ -0,0 +1,117 @@
|
|||
[gd_scene load_steps=16 format=3 uid="uid://djsh4unystlf0"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/furniture/GuiFurniture.cs" id="1_t1qdg"]
|
||||
[ext_resource type="Texture2D" uid="uid://cyciw4drjvrs8" path="res://sprites/furnitures/SpellEditor.png" id="2_sbshw"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vx4tg"]
|
||||
size = Vector2(31, 31)
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_in1f7"]
|
||||
radius = 52.6118
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_yq6e3"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ljyfv"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_46j2i"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(88, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_q6a2v"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(132, 0, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lyh2i"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_84sml"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_xncbb"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(88, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_eaqhr"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(132, 43, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bcdl4"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(0, 86, 44, 43)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_a4mgy"]
|
||||
atlas = ExtResource("2_sbshw")
|
||||
region = Rect2(44, 86, 44, 43)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_mppe5"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_yq6e3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_ljyfv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_46j2i")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_q6a2v")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_lyh2i")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_84sml")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_xncbb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_eaqhr")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_bcdl4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_a4mgy")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="RigidBody2D" type="RigidBody2D"]
|
||||
collision_layer = 256
|
||||
collision_mask = 160
|
||||
script = ExtResource("1_t1qdg")
|
||||
Path = "res://prefab/ui/SpellEditorUI.tscn"
|
||||
_furnitureName = "ui_spell_editor"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-0.5, -0.5)
|
||||
shape = SubResource("RectangleShape2D_vx4tg")
|
||||
|
||||
[node name="OperateArea2D" type="Area2D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="OperateArea2D"]
|
||||
shape = SubResource("CircleShape2D_in1f7")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
scale = Vector2(0.7, 0.7)
|
||||
sprite_frames = SubResource("SpriteFrames_mppe5")
|
||||
autoplay = "default"
|
||||
frame_progress = 0.717769
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -17.0
|
||||
offset_top = 19.0
|
||||
offset_right = 23.0
|
||||
offset_bottom = 44.0
|
30
prefab/furnitures/WoodenBox.tscn
Normal file
30
prefab/furnitures/WoodenBox.tscn
Normal file
|
@ -0,0 +1,30 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://dld3qttpsdjpe"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/furniture/Barrier.cs" id="1_hfnuj"]
|
||||
[ext_resource type="Texture2D" uid="uid://cvlm5tmv43i8t" path="res://sprites/furnitures/wooden_box.png" id="2_24vtp"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vx4tg"]
|
||||
size = Vector2(32, 32)
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_in1f7"]
|
||||
radius = 52.6118
|
||||
|
||||
[node name="WoodenBox" type="RigidBody2D"]
|
||||
collision_layer = 256
|
||||
collision_mask = 160
|
||||
script = ExtResource("1_hfnuj")
|
||||
_initialDurability = null
|
||||
_maxDurability = 1
|
||||
_furnitureName = null
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_vx4tg")
|
||||
|
||||
[node name="OperateArea2D" type="Area2D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="OperateArea2D"]
|
||||
shape = SubResource("CircleShape2D_in1f7")
|
||||
|
||||
[node name="WoodenBox" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("2_24vtp")
|
39
prefab/items/resignationCertificate.tscn
Normal file
39
prefab/items/resignationCertificate.tscn
Normal file
|
@ -0,0 +1,39 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cj36fjtrlo03t"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/inventory/ResignationCertificate.cs" id="1_nydte"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="2_ei0j2"]
|
||||
[ext_resource type="Texture2D" uid="uid://dyfqdpdlq286h" path="res://sprites/projectile/resignationCertificate.png" id="3_jwff2"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_xnc20"]
|
||||
radius = 6.0
|
||||
height = 21.0
|
||||
|
||||
[node name="Resignation certificate" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_nydte")
|
||||
FiringIntervalAsMillisecond = 1000
|
||||
_recoilStrength = null
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(1, 0.5)
|
||||
shape = SubResource("CapsuleShape2D_xnc20")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("2_ei0j2")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="X3" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("3_jwff2")
|
38
prefab/magics/curse.tscn
Normal file
38
prefab/magics/curse.tscn
Normal file
|
@ -0,0 +1,38 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://m3tkjcbrrhfj"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/spell/NodeSpawnOnKillCharacterSpell.cs" id="1_gg5rs"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="2_83n3c"]
|
||||
[ext_resource type="Texture2D" uid="uid://mb5yijtw7sw5" path="res://sprites/projectile/x3.png" id="3_thtsv"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_i3lbq"]
|
||||
size = Vector2(30, 31)
|
||||
|
||||
[node name="curse" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_gg5rs")
|
||||
_packedScenePath = "res://prefab/entitys/BlackenedAboriginalWarrior.tscn"
|
||||
_projectilePath = null
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -0.5)
|
||||
shape = SubResource("RectangleShape2D_i3lbq")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("2_83n3c")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="X3" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("3_thtsv")
|
34
prefab/magics/curseOfTheUndead.tscn
Normal file
34
prefab/magics/curseOfTheUndead.tscn
Normal file
|
@ -0,0 +1,34 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://crthy8a50a4t"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/spell/SpellPickAble.cs" id="1_v0grp"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_ffr2k"]
|
||||
[ext_resource type="Texture2D" uid="uid://bbcjkyrsx88av" path="res://sprites/projectile/curseOfTheUndead.png" id="4_y6nkf"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_akp3k"]
|
||||
|
||||
[node name="curseOfTheUndead" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_v0grp")
|
||||
_projectilePath = "res://prefab/projectile/curseOfTheUndead.tscn"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -0.625)
|
||||
shape = SubResource("CircleShape2D_akp3k")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("4_ffr2k")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("4_y6nkf")
|
36
prefab/magics/magicMissile.tscn
Normal file
36
prefab/magics/magicMissile.tscn
Normal file
|
@ -0,0 +1,36 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://bt3ck8twqowke"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/spell/SpellPickAble.cs" id="1_xxv2a"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="2_p1csa"]
|
||||
[ext_resource type="Texture2D" uid="uid://ca3paw31aubkd" path="res://sprites/projectile/magicMissile.png" id="3_ckdw6"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_i3lbq"]
|
||||
size = Vector2(20, 14)
|
||||
|
||||
[node name="MagicMissile" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_xxv2a")
|
||||
_projectilePath = "res://prefab/projectile/magicMissile.tscn"
|
||||
UniqueIcon = ExtResource("3_ckdw6")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_i3lbq")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("2_p1csa")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="MagicMissile" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("3_ckdw6")
|
36
prefab/magics/trackingSpell.tscn
Normal file
36
prefab/magics/trackingSpell.tscn
Normal file
|
@ -0,0 +1,36 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cg75t3fw5c6er"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/spell/TrackingSpell.cs" id="1_vhnwx"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="2_3fbv3"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhgbij2ifphar" path="res://sprites/projectile/trackingSpell.png" id="2_i33g0"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_i3lbq"]
|
||||
size = Vector2(30, 31)
|
||||
|
||||
[node name="trackingSpell" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_vhnwx")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -0.5)
|
||||
shape = SubResource("RectangleShape2D_i3lbq")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("2_3fbv3")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="TrackingSpell" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("2_i33g0")
|
38
prefab/magics/x3.tscn
Normal file
38
prefab/magics/x3.tscn
Normal file
|
@ -0,0 +1,38 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cg75t3fw5c6er"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/spell/MultipleFireSpell.cs" id="1_cnhod"]
|
||||
[ext_resource type="Texture2D" uid="uid://mb5yijtw7sw5" path="res://sprites/projectile/x3.png" id="3_b3s8h"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_ffr2k"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_i3lbq"]
|
||||
size = Vector2(30, 31)
|
||||
|
||||
[node name="x3" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_cnhod")
|
||||
RandomAngle = true
|
||||
UnitRadian = 0.07
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -0.5)
|
||||
shape = SubResource("RectangleShape2D_i3lbq")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("4_ffr2k")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = -19.0
|
||||
offset_top = 23.0
|
||||
offset_right = 21.0
|
||||
offset_bottom = 48.0
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
|
||||
[node name="X3" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("3_b3s8h")
|
26
prefab/packsacks/PortableBackpacks.tscn
Normal file
26
prefab/packsacks/PortableBackpacks.tscn
Normal file
|
@ -0,0 +1,26 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://bq5d2w22wnxrf"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/inventory/Packsack.cs" id="1_slakl"]
|
||||
[ext_resource type="Texture2D" uid="uid://di0sw4rgd26y0" path="res://sprites/PortableBackpacks.png" id="2_l0fbh"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xqyue"]
|
||||
size = Vector2(21, 29)
|
||||
|
||||
[node name="RigidBody2D" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 38
|
||||
script = ExtResource("1_slakl")
|
||||
NumberSlots = 30
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-2.5, 1.5)
|
||||
shape = SubResource("RectangleShape2D_xqyue")
|
||||
|
||||
[node name="Packsack" type="Sprite2D" parent="."]
|
||||
scale = Vector2(0.5, 0.5)
|
||||
texture = ExtResource("2_l0fbh")
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_top = 31.0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 56.0
|
28
prefab/projectile/curseOfTheUndead.tscn
Normal file
28
prefab/projectile/curseOfTheUndead.tscn
Normal file
|
@ -0,0 +1,28 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://c01av43yk1q71"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/projectile/Projectile.cs" id="1_ib3qh"]
|
||||
[ext_resource type="Texture2D" uid="uid://bbcjkyrsx88av" path="res://sprites/projectile/curseOfTheUndead.png" id="1_k8el6"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_dgro2"]
|
||||
|
||||
[node name="curseOfTheUndead" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_ib3qh")
|
||||
_life = 5000
|
||||
_durability = 1.0
|
||||
_maxDamage = 7
|
||||
_minDamage = 3
|
||||
_damageType = 2
|
||||
Speed = 10.0
|
||||
_repelStrength = 2.5
|
||||
|
||||
[node name="CurseOfTheUndead" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("1_k8el6")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_dgro2")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
bus = &"SoundEffect"
|
||||
area_mask = 16
|
31
prefab/projectile/magicMissile.tscn
Normal file
31
prefab/projectile/magicMissile.tscn
Normal file
|
@ -0,0 +1,31 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dmt5gpklx8efc"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/projectile/Projectile.cs" id="1_cp6hg"]
|
||||
[ext_resource type="Texture2D" uid="uid://ca3paw31aubkd" path="res://sprites/projectile/magicMissile.png" id="2_6mikr"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vfvxd"]
|
||||
size = Vector2(20, 14)
|
||||
|
||||
[node name="MagicMissile" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_cp6hg")
|
||||
_life = 5000
|
||||
_durability = 1.0
|
||||
_maxDamage = 7
|
||||
_minDamage = 3
|
||||
_damageType = 2
|
||||
Speed = 15.0
|
||||
_repelStrength = 2.5
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(1, 0)
|
||||
shape = SubResource("RectangleShape2D_vfvxd")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
bus = &"SoundEffect"
|
||||
area_mask = 16
|
||||
|
||||
[node name="MagicMissile" type="Sprite2D" parent="."]
|
||||
position = Vector2(1, 0)
|
||||
texture = ExtResource("2_6mikr")
|
118
prefab/roomTemplates/dungeon/cell.tscn
Normal file
118
prefab/roomTemplates/dungeon/cell.tscn
Normal file
File diff suppressed because one or more lines are too long
86
prefab/roomTemplates/dungeon/readingRoom.tscn
Normal file
86
prefab/roomTemplates/dungeon/readingRoom.tscn
Normal file
|
@ -0,0 +1,86 @@
|
|||
[gd_scene load_steps=8 format=4 uid="uid://bo245qin4rl8a"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="1_60tbt"]
|
||||
[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="2_w0wh3"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_o85u0"]
|
||||
size = Vector2(20, 48)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6qg1t"]
|
||||
size = Vector2(20.9922, 46.5)
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_1qloc"]
|
||||
vertices = PackedVector2Array(630, 138.672, 630, 183.008, 11, 183.977, 11, 138.672, 41.8984, 137.688, 599.203, 137.688, 597.203, 44.0078, 42.8906, 44.9766)
|
||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4, 5), PackedInt32Array(6, 5, 4, 7)])
|
||||
outlines = Array[PackedVector2Array]([PackedVector2Array(33, 35, 607, 34, 609, 128, 640, 129, 640, 193, 1, 194, 1, 129, 32, 128)])
|
||||
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"]
|
||||
size = Vector2(638, 222)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kfmgh"]
|
||||
size = Vector2(579, 151.5)
|
||||
|
||||
[node name="InitialRoom2" type="Node2D"]
|
||||
|
||||
[node name="RoomSlotList" type="Node2D" parent="."]
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D"]
|
||||
position = Vector2(14, 158)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D5" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D5"]
|
||||
position = Vector2(624, 157)
|
||||
shape = SubResource("RectangleShape2D_6qg1t")
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
navigation_polygon = SubResource("NavigationPolygon_1qloc")
|
||||
|
||||
[node name="TileMap" type="Node2D" parent="."]
|
||||
|
||||
[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAABAAUAAQAGAAUAAAACAAEAAQAGAAUAAAACAAIAAQAGAAUAAAACAAMAAQAGAAUAAAACAAQAAQAGAAUAAAACAAUAAQAGAAUAAAADAAEAAQAGAAUAAAADAAIAAQAGAAUAAAADAAMAAQAGAAUAAAADAAQAAQAGAAUAAAADAAUAAQAGAAUAAAAEAAEAAQAGAAUAAAAEAAIAAQAGAAUAAAAEAAMAAQAGAAUAAAAEAAQAAQAGAAUAAAAEAAUAAQAGAAUAAAAFAAEAAQAGAAUAAAAFAAIAAQAGAAUAAAAFAAMAAQAGAAUAAAAFAAQAAQAGAAUAAAAFAAUAAQAGAAUAAAAGAAEAAQAGAAUAAAAGAAIAAQAGAAUAAAAGAAMAAQAGAAUAAAAGAAQAAQAGAAUAAAAGAAUAAQAGAAUAAAAHAAEAAQAGAAUAAAAHAAIAAQAGAAUAAAAHAAMAAQAGAAUAAAAHAAQAAQAGAAUAAAAHAAUAAQAGAAUAAAAIAAEAAQAGAAUAAAAIAAIAAQAGAAUAAAAIAAMAAQAGAAUAAAAIAAQAAQAGAAUAAAAIAAUAAQAGAAUAAAAJAAEAAQAGAAUAAAAJAAIAAQAGAAUAAAAJAAMAAQAGAAUAAAAJAAQAAQAGAAUAAAAJAAUAAQAGAAUAAAAKAAEAAQAGAAUAAAAKAAIAAQAGAAUAAAAKAAMAAQAGAAUAAAAKAAQAAQAGAAUAAAAKAAUAAQAGAAUAAAALAAEAAQAGAAUAAAALAAIAAQAGAAUAAAALAAMAAQAGAAUAAAALAAQAAQAGAAUAAAALAAUAAQAGAAUAAAAMAAEAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAANAAEAAQAGAAUAAAANAAIAAQAGAAUAAAANAAMAAQAGAAUAAAANAAQAAQAGAAUAAAANAAUAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAAPAAEAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAUAAQAGAAUAAAAQAAEAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAARAAEAAQAGAAUAAAARAAIAAQAGAAUAAAARAAMAAQAGAAUAAAARAAQAAQAGAAUAAAARAAUAAQAGAAUAAAASAAEAAQAGAAUAAAASAAIAAQAGAAUAAAASAAMAAQAGAAUAAAASAAQAAQAGAAUAAAASAAUAAQAGAAUAAAAAAAUAAQAGAAUAAAAAAAQAAQAGAAUAAAATAAUAAQAGAAUAAAATAAQAAQAGAAUAAAA=")
|
||||
tile_set = ExtResource("1_60tbt")
|
||||
navigation_enabled = false
|
||||
|
||||
[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAADAAQAAQAEAAYAAAAEAAQAAQAEAAYAAAAEAAUAAQAEAAYAAAADAAUAAQAEAAYAAAADAAMAAQAEAAYAAAAEAAMAAQAEAAYAAAAGAAMAAQAEAAYAAAAGAAQAAQAEAAYAAAAGAAUAAQAEAAYAAAAHAAUAAQAEAAYAAAAHAAQAAQAEAAYAAAAHAAMAAQAEAAYAAAAJAAMAAQAEAAYAAAAJAAQAAQAEAAYAAAAJAAUAAQAEAAYAAAAKAAUAAQAEAAYAAAAKAAQAAQAEAAYAAAAKAAMAAQAEAAYAAAAOAAUAAQABAAYAAAANAAUAAQAAAAYAAAA=")
|
||||
tile_set = ExtResource("1_60tbt")
|
||||
|
||||
[node name="Ground" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAIAAAAPAAAAAQABAAIAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAABAAYAAQABAAAAAAACAAYAAQABAAAAAAADAAYAAQABAAAAAAAEAAYAAQABAAAAAAAFAAYAAQABAAAAAAAGAAYAAQABAAAAAAAHAAYAAQABAAAAAAAIAAYAAQABAAAAAAAJAAYAAQABAAAAAAAKAAYAAQABAAAAAAALAAYAAQABAAAAAAAMAAYAAQABAAAAAAANAAYAAQABAAAAAAAOAAYAAQABAAAAAAAPAAYAAQABAAAAAAAQAAYAAQABAAAAAAARAAYAAQABAAAAAAASAAYAAQABAAAAAAASAAAAAQABAAIAAAATAAEAAQAAAAEAAAATAAIAAQAAAAEAAAATAAMAAQAAAAEAAAATAAYAAQACAAUAAAATAAAAAQACAAMAAAAAAAYAAQAAAAUAAAA=")
|
||||
tile_set = ExtResource("1_60tbt")
|
||||
|
||||
[node name="Barrier" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAATAAQAAQAAAAEAAAATAAUAAQAAAAEAAAAAAAQAAQACAAEAAAAAAAUAAQACAAEAAAA=")
|
||||
tile_set = ExtResource("1_60tbt")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(320, 111)
|
||||
scale = Vector2(20.125, 7.06253)
|
||||
texture = ExtResource("2_w0wh3")
|
||||
|
||||
[node name="AutoSpawn" type="Node2D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="RoomArea" type="Area2D" parent="."]
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"]
|
||||
position = Vector2(320, 112)
|
||||
shape = SubResource("RectangleShape2D_kiih8")
|
||||
|
||||
[node name="SpawnArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpawnArea"]
|
||||
position = Vector2(315.5, 116.25)
|
||||
shape = SubResource("RectangleShape2D_kfmgh")
|
111
prefab/roomTemplates/dungeon/utilityRoom.tscn
Normal file
111
prefab/roomTemplates/dungeon/utilityRoom.tscn
Normal file
|
@ -0,0 +1,111 @@
|
|||
[gd_scene load_steps=10 format=4 uid="uid://c57cc1tyreybb"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="1_rn2om"]
|
||||
[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="2_1ctsj"]
|
||||
[ext_resource type="Script" path="res://scripts/map/AiCharacterSpawn.cs" id="3_u5h84"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_o85u0"]
|
||||
size = Vector2(20, 48)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_30r3c"]
|
||||
size = Vector2(22, 46)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6qg1t"]
|
||||
size = Vector2(21, 45.5)
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_1qloc"]
|
||||
vertices = PackedVector2Array(696.148, 425, 719.617, 425, 722.328, 467.047, 12.5391, 470.938, 10.4531, 426.43, 46.0312, 424.461, 690.859, 84.1562, 45.0234, 48.9219, 721.523, 44.0625, 723.5, 80.1875)
|
||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4), PackedInt32Array(0, 4, 5), PackedInt32Array(6, 0, 5, 7), PackedInt32Array(6, 7, 8, 9)])
|
||||
outlines = Array[PackedVector2Array]([PackedVector2Array(35, 39, 36, 415, 0, 417, 3, 481, 733, 477, 729, 415, 706, 415, 701, 93, 734, 89, 731, 34)])
|
||||
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"]
|
||||
size = Vector2(730, 509)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kfmgh"]
|
||||
size = Vector2(509, 407)
|
||||
|
||||
[node name="InitialRoom2" type="Node2D"]
|
||||
|
||||
[node name="RoomSlotList" type="Node2D" parent="."]
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D"]
|
||||
position = Vector2(18, 449)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D2" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D2"]
|
||||
position = Vector2(720, 61)
|
||||
shape = SubResource("RectangleShape2D_30r3c")
|
||||
|
||||
[node name="Area2D3" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D3"]
|
||||
position = Vector2(722, 447)
|
||||
shape = SubResource("RectangleShape2D_6qg1t")
|
||||
|
||||
[node name="Area2D4" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D4"]
|
||||
position = Vector2(16, 196)
|
||||
shape = SubResource("RectangleShape2D_6qg1t")
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
navigation_polygon = SubResource("NavigationPolygon_1qloc")
|
||||
|
||||
[node name="TileMap" type="Node2D" parent="."]
|
||||
|
||||
[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAABAAoAAQAGAAUAAAACAAEAAQAGAAUAAAACAAIAAQAGAAUAAAACAAMAAQAGAAUAAAACAAQAAQAGAAUAAAACAAUAAQAGAAUAAAACAAYAAQAGAAUAAAACAAcAAQAGAAUAAAACAAgAAQAGAAUAAAACAAkAAQAGAAUAAAACAAoAAQAGAAUAAAADAAEAAQAGAAUAAAADAAIAAQAGAAUAAAADAAMAAQAGAAUAAAADAAQAAQAGAAUAAAADAAUAAQAGAAUAAAADAAYAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAADAAoAAQAGAAUAAAAEAAEAAQAGAAUAAAAEAAIAAQAGAAUAAAAEAAMAAQAGAAUAAAAEAAQAAQAGAAUAAAAEAAUAAQAGAAUAAAAEAAYAAQAGAAUAAAAEAAcAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAoAAQAGAAUAAAAFAAEAAQAGAAUAAAAFAAIAAQAGAAUAAAAFAAMAAQAGAAUAAAAFAAQAAQAGAAUAAAAFAAUAAQAGAAUAAAAFAAYAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAFAAoAAQAGAAUAAAAGAAEAAQAGAAUAAAAGAAIAAQAGAAUAAAAGAAMAAQAGAAUAAAAGAAQAAQAGAAUAAAAGAAUAAQAGAAUAAAAGAAYAAQAGAAUAAAAGAAcAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAoAAQAGAAUAAAAHAAEAAQAGAAUAAAAHAAIAAQAGAAUAAAAHAAMAAQAGAAUAAAAHAAQAAQAGAAUAAAAHAAUAAQAGAAUAAAAHAAYAAQAGAAUAAAAHAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAoAAQAGAAUAAAAIAAEAAQAGAAUAAAAIAAIAAQAGAAUAAAAIAAMAAQAGAAUAAAAIAAQAAQAGAAUAAAAIAAUAAQAGAAUAAAAIAAYAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAIAAoAAQAGAAUAAAAJAAEAAQAGAAUAAAAJAAIAAQAGAAUAAAAJAAMAAQAGAAUAAAAJAAQAAQAGAAUAAAAJAAUAAQAGAAUAAAAJAAYAAQAGAAUAAAAJAAcAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAoAAQAGAAUAAAAKAAEAAQAGAAUAAAAKAAIAAQAGAAUAAAAKAAMAAQAGAAUAAAAKAAQAAQAGAAUAAAAKAAUAAQAGAAUAAAAKAAYAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAAKAAoAAQAGAAUAAAALAAEAAQAGAAUAAAALAAIAAQAGAAUAAAALAAMAAQAGAAUAAAALAAQAAQAGAAUAAAALAAUAAQAGAAUAAAALAAYAAQAGAAUAAAALAAcAAQAGAAUAAAALAAgAAQAGAAUAAAALAAkAAQAGAAUAAAALAAoAAQAGAAUAAAAMAAEAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAAMAAYAAQAGAAUAAAAMAAcAAQAGAAUAAAAMAAgAAQAGAAUAAAAMAAkAAQAGAAUAAAAMAAoAAQAGAAUAAAANAAEAAQAGAAUAAAANAAIAAQAGAAUAAAANAAMAAQAGAAUAAAANAAQAAQAGAAUAAAANAAUAAQAGAAUAAAANAAYAAQAGAAUAAAANAAcAAQAGAAUAAAANAAgAAQAGAAUAAAANAAkAAQAGAAUAAAANAAoAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAAOAAYAAQAGAAUAAAAOAAcAAQAGAAUAAAAOAAgAAQAGAAUAAAAOAAkAAQAGAAUAAAAOAAoAAQAGAAUAAAAPAAEAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAUAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAcAAQAGAAUAAAAPAAgAAQAGAAUAAAAPAAkAAQAGAAUAAAAPAAoAAQAGAAUAAAAQAAEAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAAQAAYAAQAGAAUAAAAQAAcAAQAGAAUAAAAQAAgAAQAGAAUAAAAQAAkAAQAGAAUAAAAQAAoAAQAGAAUAAAARAAEAAQAGAAUAAAARAAIAAQAGAAUAAAARAAMAAQAGAAUAAAARAAQAAQAGAAUAAAARAAUAAQAGAAUAAAARAAYAAQAGAAUAAAARAAcAAQAGAAUAAAARAAgAAQAGAAUAAAARAAkAAQAGAAUAAAARAAoAAQAGAAUAAAASAAEAAQAGAAUAAAASAAIAAQAGAAUAAAASAAMAAQAGAAUAAAASAAQAAQAGAAUAAAASAAUAAQAGAAUAAAASAAYAAQAGAAUAAAASAAcAAQAGAAUAAAASAAgAAQAGAAUAAAASAAkAAQAGAAUAAAASAAoAAQAGAAUAAAATAAEAAQAGAAUAAAATAAIAAQAGAAUAAAATAAMAAQAGAAUAAAATAAQAAQAGAAUAAAATAAUAAQAGAAUAAAATAAYAAQAGAAUAAAATAAcAAQAGAAUAAAATAAgAAQAGAAUAAAATAAkAAQAGAAUAAAATAAoAAQAGAAUAAAAUAAEAAQAGAAUAAAAUAAIAAQAGAAUAAAAUAAMAAQAGAAUAAAAUAAQAAQAGAAUAAAAUAAUAAQAGAAUAAAAUAAYAAQAGAAUAAAAUAAcAAQAGAAUAAAAUAAgAAQAGAAUAAAAUAAkAAQAGAAUAAAAUAAoAAQAGAAUAAAAVAAEAAQAGAAUAAAAVAAIAAQAGAAUAAAAVAAMAAQAGAAUAAAAVAAQAAQAGAAUAAAAVAAUAAQAGAAUAAAAVAAYAAQAGAAUAAAAVAAcAAQAGAAUAAAAVAAgAAQAGAAUAAAAVAAkAAQAGAAUAAAAVAAoAAQAGAAUAAAABAAsAAQAGAAUAAAABAAwAAQAGAAUAAAABAA0AAQAGAAUAAAABAA4AAQAGAAUAAAACAAsAAQAGAAUAAAACAAwAAQAGAAUAAAACAA0AAQAGAAUAAAACAA4AAQAGAAUAAAADAAsAAQAGAAUAAAADAAwAAQAGAAUAAAADAA0AAQAGAAUAAAADAA4AAQAGAAUAAAAEAAsAAQAGAAUAAAAEAAwAAQAGAAUAAAAEAA0AAQAGAAUAAAAEAA4AAQAGAAUAAAAFAAsAAQAGAAUAAAAFAAwAAQAGAAUAAAAFAA0AAQAGAAUAAAAFAA4AAQAGAAUAAAAGAAsAAQAGAAUAAAAGAAwAAQAGAAUAAAAGAA0AAQAGAAUAAAAGAA4AAQAGAAUAAAAHAAsAAQAGAAUAAAAHAAwAAQAGAAUAAAAHAA0AAQAGAAUAAAAHAA4AAQAGAAUAAAAIAAsAAQAGAAUAAAAIAAwAAQAGAAUAAAAIAA0AAQAGAAUAAAAIAA4AAQAGAAUAAAAJAAsAAQAGAAUAAAAJAAwAAQAGAAUAAAAJAA0AAQAGAAUAAAAJAA4AAQAGAAUAAAAKAAsAAQAGAAUAAAAKAAwAAQAGAAUAAAAKAA0AAQAGAAUAAAAKAA4AAQAGAAUAAAALAAsAAQAGAAUAAAALAAwAAQAGAAUAAAALAA0AAQAGAAUAAAALAA4AAQAGAAUAAAAMAAsAAQAGAAUAAAAMAAwAAQAGAAUAAAAMAA0AAQAGAAUAAAAMAA4AAQAGAAUAAAANAAsAAQAGAAUAAAANAAwAAQAGAAUAAAANAA0AAQAGAAUAAAANAA4AAQAGAAUAAAAOAAsAAQAGAAUAAAAOAAwAAQAGAAUAAAAOAA0AAQAGAAUAAAAOAA4AAQAGAAUAAAAPAAsAAQAGAAUAAAAPAAwAAQAGAAUAAAAPAA0AAQAGAAUAAAAPAA4AAQAGAAUAAAAQAAsAAQAGAAUAAAAQAAwAAQAGAAUAAAAQAA0AAQAGAAUAAAAQAA4AAQAGAAUAAAARAAsAAQAGAAUAAAARAAwAAQAGAAUAAAARAA0AAQAGAAUAAAARAA4AAQAGAAUAAAASAAsAAQAGAAUAAAASAAwAAQAGAAUAAAASAA0AAQAGAAUAAAASAA4AAQAGAAUAAAATAAsAAQAGAAUAAAATAAwAAQAGAAUAAAATAA0AAQAGAAUAAAATAA4AAQAGAAUAAAAUAAsAAQAGAAUAAAAUAAwAAQAGAAUAAAAUAA0AAQAGAAUAAAAUAA4AAQAGAAUAAAAVAAsAAQAGAAUAAAAVAAwAAQAGAAUAAAAVAA0AAQAGAAUAAAAVAA4AAQAGAAUAAAAAAA4AAQAGAAUAAAAAAA0AAQAGAAUAAAAWAAIAAQAGAAUAAAAWAAEAAQAGAAUAAAAWAA0AAQAGAAUAAAAWAA4AAQAGAAUAAAAAAAUAAQAGAAUAAAAAAAYAAQAGAAUAAAA=")
|
||||
tile_set = ExtResource("1_rn2om")
|
||||
navigation_enabled = false
|
||||
|
||||
[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAVAA4AAQAHAAEAAAABAAYAAQAHAAEAAAAVAAMAAQAHAAQAAAABAAcAAQAGAAQAAAABAAEAAQAGAAQAAAA=")
|
||||
tile_set = ExtResource("1_rn2om")
|
||||
|
||||
[node name="Ground" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAIAAAAPAAAAAQABAAIAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAVAAAAAQABAAIAAAAWAAAAAQACAAMAAAAWAAMAAQAAAAEAAAAWAAQAAQAAAAEAAAAWAAUAAQAAAAEAAAAWAAYAAQAAAAEAAAAWAAcAAQAAAAEAAAAWAAgAAQAAAAEAAAAWAAkAAQAAAAEAAAAWAAoAAQAAAAEAAAAWAAsAAQAAAAEAAAAWAAwAAQAAAAEAAAAAAAcAAQACAAEAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQACAAEAAAAAAAsAAQACAAEAAAAAAAwAAQACAAEAAAAVAA8AAQABAAAAAAAUAA8AAQABAAAAAAATAA8AAQABAAAAAAASAA8AAQABAAAAAAARAA8AAQABAAAAAAAQAA8AAQABAAAAAAAPAA8AAQABAAAAAAAOAA8AAQABAAAAAAANAA8AAQABAAAAAAAMAA8AAQABAAAAAAALAA8AAQABAAAAAAAKAA8AAQABAAAAAAAJAA8AAQABAAAAAAAIAA8AAQABAAAAAAAHAA8AAQABAAAAAAAGAA8AAQABAAAAAAAFAA8AAQABAAAAAAAEAA8AAQABAAAAAAADAA8AAQABAAAAAAACAA8AAQABAAAAAAABAA8AAQABAAAAAAAAAA8AAQAAAAUAAAAWAA8AAQACAAUAAAASAAsAAQAEAAQAAAATAAsAAQAEAAQAAAAUAAsAAQAEAAQAAAAVAAsAAQAFAAQAAAABAAsAAQADAAQAAAACAAsAAQAEAAQAAAADAAsAAQAEAAQAAAAEAAsAAQAEAAQAAAAFAAsAAQAEAAQAAAAGAAsAAQAEAAQAAAAHAAsAAQAEAAQAAAAIAAsAAQAEAAQAAAAOAAsAAQAEAAQAAAAPAAsAAQAEAAQAAAAQAAsAAQAEAAQAAAARAAsAAQAEAAQAAAABAAoAAQAEAAMAAAAVAAoAAQAEAAMAAAACAAoAAQAEAAIAAAAUAAoAAQAEAAIAAAANAAQAAQAEAAQAAAANAAwAAQAEAAQAAAAMAA0AAQAEAAQAAAALAA4AAQAEAAQAAAAJAAsAAQAEAAQAAAAGAAoAAQAEAAQAAAAHAAkAAQAEAAQAAAAIAAgAAQAEAAQAAAAJAAcAAQAEAAQAAAAKAAcAAQAEAAQAAAALAAcAAQAEAAQAAAAMAAcAAQAEAAQAAAANAAcAAQAEAAQAAAAOAAcAAQAEAAQAAAAPAAcAAQAEAAQAAAAQAAcAAQAEAAQAAAARAAcAAQAEAAQAAAASAAcAAQAEAAQAAAATAAcAAQAEAAQAAAAUAAcAAQAEAAQAAAAVAAcAAQAFAAQAAAABAAcAAQADAAQAAAACAAcAAQAEAAQAAAADAAcAAQAEAAQAAAAEAAcAAQAEAAQAAAAFAAcAAQAEAAQAAAALAAYAAQAEAAQAAAAMAAUAAQAEAAQAAAAPAAMAAQAEAAQAAAAQAAMAAQAEAAQAAAARAAMAAQAEAAQAAAASAAMAAQAEAAQAAAATAAMAAQAEAAQAAAAUAAMAAQAEAAQAAAAVAAMAAQAFAAQAAAABAAMAAQADAAQAAAACAAMAAQAEAAQAAAADAAMAAQAEAAQAAAAEAAMAAQAEAAQAAAAFAAMAAQAEAAQAAAAGAAMAAQAEAAQAAAAHAAMAAQAEAAQAAAAIAAMAAQAEAAQAAAAJAAMAAQAEAAQAAAAKAAMAAQAEAAQAAAAKAAsAAQAEAAQAAAALAAsAAQAEAAQAAAAGAAcAAQAEAAQAAAALAAMAAQAEAAQAAAAMAAMAAQAEAAQAAAA=")
|
||||
tile_set = ExtResource("1_rn2om")
|
||||
|
||||
[node name="Barrier" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAWAA0AAQAAAAEAAAAWAA4AAQAAAAEAAAAWAAEAAQAAAAEAAAAWAAIAAQAAAAEAAAAAAA0AAQACAAEAAAAAAA4AAQACAAEAAAAAAAYAAQACAAEAAAAAAAUAAQACAAEAAAA=")
|
||||
tile_set = ExtResource("1_rn2om")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(367.5, 258)
|
||||
scale = Vector2(23.0938, 16.25)
|
||||
texture = ExtResource("2_1ctsj")
|
||||
|
||||
[node name="AutoSpawn" type="Node2D" parent="."]
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(121, 178)
|
||||
script = ExtResource("3_u5h84")
|
||||
_resPathArray = PackedStringArray("res://prefab/entitys/BlackenedAboriginalWarrior.tscn", "res://prefab/entitys/BlackenedAboriginalWarrior.tscn", "", "res://prefab/entitys/BlackenedAboriginalWarrior.tscn")
|
||||
|
||||
[node name="Marker2D2" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(541, 297)
|
||||
script = ExtResource("3_u5h84")
|
||||
_resPathArray = PackedStringArray("res://prefab/entitys/BlackenedAboriginalWarrior.tscn", "", "res://prefab/entitys/BlackenedAboriginalWarrior.tscn", "")
|
||||
|
||||
[node name="RoomArea" type="Area2D" parent="."]
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"]
|
||||
position = Vector2(368, 255.5)
|
||||
shape = SubResource("RectangleShape2D_kiih8")
|
||||
|
||||
[node name="SpawnArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpawnArea"]
|
||||
position = Vector2(359.5, 246.5)
|
||||
shape = SubResource("RectangleShape2D_kfmgh")
|
110
prefab/roomTemplates/dungeon/verticalStair.tscn
Normal file
110
prefab/roomTemplates/dungeon/verticalStair.tscn
Normal file
|
@ -0,0 +1,110 @@
|
|||
[gd_scene load_steps=8 format=4 uid="uid://53ssan8hgcyn"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="1_kdit4"]
|
||||
[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="2_g41lp"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_o85u0"]
|
||||
size = Vector2(22.5, 48)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6qg1t"]
|
||||
size = Vector2(24.5, 59.75)
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_1qloc"]
|
||||
vertices = PackedVector2Array(8, 791.953, 8, 746.922, 42, 749.922, 405.523, 790.039, 403.461, 746, 374.047, 746, 373.32, 109.617, 404.82, 107.648, 404.148, 150.32, 373.969, 151.328, 42, 341.359, 10.1719, 343.344, 10.8438, 301, 41, 301, 41, 86.2891, 11.6719, 88.2969, 10.3203, 45, 29.0078, 45, 371.289, 44.0234, 375.031, 489.672, 372.953, 537.211, 404.141, 533.18, 404.828, 490.656)
|
||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 3, 2, 5), PackedInt32Array(6, 7, 8, 9), PackedInt32Array(10, 11, 12, 13), PackedInt32Array(14, 15, 16, 17), PackedInt32Array(14, 17, 18, 6), PackedInt32Array(13, 14, 6, 9, 19, 10), PackedInt32Array(2, 10, 19, 20), PackedInt32Array(20, 5, 2), PackedInt32Array(21, 20, 19, 22)])
|
||||
outlines = Array[PackedVector2Array]([PackedVector2Array(29, 35, 381, 34, 383, 99, 415, 97, 414, 160, 384, 161, 385, 480, 415, 481, 414, 542, 383, 546, 384, 736, 413, 736, 416, 800, -2, 802, -2, 736, 32, 739, 32, 352, 0, 354, 1, 291, 31, 291, 31, 97, 2, 99, 0, 35)])
|
||||
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"]
|
||||
size = Vector2(413, 828)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kfmgh"]
|
||||
size = Vector2(322, 765)
|
||||
|
||||
[node name="InitialRoom2" type="Node2D"]
|
||||
|
||||
[node name="RoomSlotList" type="Node2D" parent="."]
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D"]
|
||||
position = Vector2(15, 322)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D2" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D2"]
|
||||
position = Vector2(16, 767)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D6" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D6"]
|
||||
position = Vector2(401, 516)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D4" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D4"]
|
||||
position = Vector2(14, 65)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D5" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D5"]
|
||||
position = Vector2(399, 129)
|
||||
shape = SubResource("RectangleShape2D_o85u0")
|
||||
|
||||
[node name="Area2D3" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D3"]
|
||||
position = Vector2(399.75, 769.875)
|
||||
shape = SubResource("RectangleShape2D_6qg1t")
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
position = Vector2(0, -1)
|
||||
navigation_polygon = SubResource("NavigationPolygon_1qloc")
|
||||
|
||||
[node name="TileMap" type="Node2D" parent="."]
|
||||
|
||||
[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAABABIAAQAGAAUAAAABABMAAQAGAAUAAAABABQAAQAGAAUAAAABABUAAQAGAAUAAAABABYAAQAGAAUAAAABABcAAQAGAAUAAAABABgAAQAGAAUAAAACABIAAQAGAAUAAAACABMAAQAGAAUAAAACABQAAQAGAAUAAAACABUAAQAGAAUAAAACABYAAQAGAAUAAAACABcAAQAGAAUAAAACABgAAQAGAAUAAAADABIAAQAGAAUAAAADABMAAQAGAAUAAAADABQAAQAGAAUAAAADABUAAQAGAAUAAAADABYAAQAGAAUAAAADABcAAQAGAAUAAAADABgAAQAGAAUAAAAEABIAAQAGAAUAAAAEABMAAQAGAAUAAAAEABQAAQAGAAUAAAAEABUAAQAGAAUAAAAEABYAAQAGAAUAAAAEABcAAQAGAAUAAAAEABgAAQAGAAUAAAAFABIAAQAGAAUAAAAFABMAAQAGAAUAAAAFABQAAQAGAAUAAAAFABUAAQAGAAUAAAAFABYAAQAGAAUAAAAFABcAAQAGAAUAAAAFABgAAQAGAAUAAAAGABIAAQAGAAUAAAAGABMAAQAGAAUAAAAGABQAAQAGAAUAAAAGABUAAQAGAAUAAAAGABYAAQAGAAUAAAAGABcAAQAGAAUAAAAGABgAAQAGAAUAAAAHABIAAQAGAAUAAAAHABMAAQAGAAUAAAAHABQAAQAGAAUAAAAHABUAAQAGAAUAAAAHABYAAQAGAAUAAAAHABcAAQAGAAUAAAAHABgAAQAGAAUAAAAIABIAAQAGAAUAAAAIABMAAQAGAAUAAAAIABQAAQAGAAUAAAAIABUAAQAGAAUAAAAIABYAAQAGAAUAAAAIABcAAQAGAAUAAAAIABgAAQAGAAUAAAAJABIAAQAGAAUAAAAJABMAAQAGAAUAAAAJABQAAQAGAAUAAAAJABUAAQAGAAUAAAAJABYAAQAGAAUAAAAJABcAAQAGAAUAAAAJABgAAQAGAAUAAAAKABIAAQAGAAUAAAAKABMAAQAGAAUAAAAKABQAAQAGAAUAAAAKABUAAQAGAAUAAAAKABYAAQAGAAUAAAAKABcAAQAGAAUAAAAKABgAAQAGAAUAAAALABIAAQAGAAUAAAALABMAAQAGAAUAAAALABQAAQAGAAUAAAALABUAAQAGAAUAAAALABYAAQAGAAUAAAALABcAAQAGAAUAAAALABgAAQAGAAUAAAAAAAEAAQAGAAUAAAAAAAIAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAABAAoAAQAGAAUAAAABAAsAAQAGAAUAAAABAAwAAQAGAAUAAAABAA0AAQAGAAUAAAABAA4AAQAGAAUAAAABAA8AAQAGAAUAAAABABAAAQAGAAUAAAABABEAAQAGAAUAAAACAAEAAQAGAAUAAAACAAIAAQAGAAUAAAACAAMAAQAGAAUAAAACAAQAAQAGAAUAAAACAAUAAQAGAAUAAAACAAYAAQAGAAUAAAACAAcAAQAGAAUAAAACAAgAAQAGAAUAAAACAAkAAQAGAAUAAAACAAoAAQAGAAUAAAACAAsAAQAGAAUAAAACAAwAAQAGAAUAAAACAA0AAQAGAAUAAAACAA4AAQAGAAUAAAACAA8AAQAGAAUAAAACABAAAQAGAAUAAAACABEAAQAGAAUAAAADAAEAAQAGAAUAAAADAAIAAQAGAAUAAAADAAMAAQAGAAUAAAADAAQAAQAGAAUAAAADAAUAAQAGAAUAAAADAAYAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAADAAoAAQAGAAUAAAADAAsAAQAGAAUAAAADAAwAAQAGAAUAAAADAA0AAQAGAAUAAAADAA4AAQAGAAUAAAADAA8AAQAGAAUAAAADABAAAQAGAAUAAAADABEAAQAGAAUAAAAEAAEAAQAGAAUAAAAEAAIAAQAGAAUAAAAEAAMAAQAGAAUAAAAEAAQAAQAGAAUAAAAEAAUAAQAGAAUAAAAEAAYAAQAGAAUAAAAEAAcAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAoAAQAGAAUAAAAEAAsAAQAGAAUAAAAEAAwAAQAGAAUAAAAEAA0AAQAGAAUAAAAEAA4AAQAGAAUAAAAEAA8AAQAGAAUAAAAEABAAAQAGAAUAAAAEABEAAQAGAAUAAAAFAAEAAQAGAAUAAAAFAAIAAQAGAAUAAAAFAAMAAQAGAAUAAAAFAAQAAQAGAAUAAAAFAAUAAQAGAAUAAAAFAAYAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAFAAoAAQAGAAUAAAAFAAsAAQAGAAUAAAAFAAwAAQAGAAUAAAAFAA0AAQAGAAUAAAAFAA4AAQAGAAUAAAAFAA8AAQAGAAUAAAAFABAAAQAGAAUAAAAFABEAAQAGAAUAAAAGAAEAAQAGAAUAAAAGAAIAAQAGAAUAAAAGAAMAAQAGAAUAAAAGAAQAAQAGAAUAAAAGAAUAAQAGAAUAAAAGAAYAAQAGAAUAAAAGAAcAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAoAAQAGAAUAAAAGAAsAAQAGAAUAAAAGAAwAAQAGAAUAAAAGAA0AAQAGAAUAAAAGAA4AAQAGAAUAAAAGAA8AAQAGAAUAAAAGABAAAQAGAAUAAAAGABEAAQAGAAUAAAAHAAEAAQAGAAUAAAAHAAIAAQAGAAUAAAAHAAMAAQAGAAUAAAAHAAQAAQAGAAUAAAAHAAUAAQAGAAUAAAAHAAYAAQAGAAUAAAAHAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAoAAQAGAAUAAAAHAAsAAQAGAAUAAAAHAAwAAQAGAAUAAAAHAA0AAQAGAAUAAAAHAA4AAQAGAAUAAAAHAA8AAQAGAAUAAAAHABAAAQAGAAUAAAAHABEAAQAGAAUAAAAIAAEAAQAGAAUAAAAIAAIAAQAGAAUAAAAIAAMAAQAGAAUAAAAIAAQAAQAGAAUAAAAIAAUAAQAGAAUAAAAIAAYAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAIAAoAAQAGAAUAAAAIAAsAAQAGAAUAAAAIAAwAAQAGAAUAAAAIAA0AAQAGAAUAAAAIAA4AAQAGAAUAAAAIAA8AAQAGAAUAAAAIABAAAQAGAAUAAAAIABEAAQAGAAUAAAAJAAEAAQAGAAUAAAAJAAIAAQAGAAUAAAAJAAMAAQAGAAUAAAAJAAQAAQAGAAUAAAAJAAUAAQAGAAUAAAAJAAYAAQAGAAUAAAAJAAcAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAoAAQAGAAUAAAAJAAsAAQAGAAUAAAAJAAwAAQAGAAUAAAAJAA0AAQAGAAUAAAAJAA4AAQAGAAUAAAAJAA8AAQAGAAUAAAAJABAAAQAGAAUAAAAJABEAAQAGAAUAAAAKAAEAAQAGAAUAAAAKAAIAAQAGAAUAAAAKAAMAAQAGAAUAAAAKAAQAAQAGAAUAAAAKAAUAAQAGAAUAAAAKAAYAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAAKAAoAAQAGAAUAAAAKAAsAAQAGAAUAAAAKAAwAAQAGAAUAAAAKAA0AAQAGAAUAAAAKAA4AAQAGAAUAAAAKAA8AAQAGAAUAAAAKABAAAQAGAAUAAAAKABEAAQAGAAUAAAALAAEAAQAGAAUAAAALAAIAAQAGAAUAAAALAAMAAQAGAAUAAAALAAQAAQAGAAUAAAALAAUAAQAGAAUAAAALAAYAAQAGAAUAAAALAAcAAQAGAAUAAAALAAgAAQAGAAUAAAALAAkAAQAGAAUAAAALAAoAAQAGAAUAAAALAAsAAQAGAAUAAAALAAwAAQAGAAUAAAALAA0AAQAGAAUAAAALAA4AAQAGAAUAAAALAA8AAQAGAAUAAAALABAAAQAGAAUAAAALABEAAQAGAAUAAAAMAAMAAQAGAAUAAAAMAAQAAQAGAAUAAAAAAAkAAQAGAAUAAAAAAAoAAQAGAAUAAAAMABAAAQAGAAUAAAAMAA8AAQAGAAUAAAAMABcAAQAGAAUAAAAMABgAAQAGAAUAAAAAABcAAQAGAAUAAAAAABgAAQAGAAUAAAA=")
|
||||
tile_set = ExtResource("1_kdit4")
|
||||
navigation_enabled = false
|
||||
|
||||
[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAALABEAAQAHAAQAAAABAAsAAQAGAAQAAAALAAEAAQAHAAQAAAADAAoAAQAHAAUAAAAHAAIAAQAHAAUAAAAKABgAAQAHAAUAAAA=")
|
||||
tile_set = ExtResource("1_kdit4")
|
||||
|
||||
[node name="Ground" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAAAAAcAAQACAAEAAAAAAAgAAQACAAEAAAAAAAsAAQACAAEAAAAAAAwAAQACAAEAAAAAAA0AAQACAAEAAAAAAA4AAQACAAEAAAAAAA8AAQACAAEAAAAAABAAAQACAAEAAAAMAA4AAQAAAAEAAAAMAA0AAQAAAAEAAAAMAAwAAQAAAAEAAAAMAAsAAQAAAAEAAAAMAAoAAQAAAAEAAAAMAAkAAQAAAAEAAAAMAAgAAQAAAAEAAAAMAAcAAQAAAAEAAAAMAAYAAQAAAAEAAAAMAAUAAQAAAAEAAAAMAAAAAQACAAMAAAAMAAEAAQAAAAEAAAAMAAIAAQAAAAEAAAALAAAAAQABAAIAAAAAABEAAQACAAEAAAAAABIAAQACAAEAAAAAABMAAQACAAEAAAAAABQAAQACAAEAAAAAABUAAQACAAEAAAAAABYAAQACAAEAAAAMABEAAQAAAAEAAAAMABIAAQAAAAEAAAAMABMAAQAAAAEAAAAMABQAAQAAAAEAAAAMABUAAQAAAAEAAAAMABYAAQAAAAEAAAABABkAAQABAAAAAAACABkAAQABAAAAAAADABkAAQABAAAAAAAEABkAAQABAAAAAAAFABkAAQABAAAAAAAGABkAAQABAAAAAAAHABkAAQABAAAAAAAIABkAAQABAAAAAAAJABkAAQABAAAAAAAKABkAAQABAAAAAAALABkAAQABAAAAAAAAABkAAQAAAAUAAAAMABkAAQACAAUAAAACABgAAQAEAAQAAAADABcAAQAEAAQAAAAEABYAAQAEAAQAAAAFABUAAQAEAAQAAAAGABQAAQAEAAQAAAAHABMAAQAEAAQAAAAIABIAAQAEAAQAAAAJABEAAQAEAAQAAAAKABEAAQAEAAQAAAALABEAAQAEAAQAAAAIABAAAQAEAAQAAAAHAA8AAQAEAAQAAAAGAA4AAQAEAAQAAAAFAA0AAQAEAAQAAAAEAAwAAQAEAAQAAAADAAsAAQAEAAQAAAACAAsAAQAEAAQAAAABAAsAAQAEAAQAAAAEAAoAAQAEAAQAAAAFAAkAAQAEAAQAAAAGAAgAAQAEAAQAAAAHAAcAAQAEAAQAAAAIAAYAAQAEAAQAAAAJAAUAAQAEAAQAAAAKAAUAAQAEAAQAAAALAAUAAQAEAAQAAAAIAAQAAQAEAAQAAAAHAAMAAQAEAAQAAAAGAAMAAQAEAAQAAAAFAAMAAQAEAAQAAAAEAAMAAQAEAAQAAAADAAMAAQAEAAQAAAACAAMAAQAEAAQAAAABAAMAAQAEAAQAAAA=")
|
||||
tile_set = ExtResource("1_kdit4")
|
||||
|
||||
[node name="Barrier" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAMAAMAAQAAAAEAAAAMAAQAAQAAAAEAAAAMAA8AAQAAAAEAAAAMABAAAQAAAAEAAAAMABcAAQAAAAEAAAAMABgAAQAAAAEAAAAAABcAAQACAAEAAAAAABgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQACAAEAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAA=")
|
||||
tile_set = ExtResource("1_kdit4")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(206.5, 414.5)
|
||||
scale = Vector2(12.9688, 26.0313)
|
||||
texture = ExtResource("2_g41lp")
|
||||
|
||||
[node name="AutoSpawn" type="Node2D" parent="."]
|
||||
|
||||
[node name="RoomArea" type="Area2D" parent="."]
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"]
|
||||
position = Vector2(207.5, 416)
|
||||
shape = SubResource("RectangleShape2D_kiih8")
|
||||
|
||||
[node name="SpawnArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpawnArea"]
|
||||
position = Vector2(209, 416.5)
|
||||
shape = SubResource("RectangleShape2D_kfmgh")
|
136
prefab/roomTemplates/tutorials/spellEditor.tscn
Normal file
136
prefab/roomTemplates/tutorials/spellEditor.tscn
Normal file
|
@ -0,0 +1,136 @@
|
|||
[gd_scene load_steps=12 format=4 uid="uid://du5ldsp613fei"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/map/PlayerSpawn.cs" id="1_q04qt"]
|
||||
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="2_5bnvh"]
|
||||
[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="3_atgj7"]
|
||||
[ext_resource type="Script" path="res://scripts/map/ItemSpawn.cs" id="4_6ihp7"]
|
||||
[ext_resource type="PackedScene" uid="uid://djsh4unystlf0" path="res://prefab/furnitures/SpellEditor.tscn" id="5_0kep0"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdjmfqp854utu" path="res://sprites/tutorials/spellEditor.png" id="6_dbg76"]
|
||||
[ext_resource type="PackedScene" uid="uid://dld3qttpsdjpe" path="res://prefab/furnitures/WoodenBox.tscn" id="7_jybe6"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jxmys"]
|
||||
size = Vector2(23, 54.875)
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_064c7"]
|
||||
vertices = PackedVector2Array(756.172, 267.297, 756.82, 306.008, 45.0312, 306.977, 723.094, 268.297, 45.9688, 42, 721.094, 42)
|
||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 2, 4, 5)])
|
||||
outlines = Array[PackedVector2Array]([PackedVector2Array(36, 32, 731, 32, 733, 258, 766, 257, 767, 316, 35, 317)])
|
||||
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"]
|
||||
size = Vector2(758, 342)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_u54ac"]
|
||||
size = Vector2(658, 284)
|
||||
|
||||
[node name="InitialRoom3" type="Node2D"]
|
||||
|
||||
[node name="RoomSlotList" type="Node2D" parent="."]
|
||||
|
||||
[node name="Slot1" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Slot1"]
|
||||
position = Vector2(751.5, 289.438)
|
||||
shape = SubResource("RectangleShape2D_jxmys")
|
||||
debug_color = Color(0, 0.6, 0.701961, 0.419608)
|
||||
|
||||
[node name="PlayerSpawn" type="Marker2D" parent="."]
|
||||
position = Vector2(54, 256)
|
||||
script = ExtResource("1_q04qt")
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
navigation_polygon = SubResource("NavigationPolygon_064c7")
|
||||
|
||||
[node name="TileMap" type="Node2D" parent="."]
|
||||
|
||||
[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAOAAYAAQAGAAUAAAANAAYAAQAGAAUAAAAMAAYAAQAGAAUAAAALAAYAAQAGAAUAAAAKAAYAAQAGAAUAAAAJAAYAAQAGAAUAAAAIAAYAAQAGAAUAAAAHAAYAAQAGAAUAAAAGAAYAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAANAAUAAQAGAAUAAAANAAQAAQAGAAUAAAANAAMAAQAGAAUAAAANAAIAAQAGAAUAAAANAAEAAQAGAAUAAAAMAAEAAQAGAAUAAAALAAEAAQAGAAUAAAAKAAEAAQAGAAUAAAAJAAEAAQAGAAUAAAAIAAEAAQAGAAUAAAAHAAEAAQAGAAUAAAAGAAEAAQAGAAUAAAAFAAEAAQAGAAUAAAAEAAEAAQAGAAUAAAADAAEAAQAGAAUAAAACAAEAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAACAAIAAQAGAAUAAAADAAIAAQAGAAUAAAAEAAIAAQAGAAUAAAAFAAIAAQAGAAUAAAAGAAIAAQAGAAUAAAAHAAIAAQAGAAUAAAAIAAIAAQAGAAUAAAAJAAIAAQAGAAUAAAAKAAIAAQAGAAUAAAALAAIAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAALAAMAAQAGAAUAAAAKAAMAAQAGAAUAAAAJAAMAAQAGAAUAAAAIAAMAAQAGAAUAAAAHAAMAAQAGAAUAAAAGAAMAAQAGAAUAAAAFAAMAAQAGAAUAAAAEAAMAAQAGAAUAAAADAAMAAQAGAAUAAAACAAMAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAACAAQAAQAGAAUAAAADAAQAAQAGAAUAAAAEAAQAAQAGAAUAAAAFAAQAAQAGAAUAAAAGAAQAAQAGAAUAAAAHAAQAAQAGAAUAAAAIAAQAAQAGAAUAAAAJAAQAAQAGAAUAAAAKAAQAAQAGAAUAAAALAAQAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAALAAUAAQAGAAUAAAAKAAUAAQAGAAUAAAAJAAUAAQAGAAUAAAAIAAUAAQAGAAUAAAAHAAUAAQAGAAUAAAAGAAUAAQAGAAUAAAAFAAUAAQAGAAUAAAAEAAUAAQAGAAUAAAADAAUAAQAGAAUAAAACAAUAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAACAAYAAQAGAAUAAAADAAYAAQAGAAUAAAAEAAYAAQAGAAUAAAAFAAYAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAUAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAACAAkAAQAGAAUAAAACAAgAAQAGAAUAAAACAAcAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAcAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAcAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAcAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAALAAkAAQAGAAUAAAALAAgAAQAGAAUAAAALAAcAAQAGAAUAAAAMAAcAAQAGAAUAAAAMAAgAAQAGAAUAAAAMAAkAAQAGAAUAAAANAAkAAQAGAAUAAAANAAgAAQAGAAUAAAANAAcAAQAGAAUAAAAOAAcAAQAGAAUAAAAOAAgAAQAGAAUAAAAOAAkAAQAGAAUAAAAPAAkAAQAGAAUAAAAPAAgAAQAGAAUAAAAPAAcAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAEAAQAGAAUAAAAQAAEAAQAGAAUAAAARAAEAAQAGAAUAAAASAAEAAQAGAAUAAAATAAEAAQAGAAUAAAAUAAEAAQAGAAUAAAAVAAEAAQAGAAUAAAAWAAEAAQAGAAUAAAAWAAIAAQAGAAUAAAAVAAIAAQAGAAUAAAAUAAIAAQAGAAUAAAATAAIAAQAGAAUAAAASAAIAAQAGAAUAAAARAAIAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAARAAMAAQAGAAUAAAASAAMAAQAGAAUAAAATAAMAAQAGAAUAAAAUAAMAAQAGAAUAAAAVAAMAAQAGAAUAAAAWAAMAAQAGAAUAAAAWAAQAAQAGAAUAAAAVAAQAAQAGAAUAAAAUAAQAAQAGAAUAAAATAAQAAQAGAAUAAAASAAQAAQAGAAUAAAARAAQAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAARAAUAAQAGAAUAAAASAAUAAQAGAAUAAAATAAUAAQAGAAUAAAAUAAUAAQAGAAUAAAAVAAUAAQAGAAUAAAAWAAUAAQAGAAUAAAAWAAYAAQAGAAUAAAAVAAYAAQAGAAUAAAAUAAYAAQAGAAUAAAATAAYAAQAGAAUAAAASAAYAAQAGAAUAAAARAAYAAQAGAAUAAAAQAAYAAQAGAAUAAAAQAAcAAQAGAAUAAAARAAcAAQAGAAUAAAASAAcAAQAGAAUAAAATAAcAAQAGAAUAAAAUAAcAAQAGAAUAAAAVAAcAAQAGAAUAAAAWAAcAAQAGAAUAAAAWAAgAAQAGAAUAAAAVAAgAAQAGAAUAAAAUAAgAAQAGAAUAAAATAAgAAQAGAAUAAAASAAgAAQAGAAUAAAARAAgAAQAGAAUAAAAQAAgAAQAGAAUAAAAQAAkAAQAGAAUAAAARAAkAAQAGAAUAAAASAAkAAQAGAAUAAAATAAkAAQAGAAUAAAAUAAkAAQAGAAUAAAAVAAkAAQAGAAUAAAAWAAkAAQAGAAUAAAAXAAkAAQAGAAUAAAAXAAgAAQAGAAUAAAA=")
|
||||
tile_set = ExtResource("2_5bnvh")
|
||||
navigation_enabled = false
|
||||
|
||||
[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAEAAkAAQAHAAUAAAAWAAEAAQAHAAQAAAA=")
|
||||
tile_set = ExtResource("2_5bnvh")
|
||||
|
||||
[node name="Ground" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAA=")
|
||||
tile_set = ExtResource("2_5bnvh")
|
||||
|
||||
[node name="Barrier" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAXAAgAAQAAAAEAAAAXAAkAAQAAAAEAAAA=")
|
||||
tile_set = ExtResource("2_5bnvh")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(386, 178)
|
||||
scale = Vector2(23.9375, 11.0625)
|
||||
texture = ExtResource("3_atgj7")
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
offset_left = 37.0
|
||||
offset_top = 46.0
|
||||
offset_right = 200.0
|
||||
offset_bottom = 71.0
|
||||
text = "ui_tutorial_spellEditor"
|
||||
|
||||
[node name="Label2" type="Label" parent="."]
|
||||
offset_left = 391.0
|
||||
offset_top = 261.0
|
||||
offset_right = 554.0
|
||||
offset_bottom = 286.0
|
||||
text = "ui_tutorial_break_box"
|
||||
|
||||
[node name="SpellEditor" type="Sprite2D" parent="."]
|
||||
position = Vector2(621, 100)
|
||||
texture = ExtResource("6_dbg76")
|
||||
|
||||
[node name="RigidBody2D" parent="." instance=ExtResource("5_0kep0")]
|
||||
position = Vector2(227, 283)
|
||||
|
||||
[node name="WoodenBox" parent="." instance=ExtResource("7_jybe6")]
|
||||
position = Vector2(715, 244)
|
||||
_initialDurability = 0
|
||||
_furnitureName = ""
|
||||
|
||||
[node name="WoodenBox2" parent="." instance=ExtResource("7_jybe6")]
|
||||
position = Vector2(715, 200)
|
||||
_initialDurability = 0
|
||||
_furnitureName = ""
|
||||
|
||||
[node name="WoodenBox3" parent="." instance=ExtResource("7_jybe6")]
|
||||
position = Vector2(715, 162)
|
||||
_initialDurability = 0
|
||||
_furnitureName = ""
|
||||
|
||||
[node name="AutoSpawn" type="Node2D" parent="."]
|
||||
|
||||
[node name="beginner_staff" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(134, 248)
|
||||
script = ExtResource("4_6ihp7")
|
||||
_itemIdList = PackedStringArray("beginner_staff")
|
||||
|
||||
[node name="magic_missile" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(100, 250)
|
||||
script = ExtResource("4_6ihp7")
|
||||
_itemIdList = PackedStringArray("magic_missile")
|
||||
|
||||
[node name="tracking_spell" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(156, 245)
|
||||
script = ExtResource("4_6ihp7")
|
||||
_itemIdList = PackedStringArray("tracking_spell")
|
||||
|
||||
[node name="RoomArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"]
|
||||
position = Vector2(383, 175)
|
||||
shape = SubResource("RectangleShape2D_kiih8")
|
||||
|
||||
[node name="SpawnArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpawnArea"]
|
||||
position = Vector2(405, 178)
|
||||
shape = SubResource("RectangleShape2D_u54ac")
|
142
prefab/roomTemplates/tutorials/tripleShotSpell.tscn
Normal file
142
prefab/roomTemplates/tutorials/tripleShotSpell.tscn
Normal file
|
@ -0,0 +1,142 @@
|
|||
[gd_scene load_steps=12 format=4 uid="uid://dodxp4mm0emj3"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="2_k54gk"]
|
||||
[ext_resource type="Texture2D" uid="uid://drw45jlmfo0su" path="res://sprites/light/White_100.png" id="3_d6t7n"]
|
||||
[ext_resource type="PackedScene" uid="uid://dld3qttpsdjpe" path="res://prefab/furnitures/WoodenBox.tscn" id="4_60glh"]
|
||||
[ext_resource type="Script" path="res://scripts/map/ItemSpawn.cs" id="4_fh50l"]
|
||||
[ext_resource type="PackedScene" uid="uid://djsh4unystlf0" path="res://prefab/furnitures/SpellEditor.tscn" id="5_ll4ng"]
|
||||
[ext_resource type="Texture2D" uid="uid://kgodvs3ilxbs" path="res://sprites/tutorials/tripleShotSpell.png" id="6_2qcf3"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jxmys"]
|
||||
size = Vector2(23, 54.875)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xgxoy"]
|
||||
size = Vector2(26, 57)
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_064c7"]
|
||||
vertices = PackedVector2Array(728.094, 269, 755.672, 269, 754.328, 309.062, 457.93, 310.93, 621.094, 264.742, 619.094, 45.0781, 726.078, 45.9219, 562.906, 266.273, 456.93, 150.68, 564.898, 43.0078, 42.9531, 43.9766, 404.938, 157.18, 41.9609, 265.109, 405.93, 309.023, 10, 309.969, 10, 268.102)
|
||||
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 5, 6, 0), PackedInt32Array(4, 0, 3, 7), PackedInt32Array(7, 3, 8, 9), PackedInt32Array(10, 9, 8, 11), PackedInt32Array(12, 10, 11, 13), PackedInt32Array(12, 13, 14, 15)])
|
||||
outlines = Array[PackedVector2Array]([PackedVector2Array(33, 34, 32, 256, 0, 259, 0, 320, 416, 319, 415, 166, 447, 162, 448, 321, 764, 319, 766, 259, 738, 259, 736, 36, 609, 35, 611, 255, 573, 256, 575, 33)])
|
||||
source_geometry_group_name = &"navigation_polygon_source_group"
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kiih8"]
|
||||
size = Vector2(755, 340)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_o4dgl"]
|
||||
size = Vector2(706, 289)
|
||||
|
||||
[node name="InitialRoom" type="Node2D"]
|
||||
|
||||
[node name="RoomSlotList" type="Node2D" parent="."]
|
||||
|
||||
[node name="Slot1" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Slot1"]
|
||||
position = Vector2(751.5, 289.438)
|
||||
shape = SubResource("RectangleShape2D_jxmys")
|
||||
debug_color = Color(0, 0.6, 0.701961, 0.419608)
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="RoomSlotList"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D"]
|
||||
position = Vector2(17, 288)
|
||||
shape = SubResource("RectangleShape2D_xgxoy")
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
navigation_polygon = SubResource("NavigationPolygon_064c7")
|
||||
|
||||
[node name="TileMap" type="Node2D" parent="."]
|
||||
|
||||
[node name="BackgroundWall" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAOAAYAAQAGAAUAAAANAAYAAQAGAAUAAAAMAAYAAQAGAAUAAAALAAYAAQAGAAUAAAAKAAYAAQAGAAUAAAAJAAYAAQAGAAUAAAAIAAYAAQAGAAUAAAAHAAYAAQAGAAUAAAAGAAYAAQAGAAUAAAAOAAEAAQAGAAUAAAAOAAIAAQAGAAUAAAAOAAMAAQAGAAUAAAAOAAQAAQAGAAUAAAAOAAUAAQAGAAUAAAANAAUAAQAGAAUAAAANAAQAAQAGAAUAAAANAAMAAQAGAAUAAAANAAIAAQAGAAUAAAANAAEAAQAGAAUAAAAMAAEAAQAGAAUAAAALAAEAAQAGAAUAAAAKAAEAAQAGAAUAAAAJAAEAAQAGAAUAAAAIAAEAAQAGAAUAAAAHAAEAAQAGAAUAAAAGAAEAAQAGAAUAAAAFAAEAAQAGAAUAAAAEAAEAAQAGAAUAAAADAAEAAQAGAAUAAAACAAEAAQAGAAUAAAABAAEAAQAGAAUAAAABAAIAAQAGAAUAAAACAAIAAQAGAAUAAAADAAIAAQAGAAUAAAAEAAIAAQAGAAUAAAAFAAIAAQAGAAUAAAAGAAIAAQAGAAUAAAAHAAIAAQAGAAUAAAAIAAIAAQAGAAUAAAAJAAIAAQAGAAUAAAAKAAIAAQAGAAUAAAALAAIAAQAGAAUAAAAMAAIAAQAGAAUAAAAMAAMAAQAGAAUAAAALAAMAAQAGAAUAAAAKAAMAAQAGAAUAAAAJAAMAAQAGAAUAAAAIAAMAAQAGAAUAAAAHAAMAAQAGAAUAAAAGAAMAAQAGAAUAAAAFAAMAAQAGAAUAAAAEAAMAAQAGAAUAAAADAAMAAQAGAAUAAAACAAMAAQAGAAUAAAABAAMAAQAGAAUAAAABAAQAAQAGAAUAAAACAAQAAQAGAAUAAAADAAQAAQAGAAUAAAAEAAQAAQAGAAUAAAAFAAQAAQAGAAUAAAAGAAQAAQAGAAUAAAAHAAQAAQAGAAUAAAAIAAQAAQAGAAUAAAAJAAQAAQAGAAUAAAAKAAQAAQAGAAUAAAALAAQAAQAGAAUAAAAMAAQAAQAGAAUAAAAMAAUAAQAGAAUAAAALAAUAAQAGAAUAAAAKAAUAAQAGAAUAAAAJAAUAAQAGAAUAAAAIAAUAAQAGAAUAAAAHAAUAAQAGAAUAAAAGAAUAAQAGAAUAAAAFAAUAAQAGAAUAAAAEAAUAAQAGAAUAAAADAAUAAQAGAAUAAAACAAUAAQAGAAUAAAABAAUAAQAGAAUAAAABAAYAAQAGAAUAAAACAAYAAQAGAAUAAAADAAYAAQAGAAUAAAAEAAYAAQAGAAUAAAAFAAYAAQAGAAUAAAAPAAYAAQAGAAUAAAAPAAUAAQAGAAUAAAABAAcAAQAGAAUAAAABAAgAAQAGAAUAAAABAAkAAQAGAAUAAAACAAkAAQAGAAUAAAACAAgAAQAGAAUAAAACAAcAAQAGAAUAAAADAAcAAQAGAAUAAAADAAgAAQAGAAUAAAADAAkAAQAGAAUAAAAEAAkAAQAGAAUAAAAEAAgAAQAGAAUAAAAEAAcAAQAGAAUAAAAFAAcAAQAGAAUAAAAFAAgAAQAGAAUAAAAFAAkAAQAGAAUAAAAGAAkAAQAGAAUAAAAGAAgAAQAGAAUAAAAGAAcAAQAGAAUAAAAHAAgAAQAGAAUAAAAHAAkAAQAGAAUAAAAHAAcAAQAGAAUAAAAIAAcAAQAGAAUAAAAIAAgAAQAGAAUAAAAIAAkAAQAGAAUAAAAJAAkAAQAGAAUAAAAJAAgAAQAGAAUAAAAJAAcAAQAGAAUAAAAKAAcAAQAGAAUAAAAKAAgAAQAGAAUAAAAKAAkAAQAGAAUAAAALAAkAAQAGAAUAAAALAAgAAQAGAAUAAAALAAcAAQAGAAUAAAAMAAcAAQAGAAUAAAAMAAgAAQAGAAUAAAAMAAkAAQAGAAUAAAANAAkAAQAGAAUAAAANAAgAAQAGAAUAAAANAAcAAQAGAAUAAAAOAAcAAQAGAAUAAAAOAAgAAQAGAAUAAAAOAAkAAQAGAAUAAAAPAAkAAQAGAAUAAAAPAAgAAQAGAAUAAAAPAAcAAQAGAAUAAAAPAAQAAQAGAAUAAAAPAAMAAQAGAAUAAAAPAAIAAQAGAAUAAAAPAAEAAQAGAAUAAAAQAAEAAQAGAAUAAAARAAEAAQAGAAUAAAASAAEAAQAGAAUAAAATAAEAAQAGAAUAAAAUAAEAAQAGAAUAAAAVAAEAAQAGAAUAAAAWAAEAAQAGAAUAAAAWAAIAAQAGAAUAAAAVAAIAAQAGAAUAAAAUAAIAAQAGAAUAAAATAAIAAQAGAAUAAAASAAIAAQAGAAUAAAARAAIAAQAGAAUAAAAQAAIAAQAGAAUAAAAQAAMAAQAGAAUAAAARAAMAAQAGAAUAAAASAAMAAQAGAAUAAAATAAMAAQAGAAUAAAAUAAMAAQAGAAUAAAAVAAMAAQAGAAUAAAAWAAMAAQAGAAUAAAAWAAQAAQAGAAUAAAAVAAQAAQAGAAUAAAAUAAQAAQAGAAUAAAATAAQAAQAGAAUAAAASAAQAAQAGAAUAAAARAAQAAQAGAAUAAAAQAAQAAQAGAAUAAAAQAAUAAQAGAAUAAAARAAUAAQAGAAUAAAASAAUAAQAGAAUAAAATAAUAAQAGAAUAAAAUAAUAAQAGAAUAAAAVAAUAAQAGAAUAAAAWAAUAAQAGAAUAAAAWAAYAAQAGAAUAAAAVAAYAAQAGAAUAAAAUAAYAAQAGAAUAAAATAAYAAQAGAAUAAAASAAYAAQAGAAUAAAARAAYAAQAGAAUAAAAQAAYAAQAGAAUAAAAQAAcAAQAGAAUAAAARAAcAAQAGAAUAAAASAAcAAQAGAAUAAAATAAcAAQAGAAUAAAAUAAcAAQAGAAUAAAAVAAcAAQAGAAUAAAAWAAcAAQAGAAUAAAAWAAgAAQAGAAUAAAAVAAgAAQAGAAUAAAAUAAgAAQAGAAUAAAATAAgAAQAGAAUAAAASAAgAAQAGAAUAAAARAAgAAQAGAAUAAAAQAAgAAQAGAAUAAAAQAAkAAQAGAAUAAAARAAkAAQAGAAUAAAASAAkAAQAGAAUAAAATAAkAAQAGAAUAAAAUAAkAAQAGAAUAAAAVAAkAAQAGAAUAAAAWAAkAAQAGAAUAAAAXAAkAAQAGAAUAAAAXAAgAAQAGAAUAAAAAAAkAAQAGAAUAAAAAAAgAAQAGAAUAAAA=")
|
||||
tile_set = ExtResource("2_k54gk")
|
||||
navigation_enabled = false
|
||||
|
||||
[node name="BackgroundDecoration" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAWAAEAAQAHAAQAAAACAAkAAQAHAAEAAAA=")
|
||||
tile_set = ExtResource("2_k54gk")
|
||||
|
||||
[node name="Ground" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAAAAAAAQAAAAMAAAAAAAEAAQACAAEAAAAAAAIAAQACAAEAAAAAAAMAAQACAAEAAAAAAAQAAQACAAEAAAAAAAcAAQACAAEAAAAPAAAAAQABAAIAAAAAAAUAAQACAAEAAAAAAAYAAQACAAEAAAABAAAAAQABAAIAAAACAAAAAQABAAIAAAADAAAAAQABAAIAAAAEAAAAAQABAAIAAAAFAAAAAQABAAIAAAAGAAAAAQABAAIAAAAHAAAAAQABAAIAAAAIAAAAAQABAAIAAAAJAAAAAQABAAIAAAAKAAAAAQABAAIAAAALAAAAAQABAAIAAAAMAAAAAQABAAIAAAANAAAAAQABAAIAAAAOAAAAAQABAAMAAAAAAAoAAQAAAAUAAAABAAoAAQABAAAAAAACAAoAAQABAAAAAAADAAoAAQABAAAAAAAEAAoAAQABAAAAAAAFAAoAAQABAAAAAAAGAAoAAQABAAAAAAAHAAoAAQABAAAAAAAIAAoAAQABAAAAAAAJAAoAAQABAAAAAAAKAAoAAQABAAAAAAALAAoAAQABAAAAAAAMAAoAAQABAAAAAAANAAoAAQABAAAAAAAOAAoAAQABAAAAAAAPAAoAAQABAAAAAAAQAAoAAQABAAAAAAARAAoAAQABAAAAAAASAAoAAQABAAAAAAATAAoAAQABAAAAAAAUAAoAAQABAAAAAAAVAAoAAQABAAAAAAAWAAoAAQABAAAAAAAXAAoAAQACAAUAAAAQAAAAAQABAAIAAAARAAAAAQABAAIAAAASAAAAAQABAAIAAAATAAAAAQABAAIAAAAUAAAAAQABAAIAAAAXAAcAAQAAAAEAAAAXAAYAAQAAAAEAAAAXAAUAAQAAAAEAAAAXAAQAAQAAAAEAAAAXAAMAAQAAAAEAAAAXAAIAAQAAAAEAAAAXAAEAAQAAAAEAAAAXAAAAAQACAAMAAAAVAAAAAQABAAIAAAAWAAAAAQABAAIAAAAEAAkAAQAEAAQAAAAFAAgAAQAEAAQAAAAGAAcAAQAEAAQAAAAHAAYAAQAEAAQAAAAIAAUAAQAEAAQAAAAKAAUAAQAEAAQAAAAMAAUAAQAEAAQAAAASAAUAAQADAAAAAAAJAAUAAQAEAAQAAAALAAUAAQAEAAQAAAANAAkAAQADAAAAAAANAAgAAQADAAAAAAANAAcAAQADAAAAAAANAAYAAQADAAAAAAANAAUAAQADAAAAAAASAAYAAQADAAAAAAASAAcAAQADAAAAAAASAAQAAQADAAAAAAASAAMAAQADAAAAAAASAAIAAQADAAAAAAASAAEAAQADAAAAAAAOAAUAAQADAAQAAAAPAAYAAQAEAAQAAAAQAAcAAQAEAAQAAAARAAgAAQAEAAQAAAAQAAkAAQAEAAQAAAA=")
|
||||
tile_set = ExtResource("2_k54gk")
|
||||
|
||||
[node name="Barrier" type="TileMapLayer" parent="TileMap"]
|
||||
use_parent_material = true
|
||||
tile_map_data = PackedByteArray("AAAXAAgAAQAAAAEAAAAXAAkAAQAAAAEAAAAAAAgAAQACAAEAAAAAAAkAAQACAAEAAAA=")
|
||||
tile_set = ExtResource("2_k54gk")
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(386, 178)
|
||||
scale = Vector2(23.9375, 11.0625)
|
||||
texture = ExtResource("3_d6t7n")
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
offset_left = 54.0
|
||||
offset_top = 55.0
|
||||
offset_right = 277.0
|
||||
offset_bottom = 80.0
|
||||
text = "ui_tutorial_jump_onto_platform"
|
||||
|
||||
[node name="Label2" type="Label" parent="."]
|
||||
offset_left = 151.0
|
||||
offset_top = 126.0
|
||||
offset_right = 453.0
|
||||
offset_bottom = 151.0
|
||||
text = "ui_tutorial_combine_more_powerful_spells"
|
||||
|
||||
[node name="WoodenBox" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(711, 179)
|
||||
|
||||
[node name="WoodenBox4" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(676, 179)
|
||||
|
||||
[node name="WoodenBox5" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(676, 144)
|
||||
|
||||
[node name="WoodenBox6" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(675, 102)
|
||||
|
||||
[node name="WoodenBox7" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(641, 180)
|
||||
|
||||
[node name="WoodenBox8" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(640, 142)
|
||||
|
||||
[node name="WoodenBox9" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(640, 101)
|
||||
|
||||
[node name="WoodenBox2" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(712, 138)
|
||||
|
||||
[node name="WoodenBox3" parent="." instance=ExtResource("4_60glh")]
|
||||
position = Vector2(711, 98)
|
||||
|
||||
[node name="RigidBody2D" parent="." instance=ExtResource("5_ll4ng")]
|
||||
position = Vector2(473, 285)
|
||||
|
||||
[node name="TripleShotSpell" type="Sprite2D" parent="."]
|
||||
position = Vector2(637, 85)
|
||||
texture = ExtResource("6_2qcf3")
|
||||
|
||||
[node name="RoomArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomArea"]
|
||||
position = Vector2(383.5, 176)
|
||||
shape = SubResource("RectangleShape2D_kiih8")
|
||||
|
||||
[node name="SpawnArea" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="SpawnArea"]
|
||||
position = Vector2(385, 177.5)
|
||||
shape = SubResource("RectangleShape2D_o4dgl")
|
||||
|
||||
[node name="AutoSpawn" type="Node2D" parent="."]
|
||||
|
||||
[node name="x3" type="Marker2D" parent="AutoSpawn"]
|
||||
position = Vector2(434, 105)
|
||||
script = ExtResource("4_fh50l")
|
||||
_itemIdList = PackedStringArray("x3")
|
19
prefab/ui/DamageNumber.tscn
Normal file
19
prefab/ui/DamageNumber.tscn
Normal file
|
@ -0,0 +1,19 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://bci3swhs1crfb"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/damage/DamageNumber.cs" id="1_fui0m"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vq24w"]
|
||||
|
||||
[node name="DamageNumber" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_fui0m")
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 23.0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_vq24w")
|
||||
|
||||
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
|
14
prefab/ui/HealthBar.tscn
Normal file
14
prefab/ui/HealthBar.tscn
Normal file
|
@ -0,0 +1,14 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://sqqfrmikmk5v"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bptnlrbqoc5qw" path="res://sprites/progressBar/Under.png" id="1_sc0v3"]
|
||||
[ext_resource type="Texture2D" uid="uid://i6st7ohpjkwu" path="res://sprites/progressBar/Over.png" id="2_ay5vh"]
|
||||
[ext_resource type="Texture2D" uid="uid://cfky5jupwflnv" path="res://sprites/progressBar/Progress.png" id="2_s0gle"]
|
||||
[ext_resource type="Script" path="res://scripts/health/HealthBar.cs" id="4_84gre"]
|
||||
|
||||
[node name="HealthBar" type="TextureProgressBar"]
|
||||
offset_right = 96.0
|
||||
offset_bottom = 12.0
|
||||
texture_under = ExtResource("1_sc0v3")
|
||||
texture_over = ExtResource("2_ay5vh")
|
||||
texture_progress = ExtResource("2_s0gle")
|
||||
script = ExtResource("4_84gre")
|
53
prefab/ui/ItemSlot.tscn
Normal file
53
prefab/ui/ItemSlot.tscn
Normal file
|
@ -0,0 +1,53 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://d2i4udh0hho41"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/inventory/ItemSlotNode.cs" id="1_fbwot"]
|
||||
[ext_resource type="Texture2D" uid="uid://dmthsdg1wx318" path="res://sprites/ui/ItemBarEmpty.png" id="1_y2wyt"]
|
||||
|
||||
[node name="ItemSlot" type="MarginContainer"]
|
||||
offset_right = 38.0
|
||||
offset_bottom = 38.0
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 0
|
||||
theme_override_constants/margin_left = 3
|
||||
theme_override_constants/margin_top = 3
|
||||
theme_override_constants/margin_right = 3
|
||||
theme_override_constants/margin_bottom = 3
|
||||
script = ExtResource("1_fbwot")
|
||||
|
||||
[node name="BackgroundTexture" type="TextureRect" parent="."]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("1_y2wyt")
|
||||
|
||||
[node name="IconTextureRect" type="TextureRect" parent="BackgroundTexture"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 3.0
|
||||
offset_top = 3.0
|
||||
offset_right = -3.0
|
||||
offset_bottom = -3.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="."]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="QuantityLabel" type="Label" parent="Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -1.0
|
||||
offset_top = -14.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 8
|
||||
theme_override_font_sizes/font_size = 10
|
21
prefab/ui/RoomNode.tscn
Normal file
21
prefab/ui/RoomNode.tscn
Normal file
|
@ -0,0 +1,21 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://y6rg5jc4viwn"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/levelGraphEditor/RoomNode.cs" id="1_jiu7r"]
|
||||
|
||||
[node name="RoomNode" type="GraphNode"]
|
||||
offset_right = 363.0
|
||||
offset_bottom = 218.0
|
||||
slot/0/left_enabled = true
|
||||
slot/0/left_type = 0
|
||||
slot/0/left_color = Color(1, 1, 1, 1)
|
||||
slot/0/left_icon = null
|
||||
slot/0/right_enabled = true
|
||||
slot/0/right_type = 0
|
||||
slot/0/right_color = Color(1, 1, 1, 1)
|
||||
slot/0/right_icon = null
|
||||
slot/0/draw_stylebox = true
|
||||
script = ExtResource("1_jiu7r")
|
||||
|
||||
[node name="DescribeLabel" type="Label" parent="."]
|
||||
layout_mode = 2
|
||||
text = "ui_describe"
|
53
prefab/ui/SpellEditorUI.tscn
Normal file
53
prefab/ui/SpellEditorUI.tscn
Normal file
|
@ -0,0 +1,53 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://h7lvaqqlsi4t"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/SpellEditorUi.cs" id="1_1pxjs"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2i4udh0hho41" path="res://prefab/ui/ItemSlot.tscn" id="2_3ut57"]
|
||||
|
||||
[node name="SpellEditorUi" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_1pxjs")
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 25.0
|
||||
grow_horizontal = 2
|
||||
text = "ui_spell_editor"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="ExitButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -91.0
|
||||
offset_top = 11.0
|
||||
offset_right = -24.0
|
||||
offset_bottom = 44.0
|
||||
grow_horizontal = 0
|
||||
text = "ui_close"
|
||||
|
||||
[node name="HFlowContainer" type="HFlowContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 32.0
|
||||
offset_top = 127.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = 629.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="ItemSlot" parent="." instance=ExtResource("2_3ut57")]
|
||||
layout_mode = 1
|
||||
offset_left = 34.0
|
||||
offset_top = 73.0
|
||||
offset_right = 72.0
|
||||
offset_bottom = 111.0
|
36
prefab/ui/contributorGroup.tscn
Normal file
36
prefab/ui/contributorGroup.tscn
Normal file
|
@ -0,0 +1,36 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://6i7rgx3sdu1k"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/ContributorGroupLoader.cs" id="1_xwjh1"]
|
||||
|
||||
[node name="ContributorGroup" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_vertical = 3
|
||||
script = ExtResource("1_xwjh1")
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 20.0
|
||||
offset_right = -1082.0
|
||||
offset_bottom = 39.0
|
||||
grow_horizontal = 2
|
||||
theme_override_font_sizes/font_size = 25
|
||||
text = "组名"
|
||||
|
||||
[node name="HFlowContainer" type="HFlowContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 15.0
|
||||
offset_top = 45.0
|
||||
offset_right = -14.0
|
||||
offset_bottom = -6.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
45
prefab/ui/packsackUI.tscn
Normal file
45
prefab/ui/packsackUI.tscn
Normal file
|
@ -0,0 +1,45 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dsat7xk63bfg2"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/PacksackUi.cs" id="1_wm4bu"]
|
||||
|
||||
[node name="PacksackUi" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_wm4bu")
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 25.0
|
||||
grow_horizontal = 2
|
||||
text = "ui_name"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="ExitButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -91.0
|
||||
offset_top = 11.0
|
||||
offset_right = -24.0
|
||||
offset_bottom = 44.0
|
||||
grow_horizontal = 0
|
||||
text = "ui_close"
|
||||
|
||||
[node name="HFlowContainer" type="HFlowContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 26.0
|
||||
offset_top = 70.0
|
||||
offset_right = -29.0
|
||||
offset_bottom = 389.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 2
|
27
prefab/ui/plaint.tscn
Normal file
27
prefab/ui/plaint.tscn
Normal file
|
@ -0,0 +1,27 @@
|
|||
[gd_scene format=3 uid="uid://dmiyu1y726uo8"]
|
||||
|
||||
[node name="Plaint" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -36.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 36.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_colors/font_color = Color(0.988235, 0.768627, 0.0980392, 1)
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = "!"
|
||||
horizontal_alignment = 1
|
26
prefab/ui/query.tscn
Normal file
26
prefab/ui/query.tscn
Normal file
|
@ -0,0 +1,26 @@
|
|||
[gd_scene format=3 uid="uid://bvpvdloxe4wdf"]
|
||||
|
||||
[node name="Query" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -36.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 36.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = "?"
|
||||
horizontal_alignment = 1
|
40
prefab/weapons/BeginnerStaff.tscn
Normal file
40
prefab/weapons/BeginnerStaff.tscn
Normal file
|
@ -0,0 +1,40 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://cg2jmn7cs8m2c"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/weapon/ProjectileWeapon.cs" id="1_w4b6p"]
|
||||
[ext_resource type="Texture2D" uid="uid://pf2ilanjwino" path="res://sprites/weapon/BeginnerStaff_Icon.png" id="2_ip8xd"]
|
||||
[ext_resource type="Texture2D" uid="uid://b4g1mkvjf7uns" path="res://sprites/weapon/BeginnerStaff.png" id="3_rhhwp"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_p12sk"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_14m1g"]
|
||||
size = Vector2(48, 5)
|
||||
|
||||
[node name="BeginnerStaff" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
script = ExtResource("1_w4b6p")
|
||||
_numberSlots = 5
|
||||
_fireSequentially = true
|
||||
FiringIntervalAsMillisecond = 280
|
||||
_recoilStrength = 5
|
||||
UniqueIcon = ExtResource("2_ip8xd")
|
||||
|
||||
[node name="StaffOfTheUndead2" type="Sprite2D" parent="."]
|
||||
position = Vector2(30, 0)
|
||||
texture = ExtResource("3_rhhwp")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(26, 0.5)
|
||||
shape = SubResource("RectangleShape2D_14m1g")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("4_p12sk")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = 6.0
|
||||
offset_top = 48.0
|
||||
offset_right = 46.0
|
||||
offset_bottom = 73.0
|
46
prefab/weapons/IronAxe.tscn
Normal file
46
prefab/weapons/IronAxe.tscn
Normal file
|
@ -0,0 +1,46 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://g1jrthe4ojdd"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/weapon/MeleeWeapon.cs" id="1_snmy1"]
|
||||
[ext_resource type="Texture2D" uid="uid://wt50kx6bup51" path="res://sprites/weapon/StaffNecromancy.png" id="3_cm7e6"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_qimud"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_14m1g"]
|
||||
size = Vector2(49, 5.25)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2u0n7"]
|
||||
size = Vector2(102, 94)
|
||||
|
||||
[node name="IronAxe" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_snmy1")
|
||||
|
||||
[node name="StaffOfTheUndead2" type="Sprite2D" parent="."]
|
||||
position = Vector2(30, 0)
|
||||
texture = ExtResource("3_cm7e6")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(25.5, 0.375)
|
||||
shape = SubResource("RectangleShape2D_14m1g")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("4_qimud")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = 6.0
|
||||
offset_top = 48.0
|
||||
offset_right = 46.0
|
||||
offset_bottom = 73.0
|
||||
|
||||
[node name="WeaponDamageArea" type="Area2D" parent="."]
|
||||
collision_layer = 512
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="WeaponDamageArea"]
|
||||
position = Vector2(127, 1)
|
||||
shape = SubResource("RectangleShape2D_2u0n7")
|
41
prefab/weapons/StaffNecromancy.tscn
Normal file
41
prefab/weapons/StaffNecromancy.tscn
Normal file
|
@ -0,0 +1,41 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://dnnn2xyayiehk"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://wt50kx6bup51" path="res://sprites/weapon/StaffNecromancy.png" id="1_ms3us"]
|
||||
[ext_resource type="Script" path="res://scripts/weapon/ProjectileWeapon.cs" id="1_w8hhv"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg5vwprt66w4j" path="res://sprites/weapon/StaffNecromancy_Icon.png" id="3_31iau"]
|
||||
[ext_resource type="AudioStream" uid="uid://cak6chjjsu7wo" path="res://sounds/fire.wav" id="4_ffr2k"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_14m1g"]
|
||||
size = Vector2(49, 5.25)
|
||||
|
||||
[node name="StaffOfTheUndead" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
script = ExtResource("1_w8hhv")
|
||||
_numberSlots = 1
|
||||
_spellList = PackedStringArray("necromancy")
|
||||
_fireSequentially = true
|
||||
FiringIntervalAsMillisecond = 350
|
||||
_recoilStrength = 5
|
||||
UniqueIcon = ExtResource("3_31iau")
|
||||
|
||||
[node name="StaffOfTheUndead2" type="Sprite2D" parent="."]
|
||||
position = Vector2(30, 0)
|
||||
texture = ExtResource("1_ms3us")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(25.5, 0.375)
|
||||
shape = SubResource("RectangleShape2D_14m1g")
|
||||
|
||||
[node name="Marker2D" type="Marker2D" parent="."]
|
||||
position = Vector2(65, 0)
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Marker2D"]
|
||||
stream = ExtResource("4_ffr2k")
|
||||
bus = &"SoundEffect"
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
offset_left = 6.0
|
||||
offset_top = 48.0
|
||||
offset_right = 46.0
|
||||
offset_bottom = 73.0
|
180
project.godot
Normal file
180
project.godot
Normal file
|
@ -0,0 +1,180 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Traveler"
|
||||
config/version="0.0.1"
|
||||
run/main_scene="res://scenes/splashScreen.tscn"
|
||||
config/features=PackedStringArray("4.3", "C#", "Mobile")
|
||||
boot_splash/show_image=false
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[dotnet]
|
||||
|
||||
project/assembly_name="ColdMint.Traveler"
|
||||
|
||||
[file_customization]
|
||||
|
||||
folder_colors={
|
||||
"res://locals/": "red",
|
||||
"res://prefab/": "orange",
|
||||
"res://scenes/": "yellow",
|
||||
"res://scripts/": "green",
|
||||
"res://sprites/": "teal",
|
||||
"res://tileSets/": "blue"
|
||||
}
|
||||
|
||||
[gui]
|
||||
|
||||
theme/custom_font="res://fonts/ark-pixel-12px-proportional-zh_cn.ttf"
|
||||
|
||||
[input]
|
||||
|
||||
ui_accept={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
ui_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
pick_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
throw={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
use_item={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(206, 22),"global_position":Vector2(215, 68),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_1={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":49,"physical_keycode":0,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_2={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":50,"physical_keycode":0,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_3={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":51,"physical_keycode":0,"key_label":0,"unicode":51,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_4={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":52,"physical_keycode":0,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_5={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":53,"physical_keycode":0,"key_label":0,"unicode":53,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_6={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":54,"physical_keycode":0,"key_label":0,"unicode":54,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_7={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":55,"physical_keycode":0,"key_label":0,"unicode":55,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_8={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":56,"physical_keycode":0,"key_label":0,"unicode":56,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_9={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":57,"physical_keycode":0,"key_label":0,"unicode":57,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_next={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(257, 22),"global_position":Vector2(266, 68),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
hotbar_previous={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":8,"position":Vector2(169, 17),"global_position":Vector2(173, 58),"factor":1.0,"button_index":4,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
push={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[internationalization]
|
||||
|
||||
locale/translations=PackedStringArray("res://locals/DeathInfo.en.translation", "res://locals/DeathInfo.ja.translation", "res://locals/DeathInfo.zh.translation", "res://locals/InputMapping.en.translation", "res://locals/InputMapping.ja.translation", "res://locals/InputMapping.zh.translation", "res://locals/Log.en.translation", "res://locals/Log.ja.translation", "res://locals/Log.zh.translation", "res://locals/Slogan.en.translation", "res://locals/Slogan.ja.translation", "res://locals/Slogan.zh.translation", "res://locals/UI.en.translation", "res://locals/UI.ja.translation", "res://locals/UI.zh.translation", "res://locals/Item.en.translation", "res://locals/Item.ja.translation", "res://locals/Item.zh.translation", "res://locals/Action.en.translation", "res://locals/Action.ja.translation", "res://locals/Action.zh.translation", "res://locals/Misc.en.translation", "res://locals/Misc.ja.translation", "res://locals/Misc.zh.translation", "res://locals/Character.en.translation", "res://locals/Character.ja.translation", "res://locals/Character.zh.translation", "res://locals/SloganOnMap.en.translation", "res://locals/SloganOnMap.ja.translation", "res://locals/SloganOnMap.zh.translation")
|
||||
|
||||
[layer_names]
|
||||
|
||||
2d_physics/layer_1="RoomArea"
|
||||
2d_physics/layer_2="Floor"
|
||||
2d_physics/layer_3="Player"
|
||||
2d_physics/layer_4="PickAbleItem"
|
||||
2d_physics/layer_5="Projectile"
|
||||
2d_physics/layer_6="Platform"
|
||||
2d_physics/layer_7="Mob"
|
||||
2d_physics/layer_8="Wall"
|
||||
2d_physics/layer_9="Furniture"
|
||||
2d_physics/layer_10="WeaponDamageArea"
|
||||
2d_physics/layer_11="Barrier"
|
||||
|
||||
[physics]
|
||||
|
||||
2d/default_gravity=480.0
|
||||
|
||||
[rendering]
|
||||
|
||||
textures/canvas_textures/default_texture_filter=0
|
68
scenes/contributor.tscn
Normal file
68
scenes/contributor.tscn
Normal file
|
@ -0,0 +1,68 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://ljvmhhrk1d6j"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/ContributorLoader.cs" id="1_ia4x6"]
|
||||
|
||||
[node name="Contributor" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_ia4x6")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 45.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "ui_contributor"
|
||||
|
||||
[node name="ExitButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -86.0
|
||||
offset_top = 6.0
|
||||
offset_right = -19.0
|
||||
offset_bottom = 39.0
|
||||
grow_horizontal = 0
|
||||
text = "ui_close"
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 20.0
|
||||
offset_top = 59.0
|
||||
offset_right = -18.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 16.0
|
||||
offset_top = -36.0
|
||||
offset_right = 168.0
|
||||
offset_bottom = -11.0
|
||||
grow_vertical = 0
|
||||
text = "ui_unordered_list_tip"
|
126
scenes/game.tscn
Normal file
126
scenes/game.tscn
Normal file
|
@ -0,0 +1,126 @@
|
|||
[gd_scene load_steps=9 format=3 uid="uid://bnftvkj2cido7"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/sceneLoader/GameSceneLoader.cs" id="1_mqdgt"]
|
||||
[ext_resource type="Texture2D" uid="uid://cs6e0af876ss5" path="res://sprites/ui/HeartEmpty.png" id="2_n1yht"]
|
||||
[ext_resource type="Script" path="res://scripts/inventory/HotBar.cs" id="2_owrhq"]
|
||||
[ext_resource type="Script" path="res://scripts/HealthBarUi.cs" id="2_xrm3v"]
|
||||
[ext_resource type="Script" path="res://scripts/FpsLabel.cs" id="5_dis4v"]
|
||||
[ext_resource type="PackedScene" uid="uid://c74180dtf7j7a" path="res://scenes/mapContainer.tscn" id="6_ljdj4"]
|
||||
[ext_resource type="PackedScene" uid="uid://bb188382q7btp" path="res://scenes/gameOverMenu.tscn" id="6_yjmrv"]
|
||||
[ext_resource type="Script" path="res://scripts/utils/UiGroup.cs" id="7_p0u6a"]
|
||||
|
||||
[node name="Game" type="Node2D"]
|
||||
script = ExtResource("1_mqdgt")
|
||||
|
||||
[node name="MapRoot" type="Node2D" parent="."]
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Control" type="Control" parent="CanvasLayer"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 20.0
|
||||
offset_top = -85.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="HealthBarUi" type="HBoxContainer" parent="CanvasLayer/Control/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("2_xrm3v")
|
||||
|
||||
[node name="TextureRect3" type="TextureRect" parent="CanvasLayer/Control/VBoxContainer/HealthBarUi"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("2_n1yht")
|
||||
|
||||
[node name="HotBar" type="HBoxContainer" parent="CanvasLayer/Control/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("2_owrhq")
|
||||
|
||||
[node name="TextureRect3" type="TextureRect" parent="CanvasLayer/Control/VBoxContainer/HotBar"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("2_n1yht")
|
||||
|
||||
[node name="FPSLabel" type="Label" parent="CanvasLayer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -40.0
|
||||
offset_bottom = 25.0
|
||||
grow_horizontal = 0
|
||||
horizontal_alignment = 2
|
||||
script = ExtResource("5_dis4v")
|
||||
|
||||
[node name="RecreateMapButton" type="Button" parent="CanvasLayer/Control"]
|
||||
layout_mode = 0
|
||||
offset_right = 8.0
|
||||
offset_bottom = 8.0
|
||||
text = "ui_re_create_map"
|
||||
|
||||
[node name="SeedLabel" type="Label" parent="CanvasLayer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -45.0
|
||||
offset_top = -16.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
theme_override_font_sizes/font_size = 10
|
||||
|
||||
[node name="MapContainer" parent="CanvasLayer/Control" instance=ExtResource("6_ljdj4")]
|
||||
layout_mode = 1
|
||||
|
||||
[node name="DynamicUiGroup" type="Control" parent="CanvasLayer"]
|
||||
visible = false
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("7_p0u6a")
|
||||
|
||||
[node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource("6_yjmrv")]
|
||||
visible = false
|
||||
|
||||
[node name="ProjectileContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="DamageNumberContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="WeaponContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="SpellContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="PickAbleContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="PlayerContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="AICharacterContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="PacksackContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="CanvasModulate" type="CanvasModulate" parent="."]
|
||||
color = Color(0, 0, 0, 1)
|
71
scenes/gameOverMenu.tscn
Normal file
71
scenes/gameOverMenu.tscn
Normal file
|
@ -0,0 +1,71 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://bb188382q7btp"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/GameOverLoaderMenuLoader.cs" id="1_vj6du"]
|
||||
|
||||
[node name="GameOverMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_vj6du")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
color = Color(0.941176, 0.243137, 0.243137, 0.258824)
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="GameOverLabel" type="Label" parent="CenterContainer/VBoxContainer/CenterContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "ui_game_over_title"
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme_override_constants/margin_top = 18
|
||||
|
||||
[node name="CenterContainer2" type="CenterContainer" parent="CenterContainer/VBoxContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="DeathInfoLabel" type="Label" parent="CenterContainer/VBoxContainer/MarginContainer/CenterContainer2"]
|
||||
layout_mode = 2
|
||||
text = "ui_death_info_describe"
|
||||
|
||||
[node name="MarginContainer2" type="MarginContainer" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme_override_constants/margin_top = 10
|
||||
theme_override_constants/margin_bottom = 150
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="CenterContainer/VBoxContainer/MarginContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer/MarginContainer2/CenterContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_rebuild_the_world"
|
288
scenes/levelGraphEditor.tscn
Normal file
288
scenes/levelGraphEditor.tscn
Normal file
|
@ -0,0 +1,288 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://ckl23uwxrjat4"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/LevelGraphEditorLoader.cs" id="1_qgo7w"]
|
||||
|
||||
[node name="LevelGraphEditor" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_qgo7w")
|
||||
|
||||
[node name="GraphEdit" type="GraphEdit" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 12.0
|
||||
offset_top = 52.0
|
||||
offset_right = -16.0
|
||||
offset_bottom = -13.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
show_grid = false
|
||||
minimap_enabled = false
|
||||
show_minimap_button = false
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 11.0
|
||||
offset_top = 7.0
|
||||
offset_right = 143.0
|
||||
offset_bottom = 32.0
|
||||
text = "ui_level_graph_editor"
|
||||
|
||||
[node name="CreateOrEditorPanel" type="Panel" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 15.0
|
||||
offset_top = 44.0
|
||||
offset_right = -16.0
|
||||
offset_bottom = -15.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 10.0
|
||||
offset_top = 13.0
|
||||
offset_right = 97.0
|
||||
offset_bottom = 38.0
|
||||
text = "ui_create_room"
|
||||
|
||||
[node name="Label3" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 12.0
|
||||
offset_top = 106.0
|
||||
offset_right = 72.0
|
||||
offset_bottom = 131.0
|
||||
text = "ui_describe"
|
||||
|
||||
[node name="Label4" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 15.0
|
||||
offset_top = 152.0
|
||||
offset_right = 75.0
|
||||
offset_bottom = 177.0
|
||||
text = "ui_room_template_collection_prompt"
|
||||
|
||||
[node name="RoomTemplateTipsLabel" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 16.0
|
||||
offset_top = 259.0
|
||||
offset_right = 263.0
|
||||
offset_bottom = 284.0
|
||||
text = "errorTip"
|
||||
|
||||
[node name="RoomNameLineEdit" type="LineEdit" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 100.0
|
||||
offset_top = 59.0
|
||||
offset_right = -8.0
|
||||
offset_bottom = 92.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="RoomDescriptionLineEdit" type="LineEdit" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 100.0
|
||||
offset_top = 104.0
|
||||
offset_right = -8.0
|
||||
offset_bottom = 137.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="HideCreateRoomPanelButton" type="Button" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -57.0
|
||||
offset_top = 6.0
|
||||
offset_right = -11.0
|
||||
offset_bottom = 39.0
|
||||
grow_horizontal = 0
|
||||
text = "ui_close"
|
||||
|
||||
[node name="Label2" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 13.0
|
||||
offset_top = 60.0
|
||||
offset_right = 48.0
|
||||
offset_bottom = 85.0
|
||||
text = "ui_name"
|
||||
|
||||
[node name="CreateRoomButton" type="Button" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -80.0
|
||||
offset_top = -46.0
|
||||
offset_right = -13.0
|
||||
offset_bottom = -13.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "ui_creation"
|
||||
|
||||
[node name="RoomTemplateCollectionTextEdit" type="TextEdit" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 9.0
|
||||
offset_top = 184.0
|
||||
offset_right = -11.0
|
||||
offset_bottom = 245.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Label5" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 0
|
||||
offset_left = 16.0
|
||||
offset_top = 289.0
|
||||
offset_right = 56.0
|
||||
offset_bottom = 314.0
|
||||
text = "ui_tags"
|
||||
|
||||
[node name="TagLineEdit" type="LineEdit" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 11.0
|
||||
offset_top = 324.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = 357.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Label7" type="Label" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
offset_left = 14.0
|
||||
offset_top = 368.0
|
||||
offset_right = 283.0
|
||||
offset_bottom = 393.0
|
||||
text = "ui_room_injection_processor"
|
||||
|
||||
[node name="RoomInjectionProcessorDataTextEdit" type="TextEdit" parent="CreateOrEditorPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_left = 14.0
|
||||
offset_top = 404.0
|
||||
offset_right = -25.0
|
||||
offset_bottom = 493.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -160.0
|
||||
offset_top = 4.0
|
||||
offset_right = -15.0
|
||||
offset_bottom = 47.0
|
||||
grow_horizontal = 0
|
||||
|
||||
[node name="DeleteSelectedNodeButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_delete_selected_node"
|
||||
|
||||
[node name="OpenExportFolderButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_open_the_export_directory"
|
||||
|
||||
[node name="ShowSavePanelButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_save"
|
||||
|
||||
[node name="ShowLoadPanelButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_load"
|
||||
|
||||
[node name="ShowCreateRoomPanelButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_create_room"
|
||||
|
||||
[node name="ExitButton" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_close"
|
||||
|
||||
[node name="SaveOrLoadPanel" type="Panel" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 232.0
|
||||
offset_top = 202.0
|
||||
offset_right = -121.0
|
||||
offset_bottom = -155.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="SaveOrLoadPanelTitleLabel" type="Label" parent="SaveOrLoadPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -18.5
|
||||
offset_top = 15.0
|
||||
offset_right = 21.5
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
text = "ui_save"
|
||||
|
||||
[node name="FileNameLineEdit" type="LineEdit" parent="SaveOrLoadPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 18.0
|
||||
offset_top = -5.0
|
||||
offset_right = -18.0
|
||||
offset_bottom = 28.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="SaveOrLoadPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 20.0
|
||||
offset_top = -38.0
|
||||
offset_right = 80.0
|
||||
offset_bottom = -13.0
|
||||
grow_vertical = 2
|
||||
text = "ui_filename"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="SaveOrLoadPanel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -117.0
|
||||
offset_top = -50.0
|
||||
offset_right = -19.0
|
||||
offset_bottom = -10.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="CancelButton" type="Button" parent="SaveOrLoadPanel/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_cancel"
|
||||
|
||||
[node name="ActionButton" type="Button" parent="SaveOrLoadPanel/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "ui_save"
|
142
scenes/mainMenu.tscn
Normal file
142
scenes/mainMenu.tscn
Normal file
|
@ -0,0 +1,142 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://c3o422sb2opuh"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/MainMenuLoader.cs" id="1_ljkri"]
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_right = 3.0
|
||||
offset_bottom = 2.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_ljkri")
|
||||
|
||||
[node name="StartGameButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -47.5
|
||||
offset_top = 170.0
|
||||
offset_right = 47.5
|
||||
offset_bottom = 201.0
|
||||
grow_horizontal = 2
|
||||
text = "ui_start_game"
|
||||
|
||||
[node name="SettingsButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -44.5
|
||||
offset_top = 215.0
|
||||
offset_right = 50.5
|
||||
offset_bottom = 248.0
|
||||
grow_horizontal = 2
|
||||
disabled = true
|
||||
text = "ui_settings"
|
||||
|
||||
[node name="levelGraphEditorButton" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -44.5
|
||||
offset_top = 269.0
|
||||
offset_right = 50.5
|
||||
offset_bottom = 302.0
|
||||
grow_horizontal = 2
|
||||
text = "ui_level_graph_editor"
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 20.0
|
||||
offset_top = -103.0
|
||||
offset_right = 87.0
|
||||
offset_bottom = -20.0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="GithubLink" type="LinkButton" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 2
|
||||
text = "Github"
|
||||
uri = "https://github.com/Cold-Mint/Traveller"
|
||||
|
||||
[node name="BiliBiliLink" type="LinkButton" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 2
|
||||
text = "Bilibili"
|
||||
uri = "https://space.bilibili.com/1383759192"
|
||||
|
||||
[node name="CopyrightLabel" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "copyright"
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_top = 30.0
|
||||
offset_bottom = 98.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 45
|
||||
text = "ui_product_name"
|
||||
|
||||
[node name="CenterContainer2" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_top = 102.0
|
||||
offset_bottom = 127.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="SloganLabel" type="Label" parent="CenterContainer2"]
|
||||
layout_mode = 2
|
||||
text = "ui_slogan"
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -68.0
|
||||
offset_top = -60.0
|
||||
offset_right = -67.0
|
||||
offset_bottom = -35.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="VersionLabel" type="Label" parent="VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="ContributorButton" type="LinkButton" parent="VBoxContainer2"]
|
||||
layout_direction = 3
|
||||
layout_mode = 2
|
||||
text = "ui_contributor_tips"
|
||||
underline = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
|
||||
[node name="GodotLabel" type="Label" parent="VBoxContainer2/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Powered by"
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="LinkButton" type="LinkButton" parent="VBoxContainer2/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Godot Engine"
|
||||
underline = 1
|
||||
uri = "https://godotengine.org/"
|
150
scenes/mapContainer.tscn
Normal file
150
scenes/mapContainer.tscn
Normal file
|
@ -0,0 +1,150 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://c74180dtf7j7a"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://c35bsle7thcnh" path="res://sprites/ui/MiniMapBg.png" id="1_h88bi"]
|
||||
[ext_resource type="Script" path="res://scripts/map/miniMap/MiniMap.cs" id="2_ltp8b"]
|
||||
[ext_resource type="Texture2D" uid="uid://cfpcm0hkmpu38" path="res://sprites/ui/mark.png" id="3_x80y0"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_dkx17"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Control/MiniMap:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(983, 480)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Control/MiniMap:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_jdj6o"]
|
||||
resource_name = "hide"
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Control/MiniMap:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, 300)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Control/MiniMap:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_icaqa"]
|
||||
resource_name = "show"
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Control/MiniMap:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Control/MiniMap:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 300), Vector2(0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_d5o4b"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_dkx17"),
|
||||
"hide": SubResource("Animation_jdj6o"),
|
||||
"show": SubResource("Animation_icaqa")
|
||||
}
|
||||
|
||||
[node name="MapContainer" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="MiniMapAnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_d5o4b")
|
||||
}
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="Control" type="Control" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -163.0
|
||||
offset_top = -163.0
|
||||
offset_right = -123.0
|
||||
offset_bottom = -123.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="MiniMap" type="NinePatchRect" parent="Control"]
|
||||
layout_mode = 1
|
||||
offset_right = 150.0
|
||||
offset_bottom = 150.0
|
||||
texture = ExtResource("1_h88bi")
|
||||
patch_margin_left = 7
|
||||
patch_margin_top = 7
|
||||
patch_margin_right = 7
|
||||
patch_margin_bottom = 7
|
||||
script = ExtResource("2_ltp8b")
|
||||
|
||||
[node name="RoomPreviewContainer" type="Node2D" parent="Control/MiniMap"]
|
||||
|
||||
[node name="Mark" type="Sprite2D" parent="Control/MiniMap"]
|
||||
position = Vector2(75, 75)
|
||||
texture = ExtResource("3_x80y0")
|
285
scenes/splashScreen.tscn
Normal file
285
scenes/splashScreen.tscn
Normal file
|
@ -0,0 +1,285 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://rx7t26ldvonc"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/loader/uiLoader/SplashScreenLoader.cs" id="1_3pcuw"]
|
||||
[ext_resource type="Texture2D" uid="uid://cb3gn8xb5r4gm" path="res://sprites/icons/coldmint.png" id="1_0333i"]
|
||||
[ext_resource type="Texture2D" uid="uid://b877262di2jp5" path="res://sprites/icons/godot.png" id="2_y25sr"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bisl3"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColdMintTextureRect:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ColdMintLabel:modulate")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("GodotLabel:modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("GodotTextureRect:modulate")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("loadingStateLabel:modulate")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("NameLabel:modulate")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_j4ppv"]
|
||||
resource_name = "startup"
|
||||
length = 4.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ColdMintTextureRect:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5, 1.5, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ColdMintLabel:modulate")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5, 1.5, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("GodotLabel:modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(2.5, 3, 3.5, 4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("GodotTextureRect:modulate")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(2.5, 3, 3.5, 4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("loadingStateLabel:modulate")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(4, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("NameLabel:modulate")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(4, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mraly"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_bisl3"),
|
||||
"startup": SubResource("Animation_j4ppv")
|
||||
}
|
||||
|
||||
[node name="SplashScreen" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_3pcuw")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.129412, 0.129412, 0.129412, 1)
|
||||
|
||||
[node name="ColdMintTextureRect" type="TextureRect" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -96.0
|
||||
offset_top = -196.0
|
||||
offset_right = 96.0002
|
||||
offset_bottom = -3.99969
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_0333i")
|
||||
|
||||
[node name="GodotTextureRect" type="TextureRect" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -96.0
|
||||
offset_top = -196.0
|
||||
offset_right = 96.0
|
||||
offset_bottom = -4.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_y25sr")
|
||||
|
||||
[node name="ColdMintLabel" type="Label" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -64.5
|
||||
offset_top = 25.5
|
||||
offset_right = 64.5
|
||||
offset_bottom = 74.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
text = "ColdMint"
|
||||
|
||||
[node name="GodotLabel" type="Label" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -95.0
|
||||
offset_top = 25.5
|
||||
offset_right = 95.0
|
||||
offset_bottom = 74.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 32
|
||||
text = "Godot Engine"
|
||||
|
||||
[node name="loadingStateLabel" type="Label" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_top = 53.0
|
||||
offset_bottom = 98.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "ui_loading"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_mraly")
|
||||
}
|
||||
|
||||
[node name="NameLabel" type="Label" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 1.0
|
||||
offset_top = -141.0
|
||||
offset_right = 1.0
|
||||
offset_bottom = -94.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 34
|
||||
text = "ui_product_name"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
BIN
screenshot/0.0.1/game_page.png
Normal file
BIN
screenshot/0.0.1/game_page.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
34
screenshot/0.0.1/game_page.png.import
Normal file
34
screenshot/0.0.1/game_page.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b4r8qekdrtgbv"
|
||||
path="res://.godot/imported/game_page.png-f8f5cdcc23f5b71be114ec8661e808ce.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://screenshot/0.0.1/game_page.png"
|
||||
dest_files=["res://.godot/imported/game_page.png-f8f5cdcc23f5b71be114ec8661e808ce.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
|
BIN
screenshot/0.0.1/level_Graph_Editor.png
Normal file
BIN
screenshot/0.0.1/level_Graph_Editor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
34
screenshot/0.0.1/level_Graph_Editor.png.import
Normal file
34
screenshot/0.0.1/level_Graph_Editor.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dyiarx2q4r6y6"
|
||||
path="res://.godot/imported/level_Graph_Editor.png-2a8ba6f35e054e058aaed64bd42cfc40.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://screenshot/0.0.1/level_Graph_Editor.png"
|
||||
dest_files=["res://.godot/imported/level_Graph_Editor.png-2a8ba6f35e054e058aaed64bd42cfc40.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
|
23
scripts/AssetHolder.cs
Normal file
23
scripts/AssetHolder.cs
Normal file
|
@ -0,0 +1,23 @@
|
|||
using Godot;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
/// <summary>
|
||||
/// <para>AssetHolder</para>
|
||||
/// <para>资产持有者</para>
|
||||
/// </summary>
|
||||
public static class AssetHolder
|
||||
{
|
||||
public static Texture2D? White25;
|
||||
public static Texture2D? White100;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Loading the game's static assets</para>
|
||||
/// <para>加载游戏的静态资产</para>
|
||||
/// </summary>
|
||||
public static void LoadStaticAsset()
|
||||
{
|
||||
White25 = ResourceLoader.Load<Texture2D>("res://sprites/light/White_25.png");
|
||||
White100 = ResourceLoader.Load<Texture2D>("res://sprites/light/White_100.png");
|
||||
}
|
||||
}
|
644
scripts/Config.cs
Normal file
644
scripts/Config.cs
Normal file
|
@ -0,0 +1,644 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Godot;
|
||||
using Environment = System.Environment;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
public static class Config
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Loot table ID</para>
|
||||
/// <para>战利品表ID</para>
|
||||
/// </summary>
|
||||
public static class LootListId
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>A trophy table for testing</para>
|
||||
/// <para>测试用的战利品表</para>
|
||||
/// </summary>
|
||||
public const string Test = "test";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Difficulty</para>
|
||||
/// <para>游戏难度</para>
|
||||
/// </summary>
|
||||
public static class Difficulty
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Simple mode</para>
|
||||
/// <para>简单模式</para>
|
||||
/// </summary>
|
||||
public const int Easy = 0;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Normal mode</para>
|
||||
/// <para>正常模式</para>
|
||||
/// </summary>
|
||||
public const int Normal = 1;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Hard mode</para>
|
||||
/// <para>困难模式</para>
|
||||
/// </summary>
|
||||
public const int Hard = 2;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Camp ID</para>
|
||||
/// <para>阵营ID</para>
|
||||
/// </summary>
|
||||
public static class CampId
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Default camp</para>
|
||||
/// <para>表示默认阵营</para>
|
||||
/// </summary>
|
||||
public const string Default = "Default";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Demon camp</para>
|
||||
/// <para>魔族阵营</para>
|
||||
/// </summary>
|
||||
public const string Mazoku = "Mazoku";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Aborigines</para>
|
||||
/// <para>原住民</para>
|
||||
/// </summary>
|
||||
public const string Aborigines = "Aborigines";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Path of the App configuration file</para>
|
||||
/// <para>App配置文件路径</para>
|
||||
/// </summary>
|
||||
public const string AppConfigPath = "res://AppConfig.yaml";
|
||||
|
||||
/// <summary>
|
||||
/// <para>The percentage of speed reduced after a thrown item hits an enemy</para>
|
||||
/// <para>抛出的物品击中敌人后减少的速度百分比</para>
|
||||
/// </summary>
|
||||
public const float ThrownItemsHitEnemiesReduceSpeedByPercentage = 0.5f;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Scale of the room preview view</para>
|
||||
/// <para>房间预览图的缩放</para>
|
||||
/// </summary>
|
||||
public const float RoomPreviewScale = 3f;
|
||||
|
||||
/// <summary>
|
||||
/// <para>How much blood does a heart represent</para>
|
||||
/// <para>一颗心代表多少血量</para>
|
||||
/// </summary>
|
||||
public const int HeartRepresentsHealthValue = 4;
|
||||
|
||||
/// <summary>
|
||||
/// <para>The name of the mod manifest file</para>
|
||||
/// <para>模组清单文件的名字</para>
|
||||
/// </summary>
|
||||
public const string ModManifestFileName = "ModManifest.yaml";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Text change buffering Time How long does it take to execute the actual event after an event with a text change listener is triggered? (Anti-shake processing time), unit: milliseconds</para>
|
||||
/// <para>当添加了文本改变监听器的事件被触发后,多长时间后执行实际事件?(防抖处理时长),单位:毫秒</para>
|
||||
/// </summary>
|
||||
public const long TextChangesBuffetingDuration = 300;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Company/Creator name</para>
|
||||
/// <para>公司/创作者名字</para>
|
||||
/// </summary>
|
||||
public const string CompanyName = "ColdMint";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Module life handler name</para>
|
||||
/// <para>模组生命周期处理器名称</para>
|
||||
/// </summary>
|
||||
public const string ModLifecycleHandlerName = "ModLifecycleHandler";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Solution Name</para>
|
||||
/// <para>解决方案名称</para>
|
||||
/// </summary>
|
||||
public const string SolutionName = "ColdMint.Traveler";
|
||||
|
||||
/// <summary>
|
||||
/// <para>How many item slots are there on the shortcut bar</para>
|
||||
/// <para>快捷栏上有多少个物品槽</para>
|
||||
/// </summary>
|
||||
public const int HotBarSize = 9;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Whether version isolation is enabled</para>
|
||||
/// <para>是否启用版本隔离</para>
|
||||
/// </summary>
|
||||
public static bool EnableVersionIsolation()
|
||||
{
|
||||
//By default, we enable version isolation, but special feature identifiers can be set to disable version isolation.
|
||||
//默认情况,我们启用版本隔离,但是可以设置特殊的功能标识来禁用版本隔离。
|
||||
return !OS.HasFeature("disableVersionIsolation");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Whether to enable Mod</para>
|
||||
/// <para>是否启用Mod</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static bool EnableMod()
|
||||
{
|
||||
return OS.HasFeature("enableMod");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Default version name</para>
|
||||
/// <para>默认的版本名称</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>Used when version isolation is disabled</para>
|
||||
///<para>在禁用版本隔离时用的</para>
|
||||
/// </remarks>
|
||||
public const string DefaultVersionName = "Default";
|
||||
|
||||
/// <summary>
|
||||
/// <para>EmptyVariant</para>
|
||||
/// <para>空变量</para>
|
||||
/// </summary>
|
||||
public static readonly Variant EmptyVariant = new();
|
||||
|
||||
/// <summary>
|
||||
/// <para>Blank string</para>
|
||||
/// <para>空白字符串</para>
|
||||
/// </summary>
|
||||
public static readonly string? EmptyString = null;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>IsDebug</para>
|
||||
/// <para>是否为Debug模式</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static bool IsDebug()
|
||||
{
|
||||
return OS.HasFeature("debug");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Whether to run on the editor</para>
|
||||
/// <para>是否在编辑器上运行</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static bool IsEditor()
|
||||
{
|
||||
return OS.HasFeature("editor");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>ItemType</para>
|
||||
/// <para>物品类型</para>
|
||||
/// </summary>
|
||||
public static class ItemType
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Unknown</para>
|
||||
/// <para>未知的</para>
|
||||
/// </summary>
|
||||
public const int Unknown = 0;
|
||||
/// <summary>
|
||||
/// <para>Placeholder</para>
|
||||
/// <para>占位符</para>
|
||||
/// </summary>
|
||||
public const int Placeholder = 1;
|
||||
/// <summary>
|
||||
/// <para>Packsack</para>
|
||||
/// <para>背包</para>
|
||||
/// </summary>
|
||||
public const int Packsack = 2;
|
||||
|
||||
/// <summary>
|
||||
/// <para>ProjectileWeapon</para>
|
||||
/// <para>远程武器</para>
|
||||
/// </summary>
|
||||
public const int ProjectileWeapon = 3;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Spell</para>
|
||||
/// <para>法术</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>Type of special item used in Projectile weapons</para>
|
||||
///<para>用于远程武器内的特殊物品类型</para>
|
||||
/// </remarks>
|
||||
public const int Spell = 4;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Common item types</para>
|
||||
/// <para>普通的物品类型</para>
|
||||
/// </summary>
|
||||
public const int Item = 5;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Room Injector ID</para>
|
||||
/// <para>房间注入器ID</para>
|
||||
/// </summary>
|
||||
public static class RoomInjectionProcessorId
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Chance</para>
|
||||
/// <para>概率的</para>
|
||||
/// </summary>
|
||||
public const string Chance = "Chance";
|
||||
|
||||
/// <summary>
|
||||
/// <para>TimeInterval</para>
|
||||
/// <para>时间范围的</para>
|
||||
/// </summary>
|
||||
public const string TimeInterval = "TimeInterval";
|
||||
}
|
||||
|
||||
public class ZIndexManager
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Floating icon</para>
|
||||
/// <para>悬浮图标</para>
|
||||
/// </summary>
|
||||
public const int FloatingIcon = 1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Item data changes the event type</para>
|
||||
/// <para>物品数据改变事件类型</para>
|
||||
/// </summary>
|
||||
public enum ItemDataChangeEventType
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>add</para>
|
||||
/// <para>添加</para>
|
||||
/// </summary>
|
||||
Add,
|
||||
/// <summary>
|
||||
/// <para>Quantity Added</para>
|
||||
/// <para>物品数量增加</para>
|
||||
/// </summary>
|
||||
QuantityAdded,
|
||||
/// <summary>
|
||||
/// <para>remove</para>
|
||||
/// <para>移除</para>
|
||||
/// </summary>
|
||||
Remove,
|
||||
|
||||
/// <summary>
|
||||
/// <para>Replace</para>
|
||||
/// <para>被替换</para>
|
||||
/// </summary>
|
||||
Replace,
|
||||
/// <summary>
|
||||
/// <para>Clear</para>
|
||||
/// <para>被清空</para>
|
||||
/// </summary>
|
||||
Clear
|
||||
}
|
||||
|
||||
public enum OsEnum
|
||||
{
|
||||
//unknown
|
||||
//未知
|
||||
Unknown,
|
||||
|
||||
//Runs on Android (non-web browser)
|
||||
//在 Android 上运行(非 Web 浏览器)
|
||||
Android,
|
||||
|
||||
//Runs on Linux (non-web browser)
|
||||
//在 Linux 上运行(非 Web 浏览器)
|
||||
Linux,
|
||||
|
||||
//Runs on macOS (non-Web browser)
|
||||
//在 macOS 上运行(非 Web 浏览器)
|
||||
Macos,
|
||||
|
||||
//Runs on iOS (non-Web browser)
|
||||
//在 iOS 上运行(非 Web 浏览器)
|
||||
Ios,
|
||||
|
||||
//Runs on Windows
|
||||
//在 Windows 上运行
|
||||
Windows,
|
||||
|
||||
//The host operating system is a web browser
|
||||
//宿主操作系统是网页浏览器
|
||||
Web,
|
||||
|
||||
//Running on editor
|
||||
//在编辑器内运行
|
||||
Editor
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Get what platform is currently running on</para>
|
||||
/// <para>获取当前在什么平台上运行</para>
|
||||
/// </summary>
|
||||
/// <param name="containEditor">
|
||||
///<para>Whether to include an editor environment</para>
|
||||
///<para>是否包含编辑器环境</para>
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public static OsEnum GetOs(bool containEditor = false)
|
||||
{
|
||||
if (containEditor && OS.HasFeature("editor"))
|
||||
{
|
||||
return OsEnum.Editor;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("windows"))
|
||||
{
|
||||
return OsEnum.Windows;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("android"))
|
||||
{
|
||||
return OsEnum.Android;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("linux"))
|
||||
{
|
||||
return OsEnum.Linux;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("web"))
|
||||
{
|
||||
return OsEnum.Web;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("macos"))
|
||||
{
|
||||
return OsEnum.Macos;
|
||||
}
|
||||
|
||||
if (OS.HasFeature("ios"))
|
||||
{
|
||||
return OsEnum.Ios;
|
||||
}
|
||||
|
||||
return OsEnum.Unknown;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Get the game version</para>
|
||||
/// <para>获取游戏版本</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetVersion()
|
||||
{
|
||||
var stringBuilder = new StringBuilder();
|
||||
stringBuilder.Append(ProjectSettings.GetSetting("application/config/version").AsString());
|
||||
stringBuilder.Append(IsDebug() ? "_debug" : "_release");
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>GetGameDataDirectory</para>
|
||||
/// <para>获取游戏数据目录</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetGameDataDirectory()
|
||||
{
|
||||
if (EnableVersionIsolation())
|
||||
{
|
||||
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
||||
ProjectSettings.GetSetting("application/config/name").AsString(),
|
||||
ProjectSettings.GetSetting("application/config/version").AsString());
|
||||
}
|
||||
else
|
||||
{
|
||||
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
|
||||
ProjectSettings.GetSetting("application/config/name").AsString(),
|
||||
DefaultVersionName);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>GetDataBaseDirectory</para>
|
||||
/// <para>获取数据库文件夹</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetDataBaseDirectory()
|
||||
{
|
||||
return Path.Join(GetGameDataDirectory(), "Databases");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>GetModDataDirectory</para>
|
||||
/// <para>获取模组文件夹</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetModDataDirectory()
|
||||
{
|
||||
return Path.Join(GetGameDataDirectory(), "Mods");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Get the export directory for the level graph</para>
|
||||
/// <para>获取关卡图的导出目录</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetLevelGraphExportDirectory()
|
||||
{
|
||||
return Path.Join(GetGameDataDirectory(), "LevelGraphs");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>The initial year of creating this game</para>
|
||||
/// <para>创建此游戏的初始年份</para>
|
||||
/// </summary>
|
||||
public const int CreationYear = 2024;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Tile map, dimensions of individual tiles</para>
|
||||
/// <para>瓦片地图,单个瓦片的尺寸</para>
|
||||
/// </summary>
|
||||
public const int CellSize = 32;
|
||||
|
||||
/// <summary>
|
||||
/// <para>The maximum health of the default creature</para>
|
||||
/// <para>默认生物的最大血量</para>
|
||||
/// </summary>
|
||||
public const int DefaultMaxHp = 100;
|
||||
|
||||
/// <summary>
|
||||
/// <para>The default durability of furniture</para>
|
||||
/// <para>家具的默认耐久度</para>
|
||||
/// </summary>
|
||||
public const int DefaultMaxDurability = 50;
|
||||
|
||||
/// <summary>
|
||||
/// <para>When a creature takes damage, how long to hide the bloodline again</para>
|
||||
/// <para>生物受到伤害时,要在多长时间后再次隐藏血条</para>
|
||||
/// </summary>
|
||||
public static TimeSpan HealthBarDisplaysTime = TimeSpan.FromSeconds(2);
|
||||
|
||||
/// <summary>
|
||||
/// <para>Text size of critical hit damage</para>
|
||||
/// <para>暴击伤害的文本大小</para>
|
||||
/// </summary>
|
||||
public const int CritDamageTextSize = 33;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Crit damage multiplier</para>
|
||||
/// <para>暴击伤害乘数</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>How much damage to increase after a critical strike</para>
|
||||
///<para>造成暴击后要将伤害提升到原有的多少倍</para>
|
||||
/// </remarks>
|
||||
public const float CriticalHitMultiplier = 2f;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Text size of normal damage</para>
|
||||
/// <para>普通伤害的文本大小</para>
|
||||
/// </summary>
|
||||
public const int NormalDamageTextSize = 22;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Horizontal speed of damage numbers</para>
|
||||
/// <para>伤害数字的水平速度</para>
|
||||
/// </summary>
|
||||
public const int HorizontalSpeedOfDamageNumbers = 3;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>VerticalVelocityOfDamageNumbers</para>
|
||||
/// <para>伤害数字的垂直速度</para>
|
||||
/// </summary>
|
||||
public const int VerticalVelocityOfDamageNumbers = 5;
|
||||
|
||||
|
||||
public static class OffsetAngleMode
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Random(Default)</para>
|
||||
/// <para>随机的(默认)</para>
|
||||
/// </summary>
|
||||
public const int Random = 0;
|
||||
|
||||
/// <summary>
|
||||
/// <para>AlwaysSame</para>
|
||||
/// <para>永远不变的偏移角度</para>
|
||||
/// </summary>
|
||||
public const int AlwaysSame = 1;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Cross</para>
|
||||
/// <para>交叉变换</para>
|
||||
/// </summary>
|
||||
public const int Cross = 2;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Physical collision layer number</para>
|
||||
/// <para>物理碰撞层 序号</para>
|
||||
/// </summary>
|
||||
public static class LayerNumber
|
||||
{
|
||||
public const int RoomArea = 1;
|
||||
/// <summary>
|
||||
/// <para>Floor</para>
|
||||
/// <para>地板</para>
|
||||
/// </summary>
|
||||
public const int Floor = 2;
|
||||
public const int Player = 3;
|
||||
public const int PickAbleItem = 4;
|
||||
public const int Projectile = 5;
|
||||
/// <summary>
|
||||
/// <para>Platform</para>
|
||||
/// <para>平台</para>
|
||||
/// </summary>
|
||||
public const int Platform = 6;
|
||||
public const int Mob = 7;
|
||||
/// <summary>
|
||||
/// <para>Wall</para>
|
||||
/// <para>墙壁</para>
|
||||
/// </summary>
|
||||
public const int Wall = 8;
|
||||
/// <summary>
|
||||
/// <para>Furniture</para>
|
||||
/// <para>家具</para>
|
||||
/// </summary>
|
||||
public const int Furniture = 9;
|
||||
/// <summary>
|
||||
/// <para>WeaponDamageArea</para>
|
||||
/// <para>武器伤害区域</para>
|
||||
/// </summary>
|
||||
public const int WeaponDamageArea = 10;
|
||||
public const int Barrier = 11;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>TileMapLayerName</para>
|
||||
/// <para>瓦片节点名称</para>
|
||||
/// </summary>
|
||||
public static class TileMapLayerName
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Ground Layer</para>
|
||||
/// <para>地面层</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>There are collision nodes on which players and creatures can stand.</para>
|
||||
///<para>拥有碰撞节点,玩家和生物可以站在上面。</para>
|
||||
/// </remarks>
|
||||
public const string Ground = "Ground";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Barrier</para>
|
||||
/// <para>屏障</para>
|
||||
/// </summary>
|
||||
public const string Barrier = "Barrier";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Background decorative layer</para>
|
||||
/// <para>背景装饰层</para>
|
||||
/// </summary>
|
||||
public const string BackgroundDecoration = "BackgroundDecoration";
|
||||
|
||||
/// <summary>
|
||||
/// <para>Background wall layer</para>
|
||||
/// <para>背景墙</para>
|
||||
/// </summary>
|
||||
public const string BackgroundWall = "BackgroundWall";
|
||||
}
|
||||
|
||||
public static class RoomDataTag
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Mark the starting room</para>
|
||||
/// <para>起点房间的标记</para>
|
||||
/// </summary>
|
||||
public const string StartingRoom = "StartingRoom";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Specify the type of damage used in the game</para>
|
||||
/// <para>指定游戏内使用的伤害类型</para>
|
||||
/// </summary>
|
||||
public static class DamageType
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>physical injury</para>
|
||||
/// <para>物理伤害</para>
|
||||
/// </summary>
|
||||
public const int Physical = 1;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Magic damage</para>
|
||||
/// <para>魔法伤害</para>
|
||||
/// </summary>
|
||||
public const int Magic = 2;
|
||||
}
|
||||
}
|
35
scripts/EventBus.cs
Normal file
35
scripts/EventBus.cs
Normal file
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using ColdMint.scripts.map.events;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
/// <summary>
|
||||
/// <para>EventBus</para>
|
||||
/// <para>事件总线</para>
|
||||
/// </summary>
|
||||
public static class EventBus
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>Game Over Event</para>
|
||||
/// <para>游戏结束事件</para>
|
||||
/// </summary>
|
||||
public static Action<GameOverEvent>? GameOverEvent;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Events when the game is replayed</para>
|
||||
/// <para>游戏重玩时的事件</para>
|
||||
/// </summary>
|
||||
public static Action<GameReplayEvent>? GameReplayEvent;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Map starts generating events</para>
|
||||
/// <para>地图开始生成的事件</para>
|
||||
/// </summary>
|
||||
public static Action<MapGenerationStartEvent>? MapGenerationStartEvent;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Map generation completion event</para>
|
||||
/// <para>地图生成完成事件</para>
|
||||
/// </summary>
|
||||
public static Action<MapGenerationCompleteEvent>? MapGenerationCompleteEvent;
|
||||
}
|
58
scripts/FpsLabel.cs
Normal file
58
scripts/FpsLabel.cs
Normal file
|
@ -0,0 +1,58 @@
|
|||
using Godot;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
/// <summary>
|
||||
/// <para>FPSLabel</para>
|
||||
/// <para>FPS标签</para>
|
||||
/// </summary>
|
||||
public partial class FpsLabel : Label
|
||||
{
|
||||
private bool _enable;
|
||||
private LabelSettings? _labelSettings;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Text = null;
|
||||
//Enabled only in debug mode.
|
||||
//仅在调试模式启用。
|
||||
if (Config.IsDebug())
|
||||
{
|
||||
_labelSettings = new LabelSettings();
|
||||
LabelSettings = _labelSettings;
|
||||
_enable = true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (!_enable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var fps = Engine.GetFramesPerSecond();
|
||||
Text = "FPS:" + fps;
|
||||
if (_labelSettings != null)
|
||||
{
|
||||
//Green above 54 frames (smooth)
|
||||
//在54帧以上为绿色(流畅)
|
||||
if (fps > 54)
|
||||
{
|
||||
_labelSettings.FontColor = Colors.Green;
|
||||
}
|
||||
else if (fps > 48)
|
||||
{
|
||||
//Yellow between 48 and 54 frames (Karting)
|
||||
//在48到54帧之间为黄色(卡顿)
|
||||
_labelSettings.FontColor = Colors.Yellow;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Red below 48 frames (lag)
|
||||
//在48帧以下为红色(卡)
|
||||
_labelSettings.FontColor = Colors.Red;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
165
scripts/GameSceneDepend.cs
Normal file
165
scripts/GameSceneDepend.cs
Normal file
|
@ -0,0 +1,165 @@
|
|||
using ColdMint.scripts.character;
|
||||
using ColdMint.scripts.inventory;
|
||||
using ColdMint.scripts.map.miniMap;
|
||||
using ColdMint.scripts.utils;
|
||||
using Godot;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Dependencies on the runtime of the game scene</para>
|
||||
/// <para>游戏场景运行时的依赖</para>
|
||||
/// </summary>
|
||||
public static class GameSceneDepend
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>MiniMap</para>
|
||||
/// <para>迷你地图</para>
|
||||
/// </summary>
|
||||
public static MiniMap? MiniMap { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>MiniMapAnimationPlayer</para>
|
||||
/// <para>迷你地图的动画节点</para>
|
||||
/// </summary>
|
||||
public static AnimationPlayer? MiniMapAnimationPlayer { get; set; }
|
||||
|
||||
private static Player? _player;
|
||||
|
||||
/// <summary>
|
||||
/// <para>Player instances within the game scene</para>
|
||||
/// <para>游戏场景内的玩家实例</para>
|
||||
/// </summary>
|
||||
public static Player? Player
|
||||
{
|
||||
get => _player;
|
||||
set
|
||||
{
|
||||
_player = value;
|
||||
if (MiniMap != null)
|
||||
{
|
||||
MiniMap.OwnerNode = _player;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>When the mouse enters the scope of a character, it is considered a target</para>
|
||||
/// <para>鼠标进入到某个角色的范围内时,会将其视作目标</para>
|
||||
/// </summary>
|
||||
public static Node2D? TemporaryTargetNode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>ProjectileContainer</para>
|
||||
/// <para>抛射体容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? ProjectileContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>SpellContainer</para>
|
||||
/// <para>法术容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? SpellContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>WeaponContainer</para>
|
||||
/// <para>武器容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? WeaponContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>PacksackContainer</para>
|
||||
/// <para>背包容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? PacksackContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>PlayerContainer</para>
|
||||
/// <para>玩家容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? PlayerContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>PickAbleContainer</para>
|
||||
/// <para>可拾捡物容器</para>
|
||||
/// </summary>
|
||||
public static Node2D? PickAbleContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>AICharacterContainer</para>
|
||||
/// <para>AICharacter角色</para>
|
||||
/// </summary>
|
||||
public static Node2D? AiCharacterContainer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>HotBar</para>
|
||||
/// <para>快捷栏</para>
|
||||
/// </summary>
|
||||
public static HotBar? HotBar { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Health Bar UI</para>
|
||||
/// <para>健康条UI</para>
|
||||
/// </summary>
|
||||
public static HealthBarUi? HealthBarUi { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// <para>DynamicUiGroup</para>
|
||||
/// <para>动态生成的Ui组</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>Dynamically generated Ui objects will be placed under this node</para>
|
||||
///<para>动态生成的Ui对象将放置在此节点下</para>
|
||||
/// </remarks>
|
||||
public static UiGroup? DynamicUiGroup { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Whether the player's mouse is hovering over GUI furniture</para>
|
||||
/// <para>玩家的鼠标是否悬浮在GUI家具上</para>
|
||||
/// </summary>
|
||||
public static bool IsMouseOverFurnitureGui;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>Whether the mouse is suspended over the item slot</para>
|
||||
/// <para>鼠标是否悬浮在物品槽上</para>
|
||||
/// </summary>
|
||||
public static bool IsMouseOverItemSlotNode;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>ShowMiniMap</para>
|
||||
/// <para>显示迷你地图</para>
|
||||
/// </summary>
|
||||
public static void ShowMiniMap()
|
||||
{
|
||||
if (MiniMap == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (MiniMap.Visible)
|
||||
{
|
||||
return;
|
||||
}
|
||||
MiniMapAnimationPlayer?.Play(name: "show");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>HideMiniMap</para>
|
||||
/// <para>隐藏迷你地图</para>
|
||||
/// </summary>
|
||||
public static void HideMiniMap()
|
||||
{
|
||||
if (MiniMap == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (MiniMap.Visible)
|
||||
{
|
||||
MiniMapAnimationPlayer?.Play(name: "hide");
|
||||
}
|
||||
}
|
||||
}
|
162
scripts/HealthBarUi.cs
Normal file
162
scripts/HealthBarUi.cs
Normal file
|
@ -0,0 +1,162 @@
|
|||
using ColdMint.scripts.utils;
|
||||
using Godot;
|
||||
|
||||
namespace ColdMint.scripts;
|
||||
|
||||
/// <summary>
|
||||
/// <para>HealthBarUi</para>
|
||||
/// <para>健康条UI</para>
|
||||
/// </summary>
|
||||
public partial class HealthBarUi : HBoxContainer
|
||||
{
|
||||
private int _maxHp;
|
||||
private int _currentHp;
|
||||
private Texture2D? _heartFull;
|
||||
private Texture2D? _heartEmpty;
|
||||
private Texture2D? _heartHalf;
|
||||
private Texture2D? _heartQuarter;
|
||||
private Texture2D? _heartThreeFourths;
|
||||
|
||||
public int CurrentHp
|
||||
{
|
||||
get => _currentHp;
|
||||
set
|
||||
{
|
||||
if (value == _currentHp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_currentHp > _maxHp)
|
||||
{
|
||||
//Prohibit the current health to exceed the maximum health. When the maximum health is exceeded, the UI cannot be drawn.
|
||||
//禁止当前血量超过最大血量,当超过最大值时,无法绘制UI。
|
||||
return;
|
||||
}
|
||||
|
||||
var heartCount = GetChildCount();
|
||||
//A few hearts are full
|
||||
//有几颗心是满的
|
||||
var fullHeartCount = value / Config.HeartRepresentsHealthValue;
|
||||
for (int i = 0; i < fullHeartCount; i++)
|
||||
{
|
||||
//Brush up the Ui
|
||||
//把Ui刷满
|
||||
var textureRect = GetChild<TextureRect>(i);
|
||||
textureRect.Texture = _heartFull;
|
||||
}
|
||||
|
||||
//How many hollows
|
||||
//有多少空心
|
||||
var emptyHeartCount = heartCount - fullHeartCount;
|
||||
if (emptyHeartCount > 0)
|
||||
{
|
||||
//How much blood is left on the last one
|
||||
//最后那颗剩余多少血
|
||||
var leftOverTextureRect = GetChild<TextureRect>(fullHeartCount);
|
||||
var leftOver = value % Config.HeartRepresentsHealthValue;
|
||||
if (leftOver > 0)
|
||||
{
|
||||
//Percentage of total
|
||||
//占总数的百分比
|
||||
var percent = leftOver / (float)Config.HeartRepresentsHealthValue;
|
||||
leftOverTextureRect.Texture = GetTexture2DByPercent(percent);
|
||||
emptyHeartCount--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int i = heartCount - emptyHeartCount; i < heartCount; i++)
|
||||
{
|
||||
var textureRect = GetChild<TextureRect>(i);
|
||||
textureRect.Texture = _heartEmpty;
|
||||
}
|
||||
|
||||
_currentHp = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxHp
|
||||
{
|
||||
get => _maxHp;
|
||||
set
|
||||
{
|
||||
if (value == _maxHp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var heartCount = value / Config.HeartRepresentsHealthValue;
|
||||
for (var i = 0; i < heartCount; i++)
|
||||
{
|
||||
var heart = CreateTextureRect();
|
||||
heart.Texture = _heartFull;
|
||||
AddChild(heart);
|
||||
}
|
||||
|
||||
//How much blood is left on the last one
|
||||
//最后那颗剩余多少血
|
||||
var leftOver = value % Config.HeartRepresentsHealthValue;
|
||||
if (leftOver > 0)
|
||||
{
|
||||
var lastHeart = CreateTextureRect();
|
||||
//Percentage of total
|
||||
//占总数的百分比
|
||||
var percent = leftOver / (float)Config.HeartRepresentsHealthValue;
|
||||
lastHeart.Texture = GetTexture2DByPercent(percent);
|
||||
AddChild(lastHeart);
|
||||
}
|
||||
|
||||
_maxHp = value;
|
||||
}
|
||||
}
|
||||
|
||||
private TextureRect CreateTextureRect()
|
||||
{
|
||||
var textureRect = new TextureRect();
|
||||
return textureRect;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Get the texture based on percentage</para>
|
||||
/// <para>根据百分比获取纹理</para>
|
||||
/// </summary>
|
||||
/// <param name="percent"></param>
|
||||
/// <returns></returns>
|
||||
private Texture2D? GetTexture2DByPercent(float percent)
|
||||
{
|
||||
if (percent == 0)
|
||||
{
|
||||
return _heartEmpty;
|
||||
}
|
||||
|
||||
if (percent <= 0.25f)
|
||||
{
|
||||
return _heartQuarter;
|
||||
}
|
||||
else if (percent <= 0.5f)
|
||||
{
|
||||
return _heartHalf;
|
||||
}
|
||||
else if (percent <= 0.75f)
|
||||
{
|
||||
return _heartThreeFourths;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _heartFull;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
NodeUtils.DeleteAllChild(this);
|
||||
_heartEmpty = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartEmpty.png");
|
||||
_heartQuarter = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartQuarter.png");
|
||||
_heartHalf = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartHalf.png");
|
||||
_heartThreeFourths = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartThreeFourths.png");
|
||||
_heartFull = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartFull.png");
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user