System Chain Link System

Reaction score
86
Chain Link System V0.70
By Infinitegde
Requires ABC.
Written in vJass.

What Is This?: Simply, it's a lightning system, except, instead of lightning it uses units for the lightning effect. This allows you to customize the lightning effect a lot more than the regular one. Example, Alpha Gradient. (Meaning, going from most transparent to least transparent.) Flexibility, (Flexible chains)(not in this version; but coming soon). And it comes built in with a unit attacher. Also, it is a great way to make the effect of an army in a cinematics. Because the Chainlink uses units as chains, you can simply put 'hfoo' for the unit code and come up with 1000's of footmen in a straight line.

Also, for those who know how to program in another language, this is imitating a "class" by using structs. So, you can use it just like you'd use a lightning effect. If you don't know how to use structs, look at a tutorial or read the vJass documentation. They are both very helpful :D

Code:
 [B]Features: [/B]
         -3D Points
         -Attachable
         -Anchorable
         -X&Y&Z Offsets
         -GetChains
 [B]Upcoming Features:[/B]
         -Flexible Chain
         -Retractable Chain
         -One-by-One creation
[B] Extras:[/B]
         -Alpha Gradient

 [B]Upcoming Extras:[/B]
         -Color Gradient

And, as always, a picture can demonstrate just exactly what I mean, so here:
Screenshots:
311p09d.jpg

Unfortunately, setting the transparency to all units doesn't work as well as you'd think. Some units, like these, the transparency is hard to tell. (only the glow effect is transparent.)

sw8pxj.jpg

Again, another one where the transparency isn't effective (most missiles are like this.)

2lmw5y8.jpg

Here is where it works, with units, now take a look at it. Simply, deanchor and deattach the anchor and heads and destroy them, (make a few more rows), apply a slightly dark black mask, tweak the camera angle a bit, and you have an army fit for display.

How to Import:
1) Make sure you have ABC installed correctly on your map.
2) Create a new trigger named ChainLinkSys and put the following code in it.
3) Use as you please.

Function List:
Code:
.destroy() takes nothing returns nothing
-Destroys the chain.
Ex. call Link.destroy()

.Deattach() && .Deanchor() takes nothing returns nothing
-Deattaches from the units its already attached/anchored to.
Ex. call Link.Deattach()
Ex2. call Link.Deanchor()

.Alpha_Gradient() takes real BeginFade,real EndFade, real MaxPercent, real MinPercent returns nothing
-Apply from beginpercent of chain to endpercent of chain. Start at Minpercent and go to MaxPercent.
Ex, call Link.Alpha_Gradient(0.00, 1.00, 0.50, 1.00)
What this does is it starts a 0% of the chain (Or the start) and goes to 100% of the chain(or all the way to the end), and evenly shifts from 50% transparency to 100% transparency.

.GetAnchoredOn() && .GetAttachedTo() takes nothing returns unit
-Gets the specified units.
Ex. set Anchor = Link.GetAnchoredOn()
Ex. set Head = Link.GetAttachedTo()

.Anchor() && .Attach() takes unit u returns boolean
-Attach or Anchor the chain to a specific unit.
Ex. set flag = Link.Attach(u)
if(flag == false)then
call BJDebugMsg("Attachment Failed.")
endif

.SetXOffset() && .SetYOffset() && .SetZOffset() takes real (x,y, or z) returns nothing
-Preset Offsets.
Ex. call Link.SetZOffset(100)
 
.create() takes real X1, real Y1, real Z1, real X2, real Y2, real Z2, integer unitcode, real ChainEvery,player P returns ChainLink
-Creates the chain
Ex. local ChainLink global = ChainLink.create(0,0,0,1000,1000,1000,'u000',50,Player(0))

.MoveChain() takes real X1, real Y1, real Z1, real X2, real Y2, real Z2, real ChainEvery returns nothing
- Moves the Chain.
Ex. call Link.MoveChain(0,0,100,100,100,0,50)

.GetChains() takes nothing returns group
-Puts all the chains into a group so you can apply your own transformation to it.
Ex. call ForGroup(Link.GetChain(), ApplyTransformation)


Code:

JASS:
//========================================
//          ChainLink System
//           By Infinitegde
//========================================
// Version: 0.70
// WhatIsThis: This is a simple system that basically makes lightning effects, without the actual "lightning."
// Meaning, it basically creates units for the lightning instead of actual lightning.
// Features: 
//         -3D Points
//         -Attachable
//         -Anchorable
//         -X&Y&Z Offsets
//         -GetChains
// Upcoming Features:
//         -Flexible Chain
//         -Retractable Chain
//         -One-by-One creation
// Extras:
//         -Alpha Gradient
//
// Upcoming Extras:
//         -Color Gradient
globals
    constant integer MAXCHAINS = 200
endglobals

library ChainLinkSys requires ABC
    
    function Trigger_Move takes nothing returns nothing
        local ChainLink t = GetTriggerStructA(GetTriggeringTrigger())
        local unit u = t.GetAnchoredOn()
        local real x1
        local real x2
        local real y1
        local real y2
        local real z1
        local real z2
        local unit Attach2 = t.GetAttachedTo()
        if( u != null) then
            set x1 = GetUnitX(u) 
            set y1 = GetUnitY(u)
            set z1 = GetUnitFlyHeight(u)
        else
            set x1 = t.P1X
            set y1 = t.P1Y
            set z1 = t.P1Z
        endif
        if( Attach2 != null) then
            set x2 = GetUnitX(Attach2)
            set y2 = GetUnitY(Attach2)
            set z2 = GetUnitFlyHeight(Attach2) 
        else
            set x2 = t.P2X 
            set y2 = t.P2Y 
            set z2 = t.P2Z
        endif
        call t.MoveChain(x1,y1,z1,x2,y2,z2,t.ChainEvery)
        call t.CheckStats()
        set u = null
        set Attach2 = null
    endfunction
    
    function RoundReal takes real r returns integer 
        if (r-R2I(r)>.5)then
            return R2I(r)+1
        endif
        return (R2I(r))
    endfunction
    
    struct STATS
        real AGMinPercent=0
        real AGMaxPercent=0
        real AGBeginPercent=0
        real AGEndPercent=0
        real XOffset=0
        real YOffset=0
        real ZOffset=0
    endstruct
    
    struct ChainLink
        real ChainEvery
        real P1X
        real P1Y
        real P1Z
        real P2X
        real P2Y
        real P2Z
        trigger Follow = null
        integer unitcode
        unit anchor
        private unit AttachedTo = null
        private unit Anchoredon = null
        unit head
        unit array Chains[MAXCHAINS]
        player Owner
        boolean AGon = false
        STATS Get
        
        method onDestroy takes nothing returns nothing
            set .ChainEvery = 0
            set .P1X = 0
            set .P2X = 0
            set .P1Y = 0
            set .P2Y = 0
            set .P1Z = 0
            set .P2Z = 0
            call .Deattach()
            call .Deanchor()
            set .AGon = false
            set .head = null
            set .anchor = null
            set .AttachedTo = null
            set .Anchoredon = null
            call .Get.destroy()
            call .DestroyChain()
        endmethod
        
        method Realto255 takes real percent returns integer
            return RoundReal(percent*255)
        endmethod
        
        method GetDistance takes nothing returns real
            return SquareRoot(Pow(.P1X-.P2X,2)+Pow(.P1Y-.P2Y,2)+Pow(.P1Z-.P2Z,2))
        endmethod
        
        method Deattach takes nothing returns nothing 
            set .AttachedTo = null
            if (.Anchoredon == null and .AttachedTo == null)then
                call DestroyTrigger(.Follow)
                set .Follow = null
            endif
        endmethod
        
        method CheckStats takes nothing returns nothing
            if (.AGon == true) then
                call .Apply_AG()
            endif
        endmethod
        
        method TurnOff_AG takes nothing returns nothing
            set .AGon = false
        endmethod
        
        method Apply_AG takes nothing returns nothing
            local integer i = RoundReal(.GetDistance()/.ChainEvery)+2
            local integer BeginI = RoundReal(i*.Get.AGBeginPercent)
            local integer EndI = RoundReal(i*.Get.AGEndPercent)
            local real increment = (.Get.AGMaxPercent-.Get.AGMinPercent)/(EndI-BeginI)
            local real CP = .Get.AGMinPercent
            local integer var =1
            loop
            exitwhen var > i 
                if(var>BeginI and var<EndI)then
                    call SetUnitVertexColor(.Chains[var],255,255,255,.Realto255(CP))
                    set CP = CP+increment
                endif
                set var = var +1
            endloop
        endmethod
        
        method Alpha_Gradient takes real BeginFade,real EndFade, real MaxPercent, real MinPercent returns nothing
            set .AGon = true
            set .Get.AGMinPercent = MinPercent
            set .Get.AGMaxPercent = MaxPercent
            set .Get.AGBeginPercent = BeginFade
            set .Get.AGEndPercent = EndFade
            call .CheckStats()
        endmethod
        
        method Deanchor takes nothing returns nothing
            set .Anchoredon = null
            if (.Anchoredon == null and .AttachedTo == null)then
                call DestroyTrigger(.Follow)
                set .Follow = null
            endif
        endmethod
        
        method GetAnchoredOn takes nothing returns unit
           return this.Anchoredon
        endmethod
        
        method GetAttachedTo takes nothing returns unit
           return this.AttachedTo
        endmethod
        
        method Anchor takes ChainLink t, unit u returns boolean
            if .Anchoredon == null then
                set .Anchoredon = u
                if(.Follow ==null) then
                    set .Follow = CreateTrigger()
                    call TriggerRegisterTimerEvent(.Follow,0.03,true)
                    call SetTriggerStructA(.Follow,this)
                    call TriggerAddAction(.Follow, function Trigger_Move)
                endif
                return true
            else
                return false
            endif
        endmethod
        
        method SetZOffset takes real z returns nothing
            set .Get.ZOffset = z
        endmethod
        
        method SetYOffset takes real y returns nothing
            set .Get.YOffset = y
        endmethod
        
        method SetXOffset takes real x returns nothing
            set .Get.XOffset = x
        endmethod
        
        method Attach takes ChainLink t, unit u returns boolean
            if .AttachedTo == null then
                set .AttachedTo = u
                if(.Follow ==null) then
                    set .Follow = CreateTrigger()
                    call TriggerRegisterTimerEvent(.Follow,0.03,true)
                    call SetTriggerStructA(.Follow,this)
                    call TriggerAddAction(.Follow, function Trigger_Move)
                endif
                return true
            else
                return false
            endif
        endmethod
        
        static method create takes real X1, real Y1, real Z1, real X2, real Y2, real Z2, integer unitcode, real ChainEvery,player P returns ChainLink
            local ChainLink t= ChainLink.allocate()
            set t.P1X = X1
            set t.P1Y = Y1
            set t.P1Z = Z1
            set t.P2X = X2
            set t.P2Y = Y2
            set t.P2Z = Z2
            set t.unitcode = unitcode
            set t.ChainEvery = ChainEvery
            set t.Owner = P
            call t.CreateChain(t)
            set t.Get = STATS.create()
            return t
        endmethod
        
        method DestroyChain takes nothing returns nothing
            local integer i = 0
            loop
            exitwhen i > MAXCHAINS
                if(.Chains<i> != null) then 
                    call RemoveUnit(.Chains<i>)
                    set .Chains<i> = null
                endif
                set i = i +1
            endloop
            set .anchor = null
            set .Anchoredon = null
            set .head = null
            set .Owner = null
        endmethod
        
        method MoveChain takes real X1, real Y1, real Z1, real X2, real Y2, real Z2, real ChainEvery returns nothing
            local real dist = SquareRoot(Pow(X1-X2,2)+Pow(Y1-Y2,2)+Pow(Z1-Z2,2))
            local integer i = RoundReal(dist/ChainEvery)
            local integer var =2
            local real phi = Acos((Z2-Z1)/dist)
            local real theta = Atan2(Y2-Y1,X2-X1)
            local real cX = X1 + .Get.XOffset
            local real cY = Y1 + .Get.YOffset
            local real cZ = Z1 + .Get.ZOffset
            local unit u
            local integer T = 0
            set .P1X = X1
            set .P1Y = Y1
            set .P1Z = Z1
            set .P2X = X2
            set .P2Y = Y2
            set .P2Z = Z2
            set .ChainEvery = ChainEvery
            if(i &gt; MAXCHAINS)then
                debug call BJDebugMsg(&quot;CHAINLINKSYS: Failure, try increasing the CHAINEVERY or MAXCHAINS.&quot;)
                return
            endif
            loop
            exitwhen T&gt;MAXCHAINS
                if(T&gt;=i+2)then
                    if(.Chains[T]!=null)then
                        call RemoveUnit(.Chains[T])
                       set .Chains[T]=null
                    endif
                endif
                set T=T+1
            endloop
            if(.Chains[1] ==null)then
                set .anchor = CreateUnit(.Owner,.unitcode,.P1X,.P1Y,0)
                set .Chains[1] = .anchor
            endif
            set .anchor = .Chains[1]
            call SetUnitX(.anchor,cX)
            call SetUnitY(.anchor,cY)
            call UnitAddAbility(.anchor,&#039;Amrf&#039;)
            call SetUnitFlyHeight(.anchor,cZ,0)
            call UnitRemoveAbility(.anchor,&#039;Amrf&#039;)
            call SetUnitUserData(.anchor,this)
            loop
            exitwhen var &gt; (i)
                set cX = cX + .ChainEvery*Cos(theta)*Sin(phi)
                set cY = cY + .ChainEvery*Sin(theta)*Sin(phi)
                set cZ = cZ + .ChainEvery*Cos(phi)
                if(.Chains[var] == null)then
                    set u = CreateUnit(.Owner,.unitcode,cX,cY,0)
                    set .Chains[var] = u 
                endif
                set u = .Chains[var]
                call SetUnitX(u,cX)
                call SetUnitY(u,cY)
                call UnitAddAbility(u,&#039;Amrf&#039;)
                call SetUnitFlyHeight(u,cZ,0)
                call UnitRemoveAbility(u,&#039;Amrf&#039;)
                call SetUnitUserData(u,this)
                set var=var+1
            endloop
            if(.Chains[var] ==null)then
                set .head = CreateUnit(.Owner,.unitcode,.P2X,.P2Y,0)
                set .Chains[var] = .head
            endif
            set .head = .Chains[var]
            call SetUnitX(.head,.P2X + .Get.XOffset)
            call SetUnitY(.head,.P2Y + .Get.YOffset)
            call UnitAddAbility(.head,&#039;Amrf&#039;)
            call SetUnitFlyHeight(.head,.P2Z + .Get.ZOffset,0)
            call UnitRemoveAbility(.head,&#039;Amrf&#039;)
            call SetUnitUserData(.head,this)
        endmethod
        
        private static method CreateChain takes ChainLink t returns nothing
            local real dist = SquareRoot(Pow(t.P1X-t.P2X,2)+Pow(t.P1Y-t.P2Y,2)+Pow(t.P1Z-t.P2Z,2))
            local integer i = R2I(dist/t.ChainEvery)
            local integer var =0
            local real phi = Acos((t.P2Z-t.P1Z)/dist)
            local real theta = Atan2(t.P2Y-t.P1Y,t.P2X-t.P1X)
            local real cX = t.P1X + t.Get.XOffset
            local real cY = t.P1Y + t.Get.YOffset
            local real cZ = t.P1Z + t.Get.ZOffset
            local unit u 
            if(i &gt; MAXCHAINS)then
                debug call BJDebugMsg(&quot;CHAINLINKSYS: Failure, try increasing the CHAINEVERY or MAXCHAINS.&quot;)
                return
            endif
            set t.anchor =CreateUnit(t.Owner,t.unitcode,t.P1X,t.P1Y,0)
            call UnitAddAbility(t.anchor,&#039;Amrf&#039;)
            call SetUnitFlyHeight(t.anchor,t.P1Z,0)
            call UnitRemoveAbility(t.anchor,&#039;Amrf&#039;)
            set t.Chains[1] = t.anchor
            call SetUnitUserData(t.anchor,t)
            loop
            exitwhen var &gt; (i-1)
                set cX = cX + t.ChainEvery*Cos(theta)*Sin(phi)
                set cY = cY + t.ChainEvery*Sin(theta)*Sin(phi)
                set cZ = cZ + t.ChainEvery*Cos(phi)
                set u =CreateUnit(t.Owner,t.unitcode,cX,cY,0)
                call UnitAddAbility(u,&#039;Amrf&#039;)
                call SetUnitFlyHeight(u,cZ,0)
                call UnitRemoveAbility(u,&#039;Amrf&#039;)
                set t.Chains[var+2] = u
                call SetUnitUserData(u,t)
                set var=var+1
            endloop
            set t.head = CreateUnit(t.Owner,t.unitcode,t.P2X,t.P2Y,0)
            call UnitAddAbility(t.head,&#039;Amrf&#039;)
            call SetUnitFlyHeight(t.head,t.P2Z,0)
            call UnitRemoveAbility(t.head,&#039;Amrf&#039;)
            call SetUnitUserData(t.head,t)
            set t.Chains[var+2] = t.head
            call t.CheckStats()
        endmethod
        
    endstruct
    
    function GetChains takes ChainLink t returns group
        local group g = CreateGroup()
        local integer i = 0
        loop
        exitwhen i &gt; MAXCHAINS
            if(t.Chains<i> != null) then 
                call GroupAddUnit(g,t.Chains<i>)
            endif
            set i = i +1
        endloop
        if bj_lastCreatedGroup != null then
            call DestroyGroup(bj_lastCreatedGroup)
            set bj_lastCreatedGroup = CreateGroup()
        endif
        call GroupAddGroup(g,bj_lastCreatedGroup)
        call DestroyGroup(g)
        set g = null
        return bj_lastCreatedGroup
    endfunction
endlibrary</i></i></i></i></i>



I know that some people are new to vJass and don't like using it that much, here are a few "BJ" functions you can use.

JASS:
library CLSBJs requires ChainLinkSys

    function CreateChain takes real X1, real Y1, real Z1, real X2, real Y2, real Z2, integer unitcode, real ChainEvery, player P returns ChainLink
        local ChainLink new = ChainLink.create(X1,Y1,Z1,X2,Y2,Z2,unitcode,ChainEvery,P)
        return new
    endfunction
    
    function MoveChainLink takes ChainLink t, real X1, real Y1, real Z1, real X2, real Y2, real Z2, real ChainEvery returns nothing
        call t.MoveChain(X1,Y1,Z1,X2,Y2,Z2,ChainEvery)
    endfunction
    
    function MoveAnchor takes ChainLink t, real X1, real Y1, real Z1 returns nothing
        call t.MoveChain(X1,Y1,Z1,t.P2X,t.P2Y,t.P2Z,t.ChainEvery)
    endfunction
    
    function MoveHead takes ChainLink t, real X1, real Y1, real Z1 returns nothing
        call t.MoveChain(t.P1X,t.P1Y,t.P1Z,X1,Y1,Z1,t.ChainEvery)
    endfunction

endlibrary

Heres a test map: (Sorry it's so bland, running out of space o_O...)
 

Attachments

  • ChainLinkSys.w3x
    33.4 KB · Views: 248
Reaction score
86
Woops, my bad. No, didn't test that part, h/o I'll fix it now. Thanks for tip.

Screenshots are there, just didn't say "Screenshots." Most of the functions have extremely similar input as there Lightning counterparts. I'll add more documentation though.
 

Flare

Stops copies me!
Reaction score
662
constant integer MAXCHAINS = 500
You might wanna lower that a bit, since you're limiting your system to ~16 instances at a time (whether that's achieveable or not, I don't really know, but it is extremely low :p) - it's unlikely that anyone would ever need to go above 100 links per chain and that's still very unlikely because of lag and/or movement problems (sine unit movement starts screwing up around 150-200 units, doesn't it?)

Your documentation of the methods should explain what parameters the method takes (else you will find people just doing call
JASS:
var.Attach ()
and wondering why it doesn't work :p)

And I can't see where you are destroying your STATS instance, even though it's being created with each struct instance
 
Reaction score
86
>You might wanna lower that a bit, sine you're limiting your system to ~16 instances at a time (whether that's achieveable or not, I don't really know, but it is extremely low )

I realized it was really high XD. Especially when it started lagging on my computer after like two instances (My computer REALLY sucks.) <FIXED>

>Your documentation of the methods should explain what parameters the method takes (else you will find people just doing call data.Attach () and wonder why it doesn't work )

Ya, I'm fixing the documentation now. <DOING NOW>

>And I can't see where you are destroying your STATS instance, even though it's being created with each struct instance
XD, STATS was the last thing I put in so I forgot to destroy it, I'll fix that too. Because I intend to make a LITE version and Full version, (Lite includes basic features, Full includes basic features and Extra features), was just using it to sort things out.<FIXED>
 

Mike889

New Member
Reaction score
15
This system can be used for many things.

If you improve it, it can be a wonderfull thing ^^
It can even make creating a easier Meat Hook xD
Try to make the anchor units face the running side.
 
Reaction score
86
Yay! An opinion! XD I was like, "Oh no! Everyone is just saying whats wrong with it, not whats good about it o_O" Anyway, thanks :D

Improvement is coming soon! Originally flexibility and retractability would have been in the first release, but I wanted to release it before the weekend ended.

That's almost exactly what I based it on XD I combined two abilities together to make this. One was simply exactly like this, I was trying to make a "lightning" effect appear to one player (didn't know how to use GetLocalPlayer() at the time >.>) and I made something like this.

I'm not exactly sure what you mean, but thanks for reminding me o_O... I'm going to add functions for the facing angles of the units.
 
Reaction score
86
Ok people, I know I said the next version will be out soon... I lied. Debate tourney this saturday and preparation has never led me astray before. Most likely finished by Sunday. Some functions prepared for the new release: Retractability (YAY, automatic meat hook/ChainLink!)
Flexibility(YAY, Ive been told this doesnt lag on their computers but it sure as hell lags on mine. Anyway YAY!!!! Flexibility!!!)
 
Reaction score
86
Sorry 'bout that, it's been fixed in the latest function, which will be uploaded soon which is including:
-Flexibility
-Retractability
-Vector Arc Projection
-Maybe RGB gradient... Maybe...
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Howdy
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1

      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