Skip to content

Commit

Permalink
Merge branch 'release/1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
npruehs committed May 31, 2020
2 parents 24620c1 + 390c437 commit 761bceb
Show file tree
Hide file tree
Showing 401 changed files with 16,502 additions and 1 deletion.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,12 @@ Intermediate/*

# Cache files for the editor to use
DerivedDataCache/*
Source/RTSProject/Binaries/
Source/RTSProject/Intermediate/
Source/RTSProject/Plugins/RealTimeStrategy/Binaries/
Source/RTSProject/Plugins/RealTimeStrategy/Intermediate/
Source/RTSProject/Saved/
Source/RTSProject/Plugins/RealTimeStrategyTests/Binaries/
Source/RTSProject/Plugins/RealTimeStrategyTests/Intermediate/
Source/RTSProject/Plugins/DaedalicTestAutomationPlugin/Binaries/
Source/RTSProject/Plugins/DaedalicTestAutomationPlugin/Intermediate/
92 changes: 92 additions & 0 deletions Assets/Fonts/LICENSE_OFL.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
This Font Software is licensed under the SIL Open Font License,
Version 1.1.

This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL

-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file added Assets/Fonts/NotoSansDisplay-Bold.ttf
Binary file not shown.
Binary file added Assets/Fonts/NotoSansDisplay-Regular.ttf
Binary file not shown.
11 changes: 11 additions & 0 deletions Assets/Fonts/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
This package is part of the noto project. Visit
google.com/get/noto for more information.

Built on 2017-10-24 from the following noto repository:
-----
Repo: noto-fonts
Tag: v2017-10-24-phase3-second-cleanup
Date: 2017-10-24 12:10:34 GMT
Commit: 8ef14e6c606a7a0ef3943b9ca01fd49445620d79

Remove some files that aren't for release.
Binary file added Assets/Meshes/SM_CMV.blend
Binary file not shown.
Binary file added Assets/Meshes/SM_CMV.fbx
Binary file not shown.
Binary file added Assets/Meshes/SM_OreAsteroid.blend
Binary file not shown.
Binary file added Assets/Meshes/SM_OreAsteroid.fbx
Binary file not shown.
Binary file added Assets/Meshes/SM_Starbase.blend
Binary file not shown.
Binary file added Assets/Meshes/SM_Starbase.fbx
Binary file not shown.
Binary file added Assets/Textures/T_Space.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/Textures/T_Space.xcf
Binary file not shown.
Binary file added Assets/UI/T_CMV_Portrait.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/UI/T_OreAsteroid_Portrait.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/UI/T_Starbase_Portrait.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Contributing

You'd like to help make this plugin even more awesome? Seems like today's our lucky day! In order to maintain stability of the tool and its code base, please adhere to the following steps, and we'll be pleased to include your additions in our next release.

Note that this plugin is distributed under the [MIT License](https://github.com/npruehs/ue4-rts/blob/develop/LICENSE). So will be your code.

## How to contribute

### Step 1: Choose what to do

If you've got no idea how to help, head over to our [issue tracker](https://github.com/npruehs/ue4-rts/issues) and see what you'd like to do most. You can basically pick anything you want to, as long as it's not already assigned to anyone.

If you know exactly what you're missing, [open a new issue](https://github.com/npruehs/ue4-rts/issues/new) to begin a short discussion about your idea and how it fits the project. If we all agree, you're good to go!

### Step 2: Fork the project and check out the code

Real-Time Strategy Plugin for Unreal Engine 4 is developed using the [GitFlow branching model](http://nvie.com/posts/a-successful-git-branching-model/). In order to contribute, you should check out the latest `develop` branch, and create a new feature or hotfix branch to be merged back.

### Step 3: Implement your feature or bugfix

Clearly, everybody's got their own approach here. However, we'd still like you to keep a few things in mind, to ensure the stability and consistency of the plugin for everyone:

* We're using the official [Coding Standard](https://docs.unrealengine.com/latest/INT/Programming/Development/CodingStandard/index.html) provided by Epic Games.
* When you're adding support for a newer engine version, make sure that you don't break support for previously supported engine versions. We must not force our users to upgrade their engine just because of updating the plugin.

### Step 4: Open a pull request

Finally, [open a pull request](https://help.github.com/articles/creating-a-pull-request/) so we can review your changes together, and finally integrate it into the next release.


## Release Checklist

Internally, we're using the following checklist when preparing for a new release:

* Check pending pull requests
* Create release branch
* Add examples for new features where appropriate
* Run all automated tests
* Update documentation (README, images, spelling, table of contents)
* Increase version number (and engine version, if necessary)
* Create plugin package
* Check plugin package in another project
* Merge release branch with tag
* Add a new GitHub release with release notes
* Update GitHub issues and milestones
* Notify community (e.g. forums)
12 changes: 12 additions & 0 deletions Documents/Manual/AIPlayers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## AI Players

The plugin provides basic support for AI players as well. Currently, this doesn't go beyond fulfilling basic build orders, so you'll probably want to extend that, e.g. by determining when to attack other players, and where. At least, this should get you started:

1. Create an AI controller deriving from `RTSPlayerAIController`.
1. Set the _Player Behavior Tree Asset_ of your new player AI controller to `BT_RTSPlayerBehaviorTree` (or create your own one).
1. Set the _Player Blackboard Asset_ of your new player AI controller to `BB_RTSPlayerBlackboard` (or create your own one).
1. Set up the _Build Order_ of your new player AI controller. The AI will produce the specified actors in order, automatically skipping actors that are already available and replacing those that have been destroyed.
1. Set up the _Primary Resource Type_ of your new player AI controller. The AI will try and prevent blocking paths between its main building and resource sources of that type.
1. Add your resource types to the `PlayerResourcesComponent` of your player AI controller.
1. Use your player AI controller in your game mode.
1. At your game mode, set _Num AI Players_ to the number of AI players you want to spawn.
33 changes: 33 additions & 0 deletions Documents/Manual/Buildings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Creating Buildings

From the perspective of the plugin, buildings are just units with a few additional components. There's no special class for buildings; their setup has just been moved to this manual section because that many people would explicitly look for that. In fact, you can mix and match the setup outlined in this section with all of the other sections. This allows you to create truly deep gameplay, such as units that serve as resource sources, or produce other units.


### Construction

1. See [Creating Units](Units.md) (Appearance, Health & Damage, Projectiles).
1. Add an `RTSConstructionSiteComponent` and set the _Construction Time_.
1. Set the _Construction Costs_ to any resources required for construction.
1. Set the _Construction Cost Type_ to to _Pay Immediately_ if all costs should be paid in full when starting construction, or to _Pay Over Time_ for continuously paying costs (similar to Command & Conquer).
1. Set the _Refund Factor_ to the factor to multiply refunded resources with after cancelation.
1. Set the _Consumes Builders_ flag if builders working at the construction site should be destroyed when finished (similar to Zerg in StarCraft).
1. Set _Max Assigned Builders_ if you want to require a builder to work at the construction site to make progress, and/or to allow multi-building (similar to Age of Empires).
1. Set the _Progress Made Automatically_ and _Progress Made Per Builder_ factors.
1. Set the _Start Immediately_ flag unless you want to trigger construction start from script.
1. Add an `RTSContainerComponent` if you want builders to enter the building site while building. Its capacity value will be automatically set at runtime to reflect _Max Assigned Builders_ of the construction site.
1. Add your `RTSConstructionProgressBarWidgetComponent` (see [User Interface](UserInterface.md)).

### Production

1. Add an `RTSProductionComponent` to any actors you want to be able to produce units or research technology.
1. Add everything you want to produce or research to the _Available Products_ for these factories.
1. Set the _Queue Count_, specifying how many products can be produced in parallel.
1. Set the _Capacity Per Queue_, specifying how many products can be produced one after another.
1. Add your `RTSProductionProgressBarWidgetComponent` (see [User Interface](UserInterface.md)).

_Note that, technically, producing units does not differ from researching technology. You can create actor blueprints without physical representation for each technology to research, and add them as products. Then, you can check whether any player owns an actor of that technology for checking a tech tree._

### Resource Drain

1. Add an `RTSResourceDrainComponent` for each type of building gatherers may return resources to.
1. Set the resource types to all resources accepted by the drain.
18 changes: 18 additions & 0 deletions Documents/Manual/Cheats.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Cheats

The plugin comes with a small set of built-in cheats you can use. Feel free to create your own cheat manager and add additional cheats.


1. Create a cheat manager deriving from `RTSCheatManager`.
1. Set the _Resource Types_ of your cheat manager.
1. At your `RTSPlayerController`, set the _Cheat Manager_ to your cheat manager.
1. At _Edit > Project Settings > Engine > Input_, set and remember your _Console Keys_.

This will unlock the following built-in cheats to use in your console:

| Cheat | Description |
| --- | --- |
| Boost | Increases construction and production speed. |
| God | Invulnerability cheat. |
| Money | Adds resources. |
| Victory | Defeat all other players. |
20 changes: 20 additions & 0 deletions Documents/Manual/GameModes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Game Modes

Clearly, even for real-time strategy games, you may want to define multiple game modes (such as classic Skirmish or story-based campaigns). Thus, we won't restrict you too much here, but just want to provide a few basic things that you might find useful.


### Initialization

1. Set the _Initial Actors_ and their locations for your game mode. This will spawn initial units for each player at their player start as soon as the game starts.


### Teams

1. Set _Num Teams_ to the number of teams your game mode supports.


### Game Over

1. Optionally, set the _Defeat Condition Actor Classes_ for your `RTSGameMode`. This will check whether any actors of the specified types exist for a player whenever he or she loses a unit. If no actor of the specified type remains, the player is defeated.

_In that case, the game mode will raise the OnPlayerDefeated event to be overridden in subclasses (either blueprint or C++). Note that it is up to you to define how defeated players should be handled, and if/when the game is over, e.g. whether you've making a 1v1, FFA or team game._
Binary file added Documents/Manual/Images/AddResources.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/HUDHideSelectionFrame.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/HealthBarWidget.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/HoveredActorWidget.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/IssueAttackOrder.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/IssueGatherOrder.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/IssueMoveOrder.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/IssueStopOrder.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/LoadActor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/OnHealthChanged.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/OnKilled.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/OnOrderChanged.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/OnProductionFinished.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/OnResourcesChanged.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/SelectionFrameWidget.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documents/Manual/Images/TransferOwnership.png
Binary file added Documents/Manual/Images/UIHideSelectionFrame.png
Binary file added Documents/Manual/Images/UIShowSelectionFrame.png
Binary file added Documents/Manual/Images/UnloadActor.png
Binary file added Documents/Manual/Images/UpdateHealthBarValue.png
14 changes: 14 additions & 0 deletions Documents/Manual/Manual.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Manual

## Contents

1. [Setup](Setup.md)
1. [Game Modes](GameModes.md)
1. [Maps](Maps.md)
1. [Units](Units.md)
1. [Buildings](Buildings.md)
1. [Resources](Resources.md)
1. [User Interface](UserInterface.md)
1. [AI Players](AIPlayers.md)
1. [Scripting](Scripting.md)
1. [Cheats](Cheats.md)
46 changes: 46 additions & 0 deletions Documents/Manual/Maps.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
## Creating Maps

For the plugin, you'll design and create your maps the same way you're used to when using Unreal Engine, for the most part. This section serves as a short checklist for you, and highlights some setup that is supposed to make it easier for you to get started. Some steps are mandatory for some features of the plugin to work, however, such as vision.


### Game Mode & Geometry

1. Use your game mode in the world settings.
1. Create your level geometry and lighting as usual.

### Camera

1. Add an `RTSCameraBoundsVolume` to the map.
1. Use the _Brush Settings_ to adjust the camera bounds as desired.

### Navigation

1. Add a `NavMeshBoundsVolume` to the map.
1. Use the _Brush Settings_ to adjust have the nav mesh bounds encompass your whole level.
1. Build navigation. You may press P to review your results in the viewport.

### Player Starts

1. Add `RTSPlayerStart`s to the map.
1. Set the _Team Index_ for each player start.

### Minimap

1. Add an `RTSMinimapVolume` to the very center of your map.
1. Set its brush size to match the extents of your playable map.
1. Set the _Minimap Image_ to a nice top-down screenshot of your map.

### Fog Of War

1. Add an `RTSVisionVolume` to the very center of your map, encompassing the whole valid visible map area.
1. Set the _Size In Tiles_ of the vision volume to match your minimap background images (e.g. 256).
1. Add a `PostProcessVolume` to your map, and check _Infinite Extent (Unbound)_.
1. Add an `RTSFogOfWarActor` to your map.
1. Set the _Fog Of War Volume_ reference to the post process volume created before.
1. Set the _Fog Of War Material_ of the actor (e.g. to the `M_RTSFogOfWar` material shipped with the plugin).

### Pre-Placed Units

1. Add any actors that should initially on the battlefield.
1. For each of these actors, at the `RTSOwnerComponent`, set the _Initial Owner Player Index_ to specify which player should own them.
1. When pre-placing buildings, at the `RTSConstructionSiteComponent`, set their _State_ to _Finished_ if they should be ready from the beginning.
9 changes: 9 additions & 0 deletions Documents/Manual/Resources.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Creating Resource Sources

In case you missed that step earlier, make your to set up your resource types as explained in [Setup](Setup.md). Then, create resource sources as follows:

1. See [Creating Units](Units.md) (Appearance only; can be a standard actor).
1. Add an `RTSResourceSourceComponent`.
1. Set the resource type and maximum and current resources of the source.
1. Set the gathering factor for increasing the yield of any gatherers (e.g. golden minerals in StarCraft).
1. If you want gatherers to enter the resource source (e.g. Refinery in StarCraft), check _Gatherer Must Enter_, set the _Gatherer Capacity_, and add an `RTSContainerComponent`.
Loading

0 comments on commit 761bceb

Please sign in to comment.