Island Defense
March 21, 2019, 05:43:51 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: not so new version:  3.0.6G4, 3.0.8d
 
   Home   Help Login Register  
Pages: [1]
  Print  
Author Topic: What's up guys! Long time no see  (Read 4664 times)
0 Members and 1 Guest are viewing this topic.
Onahail
Spearloc
***

Karma: +7/-10
Posts: 184



« on: August 13, 2014, 09:55:08 PM »

Update:  Harvesting system - https://www.youtube.com/watch?v=iisWQXNKMr0&feature=youtu.be

Soooo yeah. I realized a while back I bit off more than I could chew with trying to recreate island defense in Unreal. Shit was way above my level of programming and I just fell off the planet with it. However... now that the alpha modding tools have been released, I've started recreating island defense within hammer. My friend and I have been working on this for about 4 days now and we're actually pretty close to having the basic foundation laid. From that point on it'll just be mass creation of new units and abilities, followed by custom model implementation, voice work, particles (you know, the stuff that makes it look pretty).

My friend has successfully created a working harvesting system and is working on the grid system, and I've recreated Faerie, Pirate, Moltenius, Granticles, and Bubonicus so far. I made a Lua script for both healing and damage chain nukes which I can use to create the abilities for the minions and titans heals and nukes (considering so many of them use them). It's coming along quite nicely Smiley. I'll keep this up to date with progress.

I stream every time I'm working on it over at www.twitch.tv/rbdota. Follow me to know whenever I'm working on it.

I'm looking forward to pushing out a quality product for everyone to enjoy.

The scripting for this is actually pretty easy and fun to mess around with. It used both KV (Data Driven) and Lua for the more complex stuff. Here's a bit of code for an example.

KV (Data Driven)
        //=================================================================================================================
   // Pirate : Bullet to the Knee
   //=================================================================================================================
   "pirate_bullet_to_the_knee"
   {
      // General
      //-------------------------------------------------------------------------------------------------------------
      "AbilityName"               "pirate_bullet_to_the_knee"
      "AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK"
      "AbilityTextureName"         "sniper_assassinate"
      "AbilityUnitTargetTeam"         "DOTA_UNIT_TARGET_TEAM_ENEMY"
      "AbilityUnitTargetType"         "DOTA_UNIT_TARGET_HERO"
      "BaseClass"                  "ability_datadriven"
      "MaxLevel"                  "1"
      
      // Casting
      //-------------------------------------------------------------------------------------------------------------
      "AbilityCastRange"            "600"
      "AbilityCastPoint"            "0.0"
      
      // Time
      //-------------------------------------------------------------------------------------------------------------
      "AbilityCooldown"            "80"
      
      // Cost
      //-------------------------------------------------------------------------------------------------------------
      "AbilityManaCost"            "0"
      
      
      // Modifiers
      //-------------------------------------------------------------------------------------------------------------
      
      "precache"
      {
         "soundfile"               "soundevents/game_sounds_heroes/game_sounds_sniper.vsndevts"
         "particle"               "particles/items_fx/desolator_projectile.vpcf"
      }

      "OnSpellStart"
      {
         "TrackingProjectile"
         {
            "Target"            "TARGET"
            "EffectName"         "particles/items_fx/desolator_projectile.vpcf"
            "MoveSpeed"            "%projectile_speed"
         }
         "FireSound"
         {
            "EffectName"         "Hero_Sniper.MKG_attack"
            "Target"            "CASTER"
         }
      }
      
      "OnProjectileHitUnit"
      {
         "DeleteOnHit"            "false"
         
         "ApplyModifier"
         {
            "Target"            "TARGET"
            "ModifierName"         "bullet_to_the_knee_slow"
         }
         "FireSound"
         {
            "EffectName"         "Hero_Sniper.AssassinateDamage"
            "Target"            "TARGET"
         }
      }   
         
      "Modifiers"
      {
         "bullet_to_the_knee_slow"
         {
            "Duration"            "%slow_duration"
            "Properties"
            {
               "MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE"   "%movespeed_slow"
               "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"   "%attackspeed_slow"
            }
         }
      }
      
      
      // Special
      //-------------------------------------------------------------------------------------------------------------
      
      "AbilitySpecial"
      {
         "01"
         {
            "var_type"            "FIELD_INTEGER"
            "slow_duration"         "20"
         }
         "02"
         {
            "var_type"            "FIELD_INTEGER"
            "movespeed_slow"      "-40"
         }
         "03"
         {
            "var_type"            "FIELD_INTEGER"
            "attackspeed_slow"      "-10"
         }
         "04"
         {
            "var_type"            "FIELD_INTEGER"
            "projectile_speed"      "1500"
         }
      }
   }



Lua

function TitanChainHeal(vars)   

-- establish spell variables
   local hasBeenHealed = {}
   local localCaster = vars.caster
   local localTarget = vars.target
   local thisSpell = vars.caster:FindAbilityByName(vars.localAbilityName)
   local spellLevel = thisSpell:GetLevel()
   local spellHeal = vars.healBase + (vars.healUpgrade * spellLevel)
   local spellBounces = vars.healBounce + spellLevel
   local units = nil
   local chainHeal = nil
   local chainDummy = nil
   local emergency = 0
   
   localTarget:Heal(spellHeal, localTarget)
   hasBeenHealed[localTarget] = true
   
-- this timer is used for the bounces   
   BareBonesGameMode:CreateTimer(DoUniqueString("chainh"), {
      useGameTime = true,
      endTime = GameRules:GetGameTime() + 0.2,
      callback = function(funct, args)
         
-- unit selection and counting
         units = FindUnitsInRadius(localCaster:GetTeamNumber(), localTarget:GetOrigin(), localCaster, vars.searchRadius, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, 0, 0, false)
-- end the spell if there are no valid localTargets
         if #units < 2 then
            return
         end
-- particle stuff. the bounding box stuff is so that the lightning shoots out of the middle. it still attaches to the feet so it's a bit weird but it's mostly fine.
-- the particle must be created during the timer but before the target switch   
         localTargetVec = localTarget:GetAbsOrigin()
         localTargetVec.z = localTarget:GetAbsOrigin().z+((localTarget:GetBoundingMaxs().z - localTarget:GetBoundingMins().z)/2)
         if chainDummy ~= nil then
            chainDummy:Destroy()
         end
         chainDummy = CreateUnitByName("npc_dummy_unit", localTargetVec, false, nil, nil, DOTA_TEAM_NOTEAM)
         chainDummy:SetAbsOrigin(localTargetVec)
         chainDummy:AddNewModifier(unit, nil, "modifier_invulnerable", {})
         chainDummy:AddNewModifier(unit, nil, "modifier_phased", {})   
-- select a target randomly from the table and heal. while loop makes sure the target doesn't select itself.
         local randnum = math.random(1,#units)
         local randomTarget = units[randnum]
         while randomTarget ~= nil and (randomTarget == localTarget or hasBeenHealed[randomTarget] == true) do
            table.remove(units, randnum)
            print(Count)
            if units ~= nil then
               randnum = math.random(1,#units)
               randomTarget = units[randnum]
            else
               randomTarget = nil
            end
         end
         localTarget = randomTarget
         vars.localTarget = localTarget -- have to make sure the local variable is put back into vars so it's passed properly to chain_abilities.lua
         
         if localTarget ~= nil then
          -- play the sound
            localTarget:EmitSound(vars.soundEffect)
         -- make the particle shoot to the localTarget
            chainHeal = ParticleManager:CreateParticle(vars.localParticleName, PATTACH_ABSORIGIN_FOLLOW, chainDummy)
            ParticleManager:SetParticleControl(chainHeal,1,Vector(localTarget:GetAbsOrigin().x,localTarget:GetAbsOrigin().y,localTarget:GetAbsOrigin().z+((localTarget:GetBoundingMaxs().z - localTarget:GetBoundingMins().z)/2)))                                                            
         end
         -- decrement remaining spell bounces and clear relevant tables
         localTarget:Heal(spellHeal, randomTarget)
         spellBounces = spellBounces - 1
         units = nil
         count = 0
-- fire the timer again if spell bounces remain
         if localTarget ~= nil then
            hasBeenHealed[randomTarget] = true
            vars.hasBeenHealed = hasBeenHealed
         end
         if spellBounces > 0 and randomTarget ~= nil then
            return GameRules:GetGameTime() + 0.2
         else
            hasBeenHealed = nil -- empty target list for recast
            return
         end
      end
   })
end
   
« Last Edit: August 14, 2014, 08:59:19 PM by Onahail » Logged

Onahail
Spearloc
***

Karma: +7/-10
Posts: 184



« Reply #1 on: August 14, 2014, 08:59:01 PM »

Updated!
Logged

Coaster_Man
Titan of the Abyss
******

Karma: +26/-18
Posts: 1233

Self Moderator


« Reply #2 on: August 15, 2014, 03:50:23 AM »

cool  Afro
Logged

Pirate is an octopus in disguise!
Onahail
Spearloc
***

Karma: +7/-10
Posts: 184



« Reply #3 on: August 15, 2014, 07:46:37 PM »

The hype is fucking serious

Logged

RBD
Worker


Karma: +1/-1
Posts: 9


« Reply #4 on: September 07, 2014, 04:46:34 PM »

Soooo yeah my account is apparently no longer in existence, idk why but w/e. I go by RBD now anyway. So updates for you guys, I havent been streaming for over a week now and that's because I got sent out of the country for work. I have fucking abysmal internet connection and a laptop that can barely run dota, let alone compile a mod for it. Ill be back later this week and streaming, plus I'm getting an ASUS ROG laptop that should be MORE than capable of doing everything I need to keep the ball rolling.
Logged
RBD
Worker


Karma: +1/-1
Posts: 9


« Reply #5 on: September 17, 2014, 03:39:48 PM »

Hey guys! Here's a bit of a sneak peak at some concept art I've gotten so far.

Murloc Research Center


Makura Tower Concepts
Logged
theorchero
PS: FUCK YOU
Not a mod
Titan of the Abyss
*

Karma: +13/-12
Posts: 1557


« Reply #6 on: September 22, 2014, 01:01:08 PM »

the fucking hype is real

« Last Edit: September 22, 2014, 01:20:10 PM by theorchero » Logged

chmo444
Worker


Karma: +0/-1
Posts: 1



WWW
« Reply #7 on: July 28, 2015, 07:12:42 AM »

it was so cool Smiley  Grin
Logged

Burn
Titan Hunter
****

Karma: +28/-12
Posts: 413


asdf


« Reply #8 on: December 02, 2015, 06:28:53 PM »

Nice, those look fantastic!

-Burn
Logged


(>' ')>      Gd W|| W|kg        <(' '<)
Clan BTI Represent: http://tinyurl.com/clanBTI

Lol'd.
Get burnt.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!