YouTube2Text

[Part5] Roblox Combat System for Beginners | VFX — Transcript

by Senko · 3,968 words · 648 segments · language en · Watch on YouTube

Full transcript

  1. 0:00All right, welcome back. Um, today's
  2. 0:03video is going to be how to do visual
  3. 0:06effects or V effects for the combat. So,
  4. 0:10you'll notice that so far all we just
  5. 0:13have is a sort of a just a raw
  6. 0:17combat, which if you just play the game
  7. 0:19right now, you'll see that it's just
  8. 0:21really bare bones right now. There's
  9. 0:22nothing there's nothing impactful in the
  10. 0:25combat.
  11. 0:27So, in this video, I'm going to focus on
  12. 0:29how to make visual effects for when you
  13. 0:31hit things and for blocking and things
  14. 0:34like
  15. 0:36that. So, the first thing we want to do
  16. 0:39is make a local script in here called
  17. 0:42client effects, which the reason we want
  18. 0:45to make this in starter player is
  19. 0:48because we don't want this local script
  20. 0:50to refresh every single time the player
  21. 0:52dies. Because if we were to put this in
  22. 0:54starter character scripts, this client
  23. 0:57effect script would re
  24. 0:59um would refresh or reset every time the
  25. 1:02player responds. So, we'll keep this in
  26. 1:04starter play
  27. 1:06scripts. Let's just call this client
  28. 1:08effects. The comment and we're going to
  29. 1:10make a remote event in here
  30. 1:13called client effects. Like so.
  31. 1:17Now, I know a lot of other videos they
  32. 1:21they show you how to do effects on the
  33. 1:23server, which what I mean by that is
  34. 1:26let's open up our default hit effect.
  35. 1:30They tell you, okay, if we want like a
  36. 1:32particle, we just clone a particle like
  37. 1:36particle clone like so, and we emit or
  38. 1:40like clone emit like so. But this is
  39. 1:43actually really bad practice because the
  40. 1:45server doesn't like having a lot of
  41. 1:47strain put on it. So anything that's
  42. 1:52not going to be necessary on the server,
  43. 1:55we should always do it on the client.
  44. 1:58For example, particles or visual
  45. 2:01effects. So let's say for our default,
  46. 2:06which this is just a raw, you just hit
  47. 2:08the character or you hit the target and
  48. 2:10they get pushed back. So we can say
  49. 2:12replicated storage remotes the client
  50. 2:14effects fire all clients like
  51. 2:18so and then after that can go over here
  52. 2:21and we can actually listen for the fire
  53. 2:24client
  54. 2:25event. So let's go over here we get
  55. 2:29the client
  56. 2:32effects and then we can say
  57. 2:34remotesclient effects unclan event
  58. 2:36connect
  59. 2:37function. So you'll see any argument
  60. 2:41that you put in here will correspond to
  61. 2:44the arguments in
  62. 2:46here. Now there's two different fire
  63. 2:49clients, right? You have fire all
  64. 2:52clients and you have replicate
  65. 2:55storage.client fire client which is just
  66. 2:57a single specific client. So you see
  67. 3:00that there's automatically an argument
  68. 3:02here called
  69. 3:04player. So in this case you want to
  70. 3:07reference to the client you want to fire
  71. 3:09to. Let's just say uh attacker and then
  72. 3:14after that any variable following this
  73. 3:17would correspond to this. So let's say
  74. 3:19action, argument
  75. 3:22data. It's going to be table and we can
  76. 3:24call a
  77. 3:25string. Let's press
  78. 3:27enter. So this argument, the attacker
  79. 3:32argument doesn't correspond to any of
  80. 3:33these. it's already
  81. 3:35implied. But if we say blah blah blah
  82. 3:38and whatever table we want, these two
  83. 3:41arguments are going to correspond to the
  84. 3:43action and argument data. So I just want
  85. 3:46to note make that a note for you. But in
  86. 3:48this case, we need to fire all clients,
  87. 3:50which doesn't need the player argument
  88. 3:53inside of it because you're firing every
  89. 3:55single client for the player in the
  90. 3:57game. So we can
  91. 3:59say for the action we want it to be
  92. 4:03default hit effect. So default hit
  93. 4:08and then we want to add some arguments
  94. 4:09in
  95. 4:11here. So we want the client to know who
  96. 4:14exactly we're hitting. So we can say uh
  97. 4:17target is equal to target hit. So oops
  98. 4:22target hit. And then if we want a sort
  99. 4:24of like unique default hit effect, we
  100. 4:26can also use the weapon use string like
  101. 4:32so. Now in here we have to actually
  102. 4:37acknowledge these arguments. So we can
  103. 4:38say if action equals default hit, which
  104. 4:42is
  105. 4:43this, then we can get the argument data,
  106. 4:46which is the target, weapon used, and
  107. 4:47anything else we put in here.
  108. 4:51But for Yep. So let's keep it like
  109. 4:56that and
  110. 4:58then we'll just do it accordingly.
  111. 5:01However, I want to note
  112. 5:04that let's say you have a lot of client
  113. 5:06effects. You don't want to keep on
  114. 5:07duplicating it like this and just fill
  115. 5:09up your script with thousands of lines.
  116. 5:12So this is where modules comes into
  117. 5:13play. So like we've been doing
  118. 5:16previously like caching the modules,
  119. 5:18we're going to do the same for here.
  120. 5:20So let's go over here to modules and
  121. 5:22let's make a folder called
  122. 5:25client and then we can also because this
  123. 5:27is only be accessed by the
  124. 5:29client. This is going to be sort of like
  125. 5:31an organization type of um
  126. 5:34purpose and we can say effects or we can
  127. 5:38just remove this and say client effects
  128. 5:40like so. I'm going to do it this way so
  129. 5:43we don't have a lot of nested folders.
  130. 5:45And then we're going to make a module
  131. 5:46script called default hit.
  132. 5:51Okay. And then we want to say return
  133. 5:53function and our arguments. So let's say
  134. 5:56argument data
  135. 5:58any we go.
  136. 6:01Now we can go to our client effects and
  137. 6:03we can cache these.
  138. 6:06Now, I also want to note once again that
  139. 6:10the reason we're doing it for starter
  140. 6:11player scripts um in relation to to the
  141. 6:14modules, if we do it in starter
  142. 6:16character, it's going to refresh and
  143. 6:18it's going to reach all these effects
  144. 6:20and we don't want that. So, we only want
  145. 6:23it to cache it once and then do the
  146. 6:24effects
  147. 6:25accordingly. So, we can say local
  148. 6:28cacheed effects like
  149. 6:31so. And then we can require all these
  150. 6:34modules. So we can say local
  151. 6:40modules. And then after that we can go
  152. 6:42underscore, module and modules.client
  153. 6:45effects children
  154. 6:47do. If it's a module
  155. 6:49script then cast effects module.name is
  156. 6:53require
  157. 6:55module. Now we can say if cast effects
  158. 7:00or local found effect
  159. 7:03cast effects action. And if we found the
  160. 7:06effect, then we want to just run the
  161. 7:08function like
  162. 7:10so. So we can say found effect open
  163. 7:13parenthesis. And it just auto fills it
  164. 7:15in for you because it's a function.
  165. 7:17We're returning a
  166. 7:19function. Let's just call this default
  167. 7:22hit. And we can say argument data
  168. 7:24because that's the type of data that
  169. 7:26we're looking for.
  170. 7:28Now, I have in I have linked in the
  171. 7:30description all the resources you need,
  172. 7:32including sounds, things like that. So,
  173. 7:35I already put sounds into my replicated
  174. 7:37storage, the assets that sounds like
  175. 7:39that. But y'all can organize it however
  176. 7:41you want. But now you have the effects
  177. 7:45right here.
  178. 7:48Now we can go over here
  179. 7:51to this paste
  180. 7:53inside and then or no let's just go over
  181. 7:56here and go to assets and
  182. 7:59say effects like
  183. 8:01so let's name this the core effects
  184. 8:04because the core effects is going to
  185. 8:06contain like all of
  186. 8:08the all the effects that we should have
  187. 8:11like hit effect block and things like
  188. 8:13that.
  189. 8:15So remember that we have the arguments
  190. 8:17for target and weapon used. So we can
  191. 8:20say local target equals argument
  192. 8:22data target local weapon used
  193. 8:27equals argument data weapon
  194. 8:32used. So we say if target and weapon
  195. 8:34used
  196. 8:36then so we want to parent these
  197. 8:39attachments to the humanoid report. So
  198. 8:44we can say local root part equals target
  199. 8:47find for child humanoid root part. If
  200. 8:50root part then we'll clone this. So
  201. 8:54let's get the variables in here. Uh
  202. 8:57initiate the
  203. 9:00variables local
  204. 9:03assets and then we can say local
  205. 9:09um effects equals assets.x
  206. 9:14And now we can clone these
  207. 9:19attachments. So local clone
  208. 9:23equals effects docore effects do hit
  209. 9:26effect clone clone.parent equals root
  210. 9:29part. Now let's say if we want to add
  211. 9:32like a different type of hit effect, we
  212. 9:36can say if weapon used equals equals
  213. 9:37katana also weapon used equals fist.
  214. 9:41Then we can clone a head effect
  215. 9:43accordingly. For now, we're just going
  216. 9:45to use the normal head
  217. 9:46effect. Then once you parent it, we can
  218. 9:49emit the effects inside.
  219. 9:53for underscore comma effect or let's
  220. 9:56just do V and clone get descendants to V
  221. 10:00is a particle emitter then V
  222. 10:02emits and you see that V emit is a
  223. 10:06method of particle emitter so it just
  224. 10:08emits all of the
  225. 10:10um particles inside based on a certain
  226. 10:13count. So in here I have an attribute
  227. 10:15called emit count which we can say v get
  228. 10:18attributes
  229. 10:20oops v get attribute emit count like so
  230. 10:24and it's going to emit based on the
  231. 10:26number in
  232. 10:27each and there's also also something
  233. 10:30called emit delay. So we can say if v
  234. 10:33get
  235. 10:34attribute emit delay is greater than
  236. 10:38zero then test
  237. 10:40delay get attribute delay and then after
  238. 10:44that we can say emit
  239. 10:47otherwise we can just omit it normally.
  240. 10:52Now for debris service
  241. 10:55because we want to actually remove the
  242. 10:56effects after a certain amount of time.
  243. 10:58So, we say debris.
  244. 11:00Make sure you're outside of the loop.
  245. 11:03And we can say debris, add item, clone,
  246. 11:05comma, let's say one and a half seconds.
  247. 11:08Give a little bit time for it
  248. 11:11to be good for our default hit.
  249. 11:16So, if we play the game
  250. 11:23and we punch, we have nothing yet. But
  251. 11:25if we punch, hit on me. You see that the
  252. 11:29effects are emitting like so. And
  253. 11:31because we haven't added any effects for
  254. 11:33the block yet, doesn't work. But you see
  255. 11:36that this is the normal hit effect. But
  256. 11:38if he's walking, there's no
  257. 11:41effect. But now we also want to
  258. 11:44[Music]
  259. 11:46add we want to add
  260. 11:50sounds. So let's make another module
  261. 11:52called
  262. 11:54sound. Like
  263. 11:56so. Now in here we can get rid of
  264. 11:59these and we can go back to here and
  265. 12:03fire all clients again. But in this case
  266. 12:05we want to call the sound as it
  267. 12:07corresponds to this client effect here.
  268. 12:10And then we can say sound
  269. 12:14name is equal to the hit sound. So, if
  270. 12:17you go to
  271. 12:18sounds like that, we can open this right
  272. 12:23here and we can say
  273. 12:25uh let's say
  274. 12:27fist do hit dot and whatever the combo
  275. 12:32string is. So, we need to actually go
  276. 12:33over here to
  277. 12:35fist and we need to pass in the combo
  278. 12:39string.
  279. 12:41So we want to say true screen
  280. 12:45number like so and if we get a default
  281. 12:48we can add in the combo string number.
  282. 12:52So combo string number let's just call
  283. 12:54that
  284. 12:55number. Now we can say dot dot dot two
  285. 13:00string combo string number and we want
  286. 13:02to parent it to the target hit humanoid
  287. 13:07part like so.
  288. 13:10So now that will play sounds,
  289. 13:13but we need to actually reference the
  290. 13:15sounds in the mouse rule.
  291. 13:18So
  292. 13:20the fist hit is we're going to use the
  293. 13:22same type of thing we did for the
  294. 13:25animations when we loaded them, which is
  295. 13:27this. So we can just go over here and
  296. 13:30then we can just copy that type line of
  297. 13:32code
  298. 13:34and then we can go to sound
  299. 13:38and we want sound
  300. 13:39name equal parent equals argument data.
  301. 13:45No,
  302. 13:46if sound name and parent, then
  303. 13:51let's make that should be a string and
  304. 13:53this should
  305. 13:54be a base part or it's fine. We'll just
  306. 13:59keep that empty because we don't know
  307. 14:00what it's going to be. But we'll just do
  308. 14:03base part question mark because we don't
  309. 14:04know if it's actually going to be bass
  310. 14:06part. And then we can say local found
  311. 14:10sound equals no.
  312. 14:15Or we don't even need to do that. Let's
  313. 14:17cash all these sounds in first. So local
  314. 14:21cached sounds like
  315. 14:24so. And then for underscore,
  316. 14:27sound in assets sounds get descendants
  317. 14:32too. And we can do this. If sound is a
  318. 14:35sound
  319. 14:37then full name sound get full name and
  320. 14:40then cash
  321. 14:43sounds.name equal sound like
  322. 14:47so
  323. 14:49equals cash sound name if found sound
  324. 14:53then local clone found sound clone
  325. 14:56clone.p parent equals the parent we say
  326. 14:59clone
  327. 15:01play and then we can say task.lay delay
  328. 15:04found time length because we want it to
  329. 15:06remove after a certain amount or we can
  330. 15:09just say yeah this this will be fine. We
  331. 15:12can do test delay or we can do debris
  332. 15:14add item but I'm just going to do test
  333. 15:17for now.
  334. 15:19So clone
  335. 15:21destroy like
  336. 15:25so. Now we can get out of this
  337. 15:28script. Close out of this. Go back to
  338. 15:32default. So now we should have a fist
  339. 15:36sound. So play the
  340. 15:39game. Walk up and we hit him.
  341. 15:43It's weird. There's no sound.
  342. 15:46Okay, let's see. Let's go over here
  343. 15:50to our
  344. 15:54sound. Let's say let's do print sound
  345. 15:58name,
  346. 16:00parent. Um, let's see. Uh, oops. I need
  347. 16:05to change this to full name instead of
  348. 16:07sound
  349. 16:08name. And now if we
  350. 16:15play sounds as you can
  351. 16:19see like
  352. 16:23so. And then now we want to add a swing
  353. 16:27sound. So I have a bunch of swing sounds
  354. 16:29that I have for y'all.
  355. 16:31And similarly, we can go to default and
  356. 16:33just clone this line of code and say
  357. 16:36fist. Like that.
  358. 16:40Or let's not do this because this is in
  359. 16:41the default um the default function
  360. 16:44which means you already hit the target.
  361. 16:47So we want to go to fist and we want to
  362. 16:49go to when the hit box starts
  363. 16:53like so. So
  364. 16:56fist. Two string swing number two screen
  365. 16:59number.
  366. 17:00You want to parent it to the character
  367. 17:03humanity report.
  368. 17:06Now if we play the game, you see
  369. 17:10that your swing sounds
  370. 17:18like so. Let's remove the prints now
  371. 17:21since we debug
  372. 17:23that. Remove
  373. 17:26it. And that's going to be it for the
  374. 17:29default effect or the visual effects at
  375. 17:32least. Now we want to actually do the
  376. 17:35knockback.
  377. 17:37So we're going to use something called
  378. 17:38body
  379. 17:39velocity. So local knockback
  380. 17:44velocity body
  381. 17:46velocity knockback velocity to max force
  382. 17:50equals 44 comma 0a 44. So, the reason we
  383. 17:55do this and we set everything else 44
  384. 17:59but the Y zero is because we don't want
  385. 18:02the knock back to be affecting how the
  386. 18:03character moves in the air. We just
  387. 18:06wanted to knock them back, not up or
  388. 18:08not, anything like that. And now we'll
  389. 18:10set the velocity velocity
  390. 18:13equals character oops dot attacker human
  391. 18:19part C frame. vector
  392. 18:22times uh let's say 10 or let's do five
  393. 18:27or six and we want to pair
  394. 18:30it character equals target hits humanoid
  395. 18:35report like so we want to add debris so
  396. 18:41it removes the knock back after a
  397. 18:43certain amount of
  398. 18:45time knockback comma.3 like So,
  399. 18:50and we want to make sure that all these
  400. 18:52dummies are unanchored as well.
  401. 18:56So, we want the humanoid report to be
  402. 18:58unanchored.
  403. 19:02Like so.
  404. 19:04Now, if you play the game, you'll see
  405. 19:06that they get knocked
  406. 19:18back. Okay, let's make this knock back a
  407. 19:21little bit more intense. So, let's say
  408. 19:23times 10 and we'll say two like so. Or
  409. 19:27we can say
  410. 19:2813. And then we can also since we
  411. 19:31knocked the car the target back, we want
  412. 19:32to push the player forward a little bit
  413. 19:34too to make it smoother. So we'll go
  414. 19:36over here and we'll say pull
  415. 19:41velocity like so. And we want to make
  416. 19:44this around
  417. 19:4510. We want to parent it to the actual
  418. 19:48character or the attacker's human
  419. 19:51part. Like
  420. 19:57so. Now if we put
  421. 20:06again, see he gets pushed back. Uh I'm
  422. 20:10going to give him infinite health for
  423. 20:11now. So we don't need to worry about him
  424. 20:13dying on us. So we just say max health
  425. 20:16999 all the way. And then we can say
  426. 20:19health all the way to 99 as
  427. 20:22well.
  428. 20:24So all right. And
  429. 20:27then let's go ahead and make this
  430. 20:29duration a bit shorter. And we'll that
  431. 20:31should be good. Let's make this around
  432. 20:3411 or 12 and 8
  433. 20:41n. Let's say that this is going to be
  434. 20:45our last
  435. 20:47hit, which is our block break in this
  436. 20:50case. So we can
  437. 20:51say add another variable here called
  438. 20:54last hit boolean.
  439. 20:56There's going to be a boolean
  440. 20:57value. We can go to fist
  441. 21:02and we can
  442. 21:05say or
  443. 21:07constant where is it? Our true swing
  444. 21:10number. True screen
  445. 21:12number= 5 and true or false. So if it's
  446. 21:16the last hit then we do true otherwise
  447. 21:19it's going to be
  448. 21:20false. Now we go to default.
  449. 21:24We can say if last
  450. 21:28hit then else. So if it's the last hit
  451. 21:31then we want to do a really far knock
  452. 21:33back. Otherwise we'll do the normal
  453. 21:35velocity. So let's go over here and
  454. 21:38we'll say make this like
  455. 21:4040. Like so.
  456. 21:45And then now if you play the game
  457. 21:52so that he gets knocked back far on
  458. 21:54last.
  459. 21:57Let's make him knock back a little bit
  460. 21:58further so we can go to default and make
  461. 22:00it like 60
  462. 22:01instead. And if you play the game,
  463. 22:07you will see that he gets knocked back
  464. 22:08even
  465. 22:11further like
  466. 22:13so. Now we've officially finished with
  467. 22:16the defaults hit type finally so we can
  468. 22:20get out of that script and then we can
  469. 22:22go to our block.
  470. 22:26Now let's just copy and paste all of the
  471. 22:28things that we want here. So we want
  472. 22:31these things right here the sound and
  473. 22:33yeah. So we can say
  474. 22:37that and we also want the combo string
  475. 22:40number in here too. Let's go ahead and
  476. 22:43copy
  477. 22:49this. Let's add these all back into here
  478. 22:54like
  479. 22:55so. And then now we can go right here
  480. 22:59and we can say
  481. 23:00fist.blocked like
  482. 23:03so.blocked
  483. 23:04dot comma string number. So that's fine.
  484. 23:07And we can say block
  485. 23:08effect like so.
  486. 23:14So we can duplicate the default hit and
  487. 23:15change this to
  488. 23:17blocked. Then over here we can just
  489. 23:19clone the blocked like so. And that's
  490. 23:22going to be it for the
  491. 23:25block. Hit start. So the a common thing
  492. 23:28you'll notice when you're scripting
  493. 23:29these sort of client effect things is
  494. 23:32that it's really sort of just value
  495. 23:34changing to an extent because you see
  496. 23:37here we just only need to change one
  497. 23:39thing and that constitutes the whole
  498. 23:42visual portion of the block
  499. 23:44effect. Same with default hit. So yeah,
  500. 23:48I just wanted yall to note
  501. 23:50that. And then we want to also change
  502. 23:53this to block effect so we can match it
  503. 23:56up with the actual action.
  504. 24:00And if we play the game, we should have
  505. 24:03a
  506. 24:07block. Oh, let's see what happened here.
  507. 24:11A ve attribute emit delay.
  508. 24:15Ah, I see. Okay. A ve attribute emit
  509. 24:18delay and
  510. 24:22greater than zero then so if the if the
  511. 24:25mid delay is there then we check if it's
  512. 24:27greater than zero otherwise we do
  513. 24:29nothing so let's do the same thing for
  514. 24:32the default hit so it doesn't error as
  515. 24:34well
  516. 24:37we go
  517. 24:45now you see we have the hit effects or
  518. 24:49the block effects
  519. 24:52Now, we also want to do the block
  520. 24:54sounds.
  521. 24:57So, we'll see that blocked. And we have
  522. 25:01these sounds right here,
  523. 25:04like so.
  524. 25:07So, we want fist.block dot combo string
  525. 25:11number.
  526. 25:15Okay, I see. So we want to randomize
  527. 25:17these instead of just doing the comma
  528. 25:19string number. So we can say local
  529. 25:22random
  530. 25:23number
  531. 25:26random one comma 4 because that's the
  532. 25:29amount
  533. 25:30here. And then we can just say two
  534. 25:32string random number.
  535. 25:36So that should be good. Two string
  536. 25:38random number. I'm going to target it so
  537. 25:41that
  538. 25:51There we go. That works. So, we have the
  539. 25:54sound. One, two, three,
  540. 25:57four. And now, now that's done, we want
  541. 26:00to do the actual block break effect.
  542. 26:03So, let's go ahead and clone this again.
  543. 26:08And we can call this block
  544. 26:12break. And let's go into our hit
  545. 26:15effects and we can say we can duplicate
  546. 26:19or copy and paste these effects
  547. 26:22here and then go over here to block
  548. 26:25break. So we want to have a sound in
  549. 26:27here and it should be called just block
  550. 26:30break and then parent it to target hit
  551. 26:33and block break like so.
  552. 26:37Now we can go to our visual effect
  553. 26:40and I have an effect in here for the B
  554. 26:44break called dizzy effect. So let's
  555. 26:47clone this in here. Now in this case
  556. 26:49it's not a value changing. We're
  557. 26:50actually scripting something new. So
  558. 26:52we'll local clone effects dizzy effect
  559. 26:57clone clone parent equals
  560. 27:01the
  561. 27:02target. And then we can we want to weld
  562. 27:05this So we can say local
  563. 27:10weld weld part O. We want to weld the
  564. 27:14target's
  565. 27:15head to this
  566. 27:18part. Parent equals clone.
  567. 27:23Like so.
  568. 27:25Let's make this all work before we
  569. 27:27actually clone the dizzy effect.
  570. 27:30Now that the world works, we can
  571. 27:35have a duration on it. So here we can
  572. 27:37say local duration
  573. 27:40number argument data
  574. 27:44duration. We need to go over here and
  575. 27:46also add duration in here too.
  576. 27:50Oh wait, we just changed this. Okay,
  577. 27:54we'll just rename this to block break
  578. 27:55and we'll name this to block effect.
  579. 27:56It's
  580. 27:57fine. There we go.
  581. 28:02Now we have we want to add a duration
  582. 28:04value in here. So duration is equal to
  583. 28:071.5
  584. 28:11like so cuz we want it to match with
  585. 28:13this duration that we already listed.
  586. 28:17Now we can say test set duration comma
  587. 28:20function and we want to make it smoothly
  588. 28:23transition out. So instead of destroying
  589. 28:25it, we want to actually disable the
  590. 28:28effects.
  591. 28:30So in clone get children do or get
  592. 28:34descendants
  593. 28:38if effect is a particle emitter then
  594. 28:41effect enable equals false like so and
  595. 28:44then we want to destroy it after maybe
  596. 28:46like one and a half
  597. 28:47seconds. Give it a little bit time for
  598. 28:49it to fade out.
  599. 28:53So now if we play the
  600. 28:55game, you'll see that we have our block
  601. 28:58effect or a block break
  602. 29:02effect like so.
  603. 29:10And it fades away smoothly too. And then
  604. 29:14also we want to clone after we finish
  605. 29:16the dizzy effect, we want to clone the
  606. 29:17actual block effect now. So, we can go
  607. 29:20over here and we can go to default
  608. 29:25hit and just clone this or copy and
  609. 29:28paste this
  610. 29:30part. So, we can go in here and we can
  611. 29:33make this a different thread. And there
  612. 29:35we go. And we can change this to block
  613. 29:40break. Now, if we play the game, we
  614. 29:43should als we have should have a
  615. 29:45combination of the dizzy effect and the
  616. 29:47block break effect.
  617. 29:52like so.
  618. 30:00And now you see him auto blocking after
  619. 30:02we finish the combo.
  620. 30:05And yeah, that's it for that. And if we
  621. 30:08go over here to just a normal hit dummy,
  622. 30:13we'll see just a normal hit effect.
  623. 30:18So yeah, that's going to be pretty much
  624. 30:22it for this episode. So just a brief
  625. 30:26wrap-up, what we did today was we
  626. 30:30created a client effects
  627. 30:33um local script that calls off of a
  628. 30:35remote event, which is client event
  629. 30:37client effects. And then we cached all
  630. 30:40the modules called client effects in
  631. 30:42here and we called them whenever the
  632. 30:45remote event was fired.
  633. 30:48So once again noting the usefulness for
  634. 30:50this, we don't need
  635. 30:51to have over a thousand line scripts in
  636. 30:54here by just duplicating this and this
  637. 30:56over again. We just have a single
  638. 30:59function or a single line calling the
  639. 31:02function and which corresponds to these.
  640. 31:06So yeah, that's pretty much going to be
  641. 31:08the end of the episode. The next episode
  642. 31:10is going to
  643. 31:11be on, I believe, movements. It's either
  644. 31:15going to be on a movement system, which
  645. 31:17is sprinting and dashing,
  646. 31:20or adding different weapons like the
  647. 31:22katana, a sword, a dagger, and things
  648. 31:25like that. So yeah, hope you enjoyed it.

About this transcript

This page contains the full transcript of [Part5] Roblox Combat System for Beginners | VFX by Senko, generated from the public captions YouTube serves with the video. The transcript has 3,968 words across 648 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.