Spell Contest III

Status
Not open for further replies.

U are a noob

Mega Super Ultra Cool Member
Reaction score
152
[Contest]Spell Contest III

Spell Contest III: Traps

[del]Appoved by ~~~~~[/del]
The purpose of this contest is to challenge contestants on a specific theme. The contest is also a show case of skill. Everyone may join.
Prize:
  • The winner of this contest gets reputation points from Uareanoob, kc102, Pyrogasm and whomever else wants to.

Spell Rules:
  • You can use use JASS and/or GUI , and ALL of your spell coding must be written by you(Systems are ok, but no caster systems).
  • The spell you enter must be new and made specially for this contest.
  • Imported models are allowed.
  • Your spell must follow theme.
  • You may only submit 1 spell.
  • Do not submit protected maps.
  • Make the spell easy to test.
  • GUI will not receive points over JASS, nor will the other way around.
  • Do not directly ask how to make a spell on the forums.You're allowed to ask "how do I do this", but not "can someone make this spell for me".
Thread Rules:
  • No bashing.
  • Off-site links are okay.
  • No stupid remarks.
  • No comments that just consist of praise for a spell like: "WOW YOUR SPELL IS SO GOOD!!!!!!!"
  • Also do not write "Can I marry you?"
  • YOU DO NOT HAVE TO SIGN UP TO SUBMIT A SPELL.
  • AFTER YOU SUBMIT YOUR SPELL YOU MAY EDIT IT.
  • IT'S NEVER TO LATE TO SIGN UP
Grading:

Effect - 30 points

  • Is the actual purpose of the spell more than just a instant damage? Has it been done before? Does it match the theme? Could you see it in a map? Is it fun? Does it work properly.
    Layout
    Effects:
    Purpose: ?/5
    Originality: ?/5
    In-Map: ?/5
    Theme: ?/5
    Fun: ?/5
    Works: ?/5
    Effects Total: ??/30 ??.??%
    Effects Grading Comments:

Coding - 25 points

  • Is the coding efficient? Is it leak-less? Can you implement it easily?
    Layout
    Coding
    Efficient: ?/10
    Leak-less: ?/10
    Importability: ?/5
    No (if you feel like adding them, go ahead), but here's the lowdown:
    • Comprehensive Constants = 5/5 importability
    • No constants but variables that can be changed = 3/5
    • No constants/variables but comments next to configurable parts = 1/5
    • No constants/variables/comments = 0/5 for importability
    Coding Total: ?/25 ??.??%
    Coding Grading Comment:
Special Effects - 20 Points

  • How creative are you with your special effects? Does your special effects match your theme? "Special Effects" does not mean just the action "Special Effects". Does it look more than just a bunch of SFXs bunched together?
    Layout
    Special Effects:
    Creativity: ?/10
    Theme: ?/6
    Cleanliness: ?/4
    Special Effect Total: ?/20 ??.??%
    Special Effect Grading Comments:


Animations - 15 points

  • Does the animation flow with the special effects and the description? Is it relevant to the spell? Does it look fancy?
    Layout
    Animation
    Flow: ?/5
    Relevant: ?/5
    Fancy: ?/5
    Animation Total: ?/15 ??.??%
    Animation Grading Comment:



Icon & Description - 10 points
  • Does the icon fit the spell? Does the description actually describe the spell without being straightforward? Does it explain the animation? Does the spell have a storyline?
    Layout
    Icon & Description:
    Icon: ?/5
    Description: ?/5
    Icon & Description Total: ?/10 ??.??%
    Icon & Description Grading Comments:

Sound - 10 points

  • The the sound match spell? Is the timing correct?
    Layout
    Sound
    Type : ?/5
    Timing : ?/5
    Sound Total: ?/10 ??.??%
    Sound Grading Comment:
    Full Score: ??/110 ??.??%
Theme:​
  • This contest's theme is Traps; that means you should make a spell that has to do with trapping something.
  • Definition: The type of trap I'm looking for is like a form of containment.
Deadline:
  • The session ends 14 days from now, that means on the 4th of July.

I wish you guys good luck and happy mapping.
Judges:
Uareanoob
Pyrogasm - Coding
Purposed Entries
________________________
Check Out my MUI System for GUI
 

U are a noob

Mega Super Ultra Cool Member
Reaction score
152
Entries
Demonic Force.

Story - The Trapmaster desended into Hell itself, confronting many horrified beings. Upon escaping, he fled but managed to retrieve the unholy relic - The Demonic Force. Somehow it was lost by the Trapmaster. To this day, nobody knows what has happened to this terrifying relic.


Effect - Summons a powerful Trap, sending the very essence of hell into it. If an enemy ground unit or hero comes within 500 yards of this terrifying trap. The trap will break, sending the triggering unit towards the trap, slowing him down and exploding with tremendous force, dealing damage to the enemy unit whilst half of the damage dealt is sent towards the trap-layer. The Trap Layer can be damaged if in range.

Level 1:
Mana Cost: 150
Damage: 200
Life Retrival: 100


Level 2:
Mana Cost: 200
Damage: 400
Life Retrival: 200


Level 3:
Mana Cost: 250
Damage: 600
Life Retrival: 300



You Have Been Warned...

Interesting Facts: The Trigger used for the Trap holds around 420 actions. 400+ Are to do with the Special Effects.
I used a Paladin for a Demonic Trap. Good thing hes tinted red...
The Trap is the 5 sided Star!!! :eek:

Pros:
A Useful Tool for escaping and Demonic Games
Can Backlash on the Trap Layer, making him be more aware of his trap setting.
Great for AoE.

Cons:
Ill let you decide ;)
Figure I'd put this back here instead of making you search through the pages.

Frost Trap
[URL=http://imageshack.us]
frosttrap1vz6.jpg
[/URL]


Description and everything is in the screenshot, there is no mana cost because it's simply here for the contest and no balancing was done to it.

P.S. Sorry for the dark blue in the story, I wanted the name to stick out but I couldn't find a better color.​




View attachment 9756

Count me in. (First custom spell for me.)

Screenshots and map:
Water Image​

This is my first spell of this type :eek: Screens and map Attached. The prison-type is only to the unit that attacked the ilussion (I can do it for all the units in the zone but i am not sure how to do it so i decided leave it this way)
Here ya go. No fancy titles for me, just the basics.
It's a life drain trap, people who go near it will be damaged... it's mainly an eye candy spell.

Things to edit:
Range:
Code:
Set temploc[(Integer A)] = (draintraploc offset by [B]500.00[/B] towards ((Real((Integer A))) x 45.00) degrees)
Code:
Stats - Area of Effect: [B]500[/B]

Damage:
Object editor.

Number of points in the star:
Code:
For each (Integer A) from 1 to [B]8[/B], do (Actions)
Code:
Set temploc[(Integer A)] = (draintraploc offset by 500.00 towards ((Real((Integer A))) x [B]45.00[/B]) degrees)
Spirit Trap

i819239_BTNSpiritAmbush.BMP

During the War between the Burning Legion and the Night Elves, the Warlocks' appearance were obvious. The Warlocks captured the spirits of those they killed. They can now use them as their servants.

Summons spirits which haunt the target area, capturing the first enemy who came. Petrifies the target for 3 seconds, as well as haunting it for the rest of the duration; 12 seconds. Haunted units move slower. Has 250 area of effect.

i819281_SpiritTrapScreenShot.jpg
Here my spell for the contest!

Level 1 - A unit enters withing 100 of AoE of chain trap, this will actived and grab the unit and 3 more random units around this. Deals 20 damage per second, has 350 of trap AoE and last 3 seconds.

Level 1 - A unit enters withing 100 of AoE of chain trap, this will actived and grab the unit and 4 more random units around this. Deals 30 damage per second, has 400 of trap AoE and last 4 seconds.

Level 1 - A unit enters withing 100 of AoE of chain trap, this will actived and grab the unit and 5 more random units around this. Deals 40 damage per second, has 450 of trap AoE and last 5 seconds.

spellcontest1tz9.jpg

spellcontest2is2.jpg

Intellectual Crush
IntellectualCrushIcon.jpg


Learn Intellectual Crush

Sets a mind trap that will Mana Burn any trapped enemy hero, then dealing a percentage of trapped hero's lost mana to himself, based on his Intellegence.

Level 1 - 10 Mana Burn damage.
Level 2 - 20 Mana Burn damage.
Level 3 - 30 Mana Burn damage.

Cooldown: 6
Manacost: 40/50/60

10 traps maximum per player.
Only trap Heroes.

IntellectualCrushScreenshot.jpg


Map: View attachment 9867

Oh yeah, the language is hardly written.
Systematically the trap do Mana Burn,
then Mana Void (Deal x% of Lost Mana to Hit Points)
the x here is the trapped hero's Intelligence.


Earth Trap
Target: Point
Effect: Place Trap
Cooldown: None

The Spell Tester forces his power into the ground at the target point to create an permanent Earth Trap. When the Earth Trap is activated a Circle of Stones is created around it and the trap is removed.

Level 1: The Stones have 100HP and last for 6 Seconds
Level 2: The Stones have 200HP and last for 12 Seconds
Level 3: The Stones have 300HP and last for 18 Seconds.


Here's the map:
Set Clockwerk Goblin Trap

Creates a factory which automatically activates when enemy units come to close range. Creates Clockwerk Goblins around target who start to guard area nearby. Clockwerk Goblins will explode if enemy unit wanders too close to them. With each level creates more Goblins.

I could not get any good screenshot what would show ability in action and I didn' t found Clockwerk Goblin in game picture from *.mpq files o_O
Anyway my submission is here, that is latest. Though it would need many tweaks still.
Set Clockwerk Goblin Trap

Creates a factory which automatically activates when enemy units come to close range. Creates Clockwerk Goblins around target who start to guard area nearby. Clockwerk Goblins will explode if enemy unit wanders too close to them. With each level creates more Goblins.

I could not get any good screenshot what would show ability in action and I didn' t found Clockwerk Goblin in game picture from *.mpq files o_O
Anyway my submission is here, that is latest. Though it would need many tweaks still.
 

U are a noob

Mega Super Ultra Cool Member
Reaction score
152
Coding grades done:
Download the attached text file for the gradings. They ARE formatted!

Pyrogasm said:
Spell Contest III - Traps
Coding Grades by Pyrogasm

Please note that I gave full marks in any category only if I could find no errors in that category.

Demonic Force - Monsterous

Efficiency - 4/10
Leakage - 1/10 Total: 5/25
Importability - 0/5

Look-over notes:
- "Casting_Unit" is a bad choice for a variable name; it will easily conflict with other spells.
- Both instances of "Casting Unit" should be "Triggering Unit".
- Why use "Position of (No unit)"; that just means 0.00 degrees.
- You leak 2 locations.

- Shit, dude. You leak 274 locations just from your SFX, then another 6 from other lines.
"(Position of (Attacking Unit)) offset by X, Y" leaks 2 locations, and you did it 140 times
- It would be hell to try to change the effect added... why not use a variable?
- The way you trigger the event is much better than adding events.
- The entire thing could be done with a few loops:
For each (Integer A) from 1 to 27, do (Actions)
Loop - Actions
Special Effect - Create a special effect at ((Position of (Attacking unit)) offset by ((-5.00 + ((Real((Integer A))) x 5.00)), (300.00 - ((Real((Integer A))) x 30.00)))) using Abilities\Spells\Orc\TrollBerserk\HeadhunterWEAPONSLeft.mdl
Set Special_Effect[(Integer A)] = (Last created special effect)
And so on for the rest, you just need to do the math (Note that this still leaks locations).
- Another loop to replace all the SFX crap at the end:
For each (Integer A) from 1 to 137, do (Actions)
Loop - Actions
Custom script: call DestroyEffect (udg_Special_Effect[GetForLoopIndexA()])
- Any uses of "Attacked Unit" should be replaced with "Triggering Unit"; the latter is always preferable.
- You should store "Attacking Unit" to a variable so as to have a less of a chance for mishap, and it makes it more customizable.
- "Wait X.XX seconds" has been known to Desync— use "Wait X.XX Game-time seconds" instead.
- The "Damage Circular Area" function is bugged; it DOES NOT WORK. Instead, do this:
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units within 350.00 of ((Position of (Attacking unit)) offset by (0.00, -90.00)) matching (((Matching Unit) is an enemy of (Owner of (Casting_Unit))) = true) and do (Actions)
Unit - Cause Casting_Unit to damage (Picked Unit) dealing ((Real((Level of Demonic Force for Casting_Unit))) x 200.00) damage of attack type Chaos and damage type Normal
Use "damage type Universal" instead of "Normal", as the latter will be affected by armor.
Note that this still leaks locations.
- When you do "Unit - Set (Attacked unit) movement speed to ((Current movement speed of (Attacked unit)) / 6.00)", that factors
in all Movespeed modifying bonuses too; you're not just modifying the base

- Overall, pretty poor and simplistic; you didn't even slide the unit into the center.


Chain Trap - Naminator

Efficiency - 9/10
Leakage - 9/10 Total: 22/25
Importability - 4/5

Look-over notes:
- Nice use of prefixed variables; this would be easy to import.

- You could've reused the variable "CT_Point" instead of using "CT_Trapped_Loc".
- You should've used an entirely new ability instead of modifying the Aerial Shackles ability.
- The only problem with the spell is the fact that it leaks events; when you add an event to the second trigger, there is no way to remove it, and
once the trap is dead, its specific event is useless. A better way to do it (the way Monsterous has done) is to give your dummy trap an attack
with a range equal to that of the radius of the spell and a very slow projectile speed; then, detect when a unit is attacked by a trap, order the
trap to stop, and do your effects from there.

- Do you know JASS? Setting the picked unit to a variable is a very JASS-ish thing to do, not really seen in GUI as people don't realize what function calls are.
- Very simple spell, but it is done in a top-notch fashion! Well done!


Water Image - Ozaru

Efficiency - 5/10
Leakage - 5/10 Total: 12/25
Importability - 2/5

Look-over notes:
- Dear god! LEARN TO INDENT YOUR CODE!
- You have constants... but they are very, very minimalistic.
- The way you've done this means that you must have 3 additional units for the ability; if you'd simply used the Wand of Illusion ability/bug trick
you could've cloned the unit. This would have removed the UI icon in the top left, made the unit tinted to the owning player for easy recognition,
and removed all hero abilities automatically.
- You should prefix your functions for importability.

- What does "IT" stand for in the Condition function? Additionally, you should make a compound return like so:
local integer Id = GetUnitTypeId(GetAttackedUnitBJ())
return Id == 'H002' or Id == 'H003' or Id == 'H001'
- In the function "Level", it is possible that you will return an un-initialized integer; to fix this, do "local integer i = 0".
- In both "Level" and "ITCondition", you should change "GetAttackedUnitBJ()" to "GetTriggerUnit()" and store it to a variable instead of calling it each time.

- "local unit Trap=GetAttackedUnitBJ()" should be "local unit Trap=GetTriggerUnit()"
- Use X/Y coordinates! That's one of the things JASS is most useful for! I won't show what to change because I would be basically rewriting the trigger for you.
Figure it out on your own, and please don't use locations.
- AUGH! JASS is useful because you don't have to do dumb things like "GetLastCreatedUnit()"! Set it to a variable!:
local unit Dummy=CreateNUnitsAtLoc(1,DummyID(),TrapOwner,Loc,bj_UNIT_FACING)
call SetUnitAbilityLevel(Dummy,DummyAbility(),Level())
call UnitDamagePointLoc(Dummy, 0, 300.00, Loc, 60.00*Level(), ATTACK_TYPE_MAGIC, DAMAGE_TYPE_COLD )
call IssueTargetOrder(Dummy, "magicleash", Attacker )
- You leak your dummy unit, as you never kill it, remove it, or give it an expiration timer.
- Neither the SFX or their number is configurable.
- Don't use "UnitDamagePointLoc(...)" as it can bug out; instead, do what I advised Monsterous to do. Additionally, use "ATTACK_TYPE_CHAOS" and
"DAMAGE_TYPE_UNIVERSAL", as the other options are subject to armor reduction, etc.

- "PolarProjectionBJ(...)" is a very nasty, slow function; pick it apart and use coordinates:
NewX = OldX+Distance*Cos(Angle*bj_RADTODEG)
NewY = OldY+Distance*Sin(Angle*bj_RADTODEG)
Additionally, you're leaking a location there.
- You forgot to null "Attacker", "TrapOwner", "Loc", and "LocEffect".

- Again, overall below average work. You should really fix up your JASS.


Titan's Containment - Ghan_04

Efficiency - 9/10
Leakage - 10/10 Total: 23/25
Importability - 4/5

Look-over notes:
- At last! Concise implementation directions! Thank god.

- "Unit - Turn collision for (Last created unit) Off" is unnecessary as long as the unit has locust or a collision size of 0, which dummy effect units should.
- "Custom script: call UnitAddAbilityBJ( 'Aloc', GetLastCreatedUnit() )" should be "Custom script: call UnitAddAbility( 'Aloc', GetLastCreatedUnit() )"
And again, why not give the unit the ability in the Object Editor?
- I'm pretty sure "Animation - Play (Last created unit)'s stand animation" is unneeded, as the unit will automatically play it.
- Why do you set EffectUnits[1] so late? It would be better to set it as soon as the unit is created and then reference it instead of "Last Created Unit".

- "Time Equal to 125" should be "Time Greater Than or Equal to 125" in the event that the variable bugs out.
- Your variables could use prefixes.

- I'm not sure if it was intended to be implemented when another person implements your spell into his or her map, but the "Item Info" trigger is missing
Events for all players besides Player 1 and the selection thing won't work.

- I could have sworn that you knew JASS... why is this in GUI?
- Overall, not shabby; if it was MUI, this spell would be killer.


Intellectual Crush - mr-death

Efficiency - 7/10
Leakage - 7/10 Total: 18/25
Importability - 4/5

Look-over notes:
- The trigger explaining the spell was neat and concise, if hard to read in some spots.
- The variable-setting trigger is a good idea; it removes the need to come up with a complex formula.
- The comment notes are very helpful.
- You should prefix your variables.

- The "Spell Cast" trigger should look more like this:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in (Units owned by (Owner of (Casting unit)) of type Intellectual Crush Trap)) Greater than 10
Then - Actions
Unit - Kill (Random unit from (Units owned by (Owner of (Casting unit)) of type Intellectual Crush Trap))
Else - Actions
Unit - Create 1 Intellectual Crush Trap for (Owner of (Casting unit)) at (Target point of ability being cast) facing Default building facing degrees
Unit - Set level of Level Identification for (Last created unit) to (Level of Intellectual Crush for (Casting unit))
The way you were doing it before would allow for a max of 9 traps (You had "Less than 10"), not 10. The above way is also more optimized.
Note: this does still leak.
- You leak 2 points and 2 groups.
- Any/all instances of "Casting Unit" should be replaced with "Triggering Unit".

- There is no need for this line: Set damage = 0.00, as you can simply do this:
Set damage = (manaburn[(Level of Level Identification for trap)])
Set damage = (((Max mana of (Attacked unit)) - (Mana of (Attacked unit))) x ((Real((Intelligence of (Attacked unit) (Include bonuses)))) x 0.01))
- Replace all instances of "Attacked Unit" with "Triggering Unit".
- Use "attack type Chaos" instead of "Spells", as the latter will be affected by armor.
- "Wait 0.40 seconds" should be "Wait 0.40 game-time seconds", as the former has been known to desync.
- I understand what you were trying to do with the destroying of the lightning, but you're ending up trying to destroy non-existant ones. To fix this, do this:
For each (Integer A) from 1 to lightinteger, do (Actions)
Loop - Actions
Custom script: if udg_light != null then
Lightning - Destroy light[(Integer A)]
Custom script: endif
This will only destroy the lightning effects that aren't already destroyed.
- The "Do Nothing" actions are pointless; remove them.

- Success! An MUI GUI spell! I'm overjoyed.
- Aside from that, this spell ain't too bad; just a few fixes here and there.


Frost Trap - Pigger

Efficiency - 6/10
Leakage - 2/10 Total: 10/25
Importability - 2/5

Look-over notes:
- The problem with this spell is the fact that it leaks events; when you add an event to the second trigger, there is no way to remove it, and
once the trap is dead, its specific event is useless. A better way to do it (the way Monsterous has done) is to give your dummy trap an attack
with a range equal to that of the radius of the spell and a very slow projectile speed; then, detect when a unit is attacked by a trap, order the
trap to stop, and do your effects from there.

- Because you don't have a condition for checking to see if the Triggering Unit is an enemy of the trap, you can trigger the trap yourself. This is a
problem that I found myself continually running into when testing the map.
- You leak 135 locations, all of which come from this line:
Unit - Create 1 FrozenDummy for (Owner of Trap) at ((Position of TrappedUnit) offset by 300.00 towards Angle degrees) facing (Position of TrappedUnit)
- There's no reason to do "Set Dummy = No unit", when Dummy is a global unit variable.
- You should prefix your variables.
- You leak another point right after the loop.
- "Wait X.XX seconds" has been known to Desync— use "Wait X.XX Game-time seconds" instead.
- Referencing "Last Created Unit" after a wait is a VERY BAD IDEA. It is hightly likely that a unit has been created in the timeframe of that wait.
To fix this, simply store the unit to a variable; your code is not MUI anyway.
- All 3 of these are pointless:
Set Trap = No unit
Set Angle = 0.00
Set TrappedUnit = No unit

- Overall, an average spell; not too great but it could get there if it became MUI and was fixed to work properly.


Earth Trap - Ninja_Sheep

Efficiency - 9/10
Leakage - 10/10 Total: 23/25
Importability - 4/5

Look-over notes:
- Prefix your variables.
- I can't see any coding errors... Well done! :D
- The only bad thing that I can see is the way you add the abilities to the traps when they enter the map. Instead of setting the level of the ability,
you could simply make it a 1-level ability and reference the level of the unit instead when it casts the spell.
- If you don't change that, then this line: "Unit - Set life of (Last created unit) to (100.00 x (Real((Level of (Ability being cast) for (Triggering unit)))))"
should become this: Unit - Set life of (Last created unit) to (100.00 x (Real((Level of (Activate Earth Trap [Q]) for (Triggering unit)))))

- Nothing complex, but you've fixed it up nicely.


Clockwerk Goblin Trap - Sooda

Efficiency - 7/10
Leakage - 8/10 Total: 20/25
Importability - 5/5

Look-over notes:
- Your use of comments, though sometimes intrusive, are very helpful in understanding this code...
- If you comment out a section of code because you don't need it... please try to remove it in the submission.
- Any constant functions in which you have commented how the formula works should instead take all relevant parts of the formula as arguments. It's much
more flexible that way. Additionally, please prefix your constants and give you spell a header.
- If you're using vJASS and globals blocks... why do you still have constant functions that don't take arguments. Replace all of them with a globals block
that has constant integers/reals

- I understand your use of ConditionFuncs as ActionFuncs, but it's not always needed, especially for spells. When you have a separate ConditionFunc and ActionFunc,
people can easily add their own conditions. Additionally, you save yourself from initializing variables that don't need to be (like "caster" in the function
"CreateClockWerkGoblinTrapUnit").

- In function "CreateClockWerkGoblinTrapUnit", these lines inside the if are pointless; they're already taken care of outside:
set caster = null
return false
- You're leaking a null BoolExpr in this line: call TriggerRegisterPlayerUnitEvent(clockWerkGoblinTrig,Player(playerIndex),EVENT_PLAYER_UNIT_SPELL_CHANNEL,null)
- Why is the trigger AddNewUnitsOnMap global?
- Replace "EVENT_PLAYER_UNIT_SPELL_CHANNEL" with "EVENT_PLAYER_UNIT_SPELL_EFFECT".
- Anywhere there is a bj_DEGTORAD or bj_RADTODEG, replace it with the appropriate real number.
- This entire if statement should be reworked:
if clockWerkAbilityData_total == 0 then
set clockWerkAbilityData_total = clockWerkAbilityData_total + 1
set clockWerkAbilityData_ar[clockWerkAbilityData_total] = abilityCastingInfo

call TimerStart(clockWerkAbility_timer,ReOrderingInterval(),true,function OrderToTargetPointUntilDead)
else
set clockWerkAbilityData_total = clockWerkAbilityData_total + 1
set clockWerkAbilityData_ar[clockWerkAbilityData_total] = abilityCastingInfo
endif
To this:
set clockWerkAbilityData_total = clockWerkAbilityData_total + 1
set clockWerkAbilityData_ar[clockWerkAbilityData_total] = abilityCastingInfo
if clockWerkAbilityData_total == 1 then
call TimerStart(clockWerkAbility_timer,ReOrderingInterval(),true,function OrderToTargetPointUntilDead)
endif
- The function ValidUnit should be rewritten to this:
function ValidUnit takes nothing returns boolean
local unit filterUnit = GetFilterUnit()
local boolean B = GetWidgetLife(filterUnit) > .405 and IsUnitEnemy(filterUnit,GetOwningPlayer(GetTriggerUnit()))

set filterUnit = null
return B
endfunction

- Why do you set the values of the integers/reals in the struct to 0? You only need null the units, as far as I know.
- I don't see a purpose to the "detectWhenUnitComesInRange" trigger, even though you add events and an ActionFunc to it... it seems that even if it did trigger,
it would not do anything. Would you care explaining?
- I'm baffled... you have all these constants and stuff for dealing damage... but no damaging function is ever called, nor are many of the constants. What's going on?!
Additionally, your Clockwerk Goblin units still have the "Kaboom" ability, so that might be fucking with things.

- Overall, I think you put the most work into the code of anyone who submitted, and there aren't any glaring issues. However, I think you could've achieved a similar
effect with a fair amount less work; but that's just my opinion and the fact that I don't write vJASS.


Spirit Trap - --Thanatos--

Efficiency - 8/10
Leakage - 10/10 Total: 23/25
Importability - 5/5

Look-over notes:
- If you are using vJASS, why aren't you using constant globals for things like Spell Ids?
- Nice, perfect, comprehensive constants. My only gripe is that they take "integer a", whereas "integer Level" would've made slightly more sense.
- Preloading is also always very nice.`

- The entire Spirit_Trap_Filter function should be rewritten as follows:
function Spirit_Trap_Filter takes nothing returns boolean
local timer StTimer = GetExpiredTimer ()
local StStrct data = GetData (StTimer)
local unit target = GetFilterUnit ()
local boolean b = GetUnitAbilityLevel(target,DummyAbilityRawcode()) == 0 and GetWidgetLife(target) > 0.405 and IsUnitEnemy(target,GetOwningPlayer(data.caster)) and (IsUnitType (target,UNIT_TYPE_STRUCTURE) == false) and (Spirit_Trap_Ultimate() or (IsUnitType(target,UNIT_TYPE_MAGIC_IMMUNE) == false))

set StTimer = null
set target = null
return b
endfunction

- "call SetUnitUserData(spirit,R2I(degree))" is bad; many systems use a unit Custom Value. You should simply store this to a struct attached to the unit
or just store it with the DataSystem.
- Why do stuff like "set data.duration = 0.00" each time? Could you not simply declare each of those values as the specified value when you declare the struct?
- The timer interval should be in a constant function/constant global; this also: "set duration = duration + 0.04".

- Always compute "(3.14159 / 180.00)" and "(180.00 / 3.14159)".
- In the function "Spirit_Trap_Spins", you should set "Spirit_Trap_SsRawcode()" to a variable, as you reference it multiple times.
- What is the purpose of "call SetUnitVertexColor(spirit,0,0,0,0)"? I thought I saw some funky shadows, but a dummy unit shouldn't have a model file anyway...
- Both Spirit_Trap_DegreeAccelerationA() and Spirit_Trap_DegreeAccelerationB() should be set to variables before their respective loops.
- These two lines are repeated directly below themselves:
call SetUnitPathing (spirit,false)
call SetUnitPosition (spirit,x,y)
And I think the first is pointless; if it's a dummy unit it shouldn't have collision anyway.
- I'm pretty sure that "call UnitApplyTimedLife(spirit,'BTLF',0.00001)" will just apply a 0 second expiration timer; wc3's floating-point goes to 3 places max.
- Whenever possible, you should not initialize variables until you need them, and only null them when you're sure they don't have a value. For example:
function BadFunc takes nothing returns nothing
local group G = CreateGroup()
if udg_SomeBoolean then
call GroupEnumUnitsInRange(...)
call DoSomethingWith(G)
endif
call DestroyGroup(G)
set G = null
endfunction

function GoodFunc takes nothing returns nothing
local group G
if udg_SomeBoolean then
set G = CreateGroup()
call GroupEnumUnitsInRange(...)
call DoSomethingWith(G)
call DestroyGroup(G)
set G = null
endif
endfunction

- Very nice work, once again; griping about the non-use of constant globals is the only configuration problem, but aside from that your code is free from
major errors. Just fix up a few things here and there.
 

--Thanatos--

New Member
Reaction score
33
Spirit Trap

i819239_BTNSpiritAmbush.BMP

_____During the War between the Burning Legion and the Night Elves, the Warlocks' appearance were obvious. The Warlocks captured the spirits of those they killed. They can now use them as their servants.

_____Summons spirits which haunt the target area, capturing the first enemy who came. Petrifies the target for 3 seconds, as well as haunting it for the rest of the duration; 12 seconds. Haunted units move slower. Has 250 area of effect.

i819281_SpiritTrapScreenShot.jpg
 

Attachments

  • --Thanatos-- Spirit_Trap.w3x
    62.2 KB · Views: 289

Darkchaoself

What is this i dont even
Reaction score
106
Umm ive never really amde a spell before, and never had good art or anything, but ima try, so count me in.
 

Monsterous

In the Shadows, Lurking.
Reaction score
99
Demonic Force.

Story - The Trapmaster desended into Hell itself, confronting many horrified beings. Upon escaping, he fled but managed to retrieve the unholy relic - The Demonic Force. Somehow it was lost by the Trapmaster. To this day, nobody knows what has happened to this terrifying relic.


Effect - Summons a powerful Trap, sending the very essence of hell into it. If an enemy ground unit or hero comes within 500 yards of this terrifying trap. The trap will break, sending the triggering unit towards the trap, slowing him down and exploding with tremendous force, dealing damage to the enemy unit whilst half of the damage dealt is sent towards the trap-layer. The Trap Layer can be damaged if in range.

Level 1:
Mana Cost: 150
Damage: 200
Life Retrival: 100


Level 2:
Mana Cost: 200
Damage: 400
Life Retrival: 200


Level 3:
Mana Cost: 250
Damage: 600
Life Retrival: 300



You Have Been Warned...

Interesting Facts: The Trigger used for the Trap holds around 420 actions. 400+ Are to do with the Special Effects.
I used a Paladin for a Demonic Trap. Good thing hes tinted red...
The Trap is the 5 sided Star!!! :eek:

Pros:
A Useful Tool for escaping and Demonic Games
Can Backlash on the Trap Layer, making him be more aware of his trap setting.
Great for AoE.

Cons:
Ill let you decide ;)
 

Attachments

  • Trap Spell Contest.w3x
    40.5 KB · Views: 266

U are a noob

Mega Super Ultra Cool Member
Reaction score
152
Well ill give it a try...

2 Questions...

1. Can it be more than 1 trigger?
2. Can you have like the standard 64x64 desert default map at start?

Good luck to all who participate and to all whom get caught in their own trap.(did that make sense?)

Of-course it can be more than one trigger.
Yes you can but I like maps with terrain.

Added everyone.
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
Monsterous said:
Can it be more than 1 trigger?
If you've written in in JASS and it's supposed to comply with the JESP standard, then no.

I'm looking forward to grading the next entries!
 

elmstfreddie

The Finglonger
Reaction score
203
I might enter... I'll probably be studying for SS (unless I study that as much as I studied for the science test LOL!)
MAYBE. MAYBE. WE'LL SEE.

@ Pyro: If it's more than 1 JASS trigger, you shouldn't lose scores, since JESP standard is there for easy import... Not for good spells.
Not to mention it's unfair, since there's no like GUNG standard for GUI.
 

Pigger

New Member
Reaction score
13
Stupid question but does that mean there can only be 6 contestants?

(I'm willing to give it a try despite my not so great knowledge of making awesomeness)
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
I'm not saying that it would be downgraded for multiple triggers, but:
  • If you're competent in JASS, you'll know how to make multiple triggers within one GUI 'trigger'.
  • If you were trying to comply with the JESP standard (which I think all JASS spellmakers should do), you must have only one trigger.

As for your question, Pigger, no there is not a limit to the number of contestants. Feel free to enter!
 

U are a noob

Mega Super Ultra Cool Member
Reaction score
152
Okay. Updated the stuff.
GJ Monsterous. Guys noticed how he put the storyline in. Also I don't have my computer right now but Monsterous did you put the story line in game because thats the one thats gonna be graded.
 

elmstfreddie

The Finglonger
Reaction score
203
I am not on the proposed entries list?
(and for JASS we need constants too then right?)

My idear be soul sucker, it drains hp and pulls trapped units in.
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
You're going to lose points for "importability" if you don't.
 
Status
Not open for further replies.
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top