Coder Social home page Coder Social logo

reinisch / warcraft-arena-unity Goto Github PK

View Code? Open in Web Editor NEW
411.0 31.0 117.0 188.24 MB

World of Warcraft client-server combat system implementation in Unity with Photon Bolt.

License: The Unlicense

C# 95.19% ShaderLab 4.06% HLSL 0.52% PowerShell 0.04% JavaScript 0.19%
unity world-of-warcraft wow photon multiplayer arena

warcraft-arena-unity's Introduction

Warcraft Arena

World of Warcraft combat system implementation in Unity with Photon Bolt.

Feel free to ask anything about this project in Discord.

Install

Setup:

Open project in Unity Editor with version specified in ProjectSettings/ProjectVersion.
Enter playmode from Launcher scene in Assets/Scenes/Launcher.

Build:

Launcher scene should be always included first, followed by other locations, currently only Lordaeron.
Dedicated server may also be built using Launcher Dedicated scene.

Play:

To create a server, select any map then press Start Server button.
To connect to existing server press Start Client then wait for sessions to appear and press Connect.
Client is started by default, if connection fails then reason should be displayed at the bottom of lobby panel.

Project status

Done:

  • Server instances and client connections with Photon Bolt
  • World of Warcraft player controller and camera
  • Arena location setup, Lordaeron map
  • Unit frames, action bars, custom hotkeys, lobby UI
  • Floating text, unit selection circle-projectors
  • Basic localization and spell error notifications
  • Spell, ui and character sounds
  • Visual effects for spell casts, projectiles and auras
  • Spells, spell effects, auras and aura effects

Next:

  • More spells, effects and auras
  • New spell and aura mechanics
  • Arena or battleground logic

Guides

Screenshot

Alt text

Implemented spell effects:

Direct teleport Damage Heal Dispel Mechanics
Apply aura Kill Resurrect Area Effects

Implemented aura effects:

Absorb Damage Critical damage Haste Root
Display Model Periodic healing Confuse Speed
Slow suppression Periodic damage Pacify Silence
Ignore Aura State Damage Reduction Stat Mod Immunity
Spell Modifier Spell Trigger Stun Freeze

Included spells:

Ice Block Renew Ice Lance Holy Word: Serenity
Ice Nova Resurrect Polymorph Pain Suppression
Scorch Periodic damage Pacify Silence
Icy Veins Presence of Mind Pyroblast PvP Trinket
Flash Heal Deep Freeze Flame Strike Cone of Cold
Counterspell Ice Barrier Frost Nova Arcane Intellect
Living Bomb Frost Bolt Blazing Speed Blink
Fire Blast Hot Streak Shatter Fingers of Frost

Controls:

Hotkeys: Central Bottom Action Bar - No Modifiers, Central Top Action Bar - Left Shift, action buttons:

S-1 S-2 S-3 S-4 S-5 S-Q S-E S-R S-F S-Z S-X S-C S-V S-G
1 2 3 4 5 Q E R F Z X C V G

Character:

  • Jump : Space
  • Move : WASD or Left + Right Click
  • Target : Tab or Left Click
  • Rotate Camera : Left Click + Drag
  • Rotate Character : Right Click + Drag
  • Select Self : F1
  • Chat : Enter
  • Toggle Healthbars : Ctrl-V
  • Cancel Cast : Esc
  • Deselect Target : Esc

Links

  • Photon Bolt - networking solution used for server-client communication and game state synchronization.

License

All character models, textures and sound are copyrighted by ©2004 Blizzard Entertainment, Inc. All rights reserved. World of Warcraft, Warcraft and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.

warcraft-arena-unity's People

Contributors

lbalotta avatar luigiellebalotta avatar oyvind-stromsvik avatar reinisch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

warcraft-arena-unity's Issues

[Networking] Offline scenes

There can be a cool difference between scenes:

  • Online Scenes (using bolt)
  • Offline Scenes

Making 2 scenes (online & offline) instead of 1 means that there can be difference stories/status in the same map (example: Lordaeron).
Making 1 scene and play there with online/offline feature means that I can play with other players, make some things in the story and if i stop and play offline i can start from where i stopped

There should be a decision about this feature

[Core] Stealth Mechanics and Scoping

  • Detection and Subtlety
  • Invisible entity scoping
  • Area of Interest scoping
  • Dedicated server and remote client invisibility
  • Combined server-client invisibility handling
  • Unit model transparency
  • Unit fade out/in on scoping out/in
  • Implement combat timer and restrict usage in combat

[Client, UI] Simple minimap

Don't have any idea on how to implement movable buttons in the minimap, by the way, since i'm still waking up (9 AM here) I remember i saw a video similar to THIS that teaches how to implement a mini-map.
The right video is not the one that i liked, by the way i remember it was similar procedure..

Implement spell power resources

  • Regeneration for resources
  • Shapeshifting support: swap, retain on shapeshift
  • Configure all spells to use resources
  • Mana
  • Energy

Creating a custom map

Hey, first of all thank you so much for keeping this project going and working on it so much.
I was just going through the Unity project and tired to put custom maps in there. However, the character doesn't walk on any surface besides the arena. It doesn't fall through and you can blink over the surface but walking is impossible. Is it the Mesh, that makes the difference? And how can I avoid this problem?
Thank you in advance!

[Core] Implement feral druid mechanics and spells

  • Mechanics: Shapeshifting spell modifications and restrictions
  • Mechanics: Primary spender display swap
  • Spell : Swipe
  • Spell : Primal Wrath
  • Spell Passive : Predatory Swiftness
  • Spell : Berserk
  • Spell : Regrowth
  • Spell : Rejuvenation
  • Spell : Savage Roar
  • Spell : Skull Bash
  • Spell : Maim
  • Spell : Mangle
  • Spell : Shred
  • Spell Passive : Infected Wounds
  • Spell : Tiger's Fury
  • Spell : Cyclone
  • Spell : Stampeding Roar
  • Spell : Rake
  • Spell : Survival Instincts
  • Spell : Rip
  • Spell : Prowl
  • Spell : Thrash
  • Spell : Dash
  • Spell : Entangling Roots
  • Spell : Ferocious Bite

[Core] Movement Mechanics

  • Motion Controller
  • Multiple Movement slots for active, idle and controlled movement
  • Relocate Movement Info to motion controller
  • Charging movement
  • Pounce movement
  • Confused movement
  • Navmesh movement
  • Controlled state sync for clients

[UI/Mobile] Idea of mobile version

I don't know unity very well, but I've an idea to play on mobile.
We should check if we are compiling for desktop or Android/iOS.
We already have everything for desktop.
On mobile we should draw the GUI in a different way.

The camera can be rotated using the finger's swipe.
There should be a virtual joystick on the left to move the player (we can have the same camera script).
Some spell on the right side of the screen. We can re-use already implemented spell with an addiction:
Spell should have an Enum that is structed as:

  • Mobile Only
  • Desktop Only
  • Both

This enum tells the server how many spell i can use (and show) on mobile and/or desktop mode.

The target:
We can choose to auto-aim the target as lots of warcraft-like games, we can draw a pointer in the center of the screen and enable spell casting when we have a target in the pointer (so we aim the target, start spell casting and if the target is moving the camera will follow the target).
OR we can use warcraft similar system, so we have to touch the target then we can cast.

For mobile i think chat should be removed ( CoD mobile uses vocal chat, but i think it's not needed ).

For player/target health/mana GUI object there are 2 ways:
draw a simple bar over our head or resize the existing GUI using some responsive techniques

I hope this is an interesting idea :)

Creating discord channel for contribution

I Suggest to create a discord channel for contributions, to create a community..
Also could be a good idea to implement a discord chat bot connected with the game :P

[PROBLEM] the game doesn't start.

I'm getting this error

UnassignedReferenceException: The variable meshRenderer of UnitModel has not been assigned.
You probably need to assign the meshRenderer variable of the UnitModel script in the inspector.
UnityEngine.Renderer.get_sharedMaterials () (at /home/builduser/buildslave/unity/build/Runtime/Export/Graphics/GraphicsRenderers.bindings.cs:145)
Client.UnitModel.CreateTransparentMaterials () (at Assets/Scripts/Client/Rendering/Unit Renderer/Unit Model/UnitModel.cs:186)
Client.UnitModel.ToggleTransparentMode (System.Boolean apply, System.Single currentAlpha, System.Single targetAlpha) (at Assets/Scripts/Client/Rendering/Unit Renderer/Unit Model/UnitModel.cs:146)
Client.UnitModel.Initialize (Client.UnitModelInitializer initializer) (at Assets/Scripts/Client/Rendering/Unit Renderer/Unit Model/UnitModel.cs:58)
Client.UnitRenderer.ReplaceModel (System.Int32 modelId, Client.UnitModelReplacementMode mode) (at Assets/Scripts/Client/Rendering/Unit Renderer/UnitRenderer.cs:139)
Client.UnitRenderer.Attach (Core.Unit unit) (at Assets/Scripts/Client/Rendering/Unit Renderer/UnitRenderer.cs:29)
Client.RenderingReference+UnitRendererController.AttachRenderer (Core.Unit unit) (at Assets/Scripts/Client/Rendering/Unit Renderer/UnitRendererController.cs:121)
Client.RenderingReference+UnitRendererController.OnServerVisibilityChanged (Core.WorldEntity worldEntity, System.Boolean visible) (at Assets/Scripts/Client/Rendering/Unit Renderer/UnitRendererController.cs:167)
Common.EventHandler.ExecuteEvent[T1,T2] (System.Object target, Common.GameEvents gameGameEvent, T1 arg1, T2 arg2) (at Assets/Scripts/Common/Common/EventHandler.cs:223)
Core.Player+VisibilityController.SetScopeOf (Core.WorldEntity target, System.Boolean inScope) (at Assets/Scripts/Core/Entity/Player/Controllers/Player.VisibilityController.cs:47)
Core.Player+VisibilityController.UpdateVisibilityOf (Core.WorldEntity target) (at Assets/Scripts/Core/Entity/Player/Controllers/Player.VisibilityController.cs:77)
Core.MapGrid+PlayerVisibilityNotifier.HandleUnitVisibility (Core.Unit target) (at Assets/Scripts/Core/World/Grid/MapGrid.PlayerVisibilityNotifier.cs:39)
Core.MapGrid+PlayerVisibilityNotifier.Core.IUnitVisitor.Visit (Core.Player player) (at Assets/Scripts/Core/World/Grid/MapGrid.PlayerVisibilityNotifier.cs:45)
Core.Player.Accept (Core.IUnitVisitor visitor) (at Assets/Scripts/Core/Entity/Player/Player.cs:144)
Core.MapGrid+Cell.Visit (Core.IUnitVisitor unitVisitor) (at Assets/Scripts/Core/World/Grid/MapGrid.Cell.cs:80)
Core.MapGrid.VisitInRadius (Core.WorldEntity referer, System.Single radius, Core.IUnitVisitor unitVisitor) (at Assets/Scripts/Core/World/Grid/MapGrid.Base.cs:158)
Core.MapGrid.UpdateVisibility (Core.Player player, System.Boolean forceUpdateOthers) (at Assets/Scripts/Core/World/Grid/MapGrid.Base.cs:129)
Core.MapGrid+CellRelocator.Core.IUnitVisitor.Visit (Core.Player player) (at Assets/Scripts/Core/World/Grid/MapGrid.CellRelocator.cs:46)
Core.Player.Accept (Core.IUnitVisitor visitor) (at Assets/Scripts/Core/Entity/Player/Player.cs:144)
Core.MapGrid+Cell.Visit (Core.IUnitVisitor unitVisitor) (at Assets/Scripts/Core/World/Grid/MapGrid.Cell.cs:80)
Core.MapGrid.DoUpdate (System.Int32 deltaTime) (at Assets/Scripts/Core/World/Grid/MapGrid.Base.cs:75)
Core.Map.DoUpdate (System.Int32 deltaTime) (at Assets/Scripts/Core/Map/Map.cs:51)
Core.MapManager.DoUpdate (System.Int32 timeDiff) (at Assets/Scripts/Core/Map/MapManager.cs:45)
Core.World.DoUpdate (System.Int32 deltaTime) (at Assets/Scripts/Core/World/World.cs:40)
Server.WorldServer.DoUpdate (System.Int32 deltaTime) (at Assets/Scripts/Server/Multiplayer/WorldServer.cs:45)
Game.GameManager.Update () (at Assets/Scripts/Workflow/GameManager.cs:56)

when i start single or create server, am i missing something here ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.