YouTube2Text

[Part2] Roblox Combat System for Beginners | Playing Animations — Transcript

by Senko · 3,669 words · 616 segments · language en · Watch on YouTube

Full transcript

  1. 0:00All right. So, in this video, I'm going
  2. 0:02to be showing youall how
  3. 0:04to load and play animations as well as
  4. 0:07handle connections for animations so
  5. 0:09they don't cause any memory leaks and
  6. 0:11things like that, which is going to be
  7. 0:13handled all in animation modules. And
  8. 0:16yeah, so at the end of the video, it
  9. 0:18should look something like this, where
  10. 0:20you play the animations and it slowly
  11. 0:22does damage to the player with the
  12. 0:24hitbox actually relying on an a marker
  13. 0:28event. So you see that belt hit only
  14. 0:31starts when it reaches a certain key
  15. 0:33frame like so.
  16. 0:36So yeah, hope you enjoy the
  17. 0:38video. All right, so today I'm going to
  18. 0:41be showing you how to play animations
  19. 0:43for the comment
  20. 0:44system. So in the description I'll have
  21. 0:47linked a animation dummy for how to use
  22. 0:50animations from for the fist combat and
  23. 0:53later we can add different animations
  24. 0:55for um let's say a sword or katana in
  25. 0:57the future. which I'll show you on later
  26. 0:59videos. But let's go to avatar and
  27. 1:03animation
  28. 1:04editor. And then we can go to three dots
  29. 1:07and load. And we can go to
  30. 1:09L1. Let's remove this for now. All
  31. 1:12right. So, we play the animation. What I
  32. 1:15want to note for y'all is animation
  33. 1:17events, which what they are is they're a
  34. 1:21certain key frame that you can detect
  35. 1:24when the animation has reached that and
  36. 1:27use that in your
  37. 1:29script. So this going to be mainly used
  38. 1:31for when you want to start detecting the
  39. 1:32hit
  40. 1:33box. So if we go to the frame where we
  41. 1:36want it to start detecting, we can click
  42. 1:38on the whole key frame, right click, and
  43. 1:40do add animation event. And let's call
  44. 1:43this hit. This is just for you to know
  45. 1:46what event what the event is called. So
  46. 1:48you save. And now we can publish to
  47. 1:51Roblox. Oh, whoops. Let's
  48. 1:53go. All
  49. 1:56right. Let's do this. Let's right click
  50. 1:59and
  51. 2:03hit. Now we can do publisher blocks. and
  52. 2:07you can save it as you and click on this
  53. 2:11little copy thing right here. So, we
  54. 2:14copy it. Now, if we go to our assets
  55. 2:17folder that we made, make a folder
  56. 2:18called
  57. 2:20animations. Let's get out of this real
  58. 2:26quick. Animations. And we can duplicate
  59. 2:29this and make a folder called
  60. 2:32fist. Now, we can create an animation
  61. 2:35here. And we can copy or paste the
  62. 2:38animation ID that we created. We can
  63. 2:40call this L1, which is just for um your
  64. 2:43left click one. And let's do the same
  65. 2:46thing for the rest of the animations. So
  66. 2:48we go to
  67. 2:50L2 right here.
  68. 2:54So we want to start detecting around
  69. 2:56here.
  70. 2:59So we can add in mission event pits. So
  71. 3:02what you should note is that whatever
  72. 3:04you name your event name should also
  73. 3:07correspond the to the name that you call
  74. 3:09in the script. So I'll show youall what
  75. 3:11that means later but we
  76. 3:13publish
  77. 3:15copy and we can duplicate this and paste
  78. 3:18it.
  79. 3:30All right. Now that we've finished um
  80. 3:34adding all the animations in, we can go
  81. 3:35to our fist script and we can actually
  82. 3:38start playing the animation. So, first
  83. 3:41off, what we want to do is let me add a
  84. 3:43comment here called uh playing
  85. 3:46animations. Now,
  86. 3:49ignoring the part where you want to
  87. 3:51cycle through the swings one through
  88. 3:53five, I'll show you how to play like a
  89. 3:54basic animation. So, here we can call
  90. 3:57for the humanoid like so.
  91. 4:02humanoid is equal to character.h
  92. 4:04humanoid. So the reason we can do dot is
  93. 4:06because we already did find first child
  94. 4:08here. So and then we can do local
  95. 4:12animator animator equals
  96. 4:15humanoidan animator load
  97. 4:19animation or no humanoid.animator like
  98. 4:22so. So this is going to be used to
  99. 4:24actually load the animation. So we can
  100. 4:27say local animation equals animator load
  101. 4:31animation and then let's just say L1 for
  102. 4:34now. So we go to assets.an animations.f
  103. 4:37this 01 like so. And then always
  104. 4:40remember to actually start playing the
  105. 4:42animation like
  106. 4:44so. Now if we play the
  107. 4:46game, we can wait for this to
  108. 4:49[Music]
  109. 4:51load. So you see that okay the animation
  110. 4:54is actually playing now which is good.
  111. 4:56However, we actually want to cycle
  112. 4:58through
  113. 4:59this and we also want to
  114. 5:03uh make the attacking actually
  115. 5:05correspond with how long the animation
  116. 5:07is. So, we can let's add a annotation
  117. 5:10type on here called animation
  118. 5:12track and we can print the
  119. 5:17animation.length which essentially is
  120. 5:20how long the animation is. Yeah, the
  121. 5:21length of the animation.
  122. 5:25So, let's go ahead and
  123. 5:28play 4. All
  124. 5:38right.
  125. 5:39So, it prints out zero for animation
  126. 5:45length. All right. So, the reason for
  127. 5:47that is because sometimes animations
  128. 5:50don't load immediately once you call
  129. 5:53load animation.
  130. 5:55So a way to get uh a way to get by that
  131. 5:57is to actually load the animations
  132. 6:00beforehand. So how we can do that is we
  133. 6:03can make an animations module in the
  134. 6:06core for the
  135. 6:07character like so. So we can call this
  136. 6:13animations.
  137. 6:15Now we can go to our tool that we
  138. 6:20created called fist and add a script in
  139. 6:22here. called uh tool loader. You can
  140. 6:26call this whatever you want, but this is
  141. 6:27mainly going to be for us loading and
  142. 6:30the animations beforehand.
  143. 6:33So if we play the
  144. 6:35game and we
  145. 6:37wait, we we recall that the fist tool is
  146. 6:42a part of the backpack, which if we
  147. 6:45trace it back, it's going to be the
  148. 6:46player, which is the parent.
  149. 6:50So knowing this we can call let's call
  150. 6:52tool
  151. 6:53loader local
  152. 6:56player equals script.p
  153. 7:01parent.parent and after that we can
  154. 7:05say print player dot print
  155. 7:10player.name. So you see that it actually
  156. 7:12prints out my player. So this is useful
  157. 7:15because we can now
  158. 7:16do
  159. 7:18local character equals player character.
  160. 7:22Oops. Let's do this player player.
  161. 7:26character or player character added.
  162. 7:28Wait. So if the player character is
  163. 7:30there, then we set it to player.
  164. 7:32character or we wait for the character
  165. 7:33to be
  166. 7:34added. And now we can wait for the core
  167. 7:37folder. Character wait for child core,
  168. 7:42maf.u. The reason we do math huge is
  169. 7:44because we don't want the script to time
  170. 7:46out as I showed before. So we want it
  171. 7:49because we know the core folder is going
  172. 7:50to be there. So it is a wait until it
  173. 7:53actually is present in the
  174. 7:55character. Now we can go to animations
  175. 7:57module core
  176. 7:59folder animations. And always remember
  177. 8:02to require this or it won't
  178. 8:04work. So now we can just say
  179. 8:08module.loaded
  180. 8:09animations. See what it prints out. Now
  181. 8:13we can do warn animations module like
  182. 8:16so. So now if we play the game you can
  183. 8:20see it warns it and then we can see
  184. 8:23loaded animations is right
  185. 8:26there. So in here we want to actually
  186. 8:29load the
  187. 8:30animations. So let's make a function in
  188. 8:33here called
  189. 8:35function
  190. 8:37module.load animals like so. And then
  191. 8:41now we want to say animation
  192. 8:42modules.load
  193. 8:46or yeah animation.load enoms
  194. 8:51and we can say what folder we want it to
  195. 8:53load. So in this case we want to load
  196. 8:55the fist animations.
  197. 8:59So let's go over here. We want to get
  198. 9:01the replicated
  199. 9:03storage like so. We want to get the
  200. 9:06assets
  201. 9:09folder and we want to get the animations
  202. 9:11folder or not. We don't need to do that
  203. 9:14honestly. So we can do animations.fist
  204. 9:16like so. And then we can say
  205. 9:21folder and then let's move this up here
  206. 9:24for organization
  207. 9:27purposes. We can loop through this whole
  208. 9:30folder and load all the animations.
  209. 9:33So the way I want the player to be able
  210. 9:35to play the animations is something like
  211. 9:38this. So in order to play it, we can say
  212. 9:40module.loaded
  213. 9:42animations your fist.l1 and we can say
  214. 9:45play like
  215. 9:47so. Or let's say we have like it's
  216. 9:50nested inside or like fist and then we
  217. 9:52can make a swings folder like so. We can
  218. 9:55say
  219. 9:56fist.l1 play which I'll I'll probably do
  220. 10:00this instead. So we'll do it like that.
  221. 10:02So in order to make this work we have to
  222. 10:05loop through the animations first
  223. 10:07underscore an animom and folder get
  224. 10:10descendants
  225. 10:12too. Now if animation is an actual
  226. 10:16animation we want to first off get the
  227. 10:19full name of the animation. So what I
  228. 10:21mean by full name is if we go to output
  229. 10:24we do print gamer replicated
  230. 10:26storage.etsan animation this.01
  231. 10:29L1 get full name. We can see it prints
  232. 10:32out the whole dot
  233. 10:35plethora which we want it to look
  234. 10:37exactly like that. So we can say local
  235. 10:40full name equals anom get full name and
  236. 10:45we want to actually filter the string so
  237. 10:47it doesn't include the replicated
  238. 10:48storage part. So we can do
  239. 10:53uh full name equals forname
  240. 10:56splits replicated
  241. 10:59storage assets
  242. 11:02animations like
  243. 11:06so and then
  244. 11:11yep and then we can say print full name
  245. 11:13just to see what it actually is now. So,
  246. 11:16if we were to play the
  247. 11:23game, we can see that. Okay, there we
  248. 11:26go. It actually prints out this part. If
  249. 11:28it starts out 03, so that's good. But
  250. 11:31there's also a dot right here
  251. 11:33still. So, we go back over here and we
  252. 11:36change it to dot. Now, we can say print
  253. 11:38full name two. Or we can actually set
  254. 11:41this
  255. 11:42to two like so. And print full name.
  256. 11:46So you see that? Okay, nice. This is
  257. 11:47what we want. We want it to print out
  258. 11:48the fist swings 0 L 0 L 0 L 0 L 0 L 0 L
  259. 11:490 L 0 L 0 L 0 L1
  260. 11:51L2345. And then we can go over here and
  261. 11:55say module.loaded
  262. 11:58animations full name is equal to our
  263. 12:00humanoid load
  264. 12:02animation which we need to actually
  265. 12:04assert right
  266. 12:06here. So we can say local
  267. 12:09humanoid humanoid equals character
  268. 12:12childhoid map. because we know the
  269. 12:14humanoid is going to load anyways.
  270. 12:17And then we'll make a humanoid an
  271. 12:19argument
  272. 12:20here. And same over here we can say
  273. 12:23humanoid
  274. 12:25humanoid. Now we can wait for the
  275. 12:30animator or actually instead of doing
  276. 12:33humanoid we can say local
  277. 12:36animator equals humanoid.animator.
  278. 12:42There we go. Get our animator in
  279. 12:47there. And then animator, load
  280. 12:54animation. Make sure to not ignore the
  281. 12:56case sensitive parts. And then we can
  282. 13:04say module.loaded loaded animations full
  283. 13:07name is equal to animator load animation
  284. 13:12minimum. And now after that once the
  285. 13:16animations are all loaded we can say
  286. 13:18okay our tool which is
  287. 13:20script.parent. So local tool equals
  288. 13:27script. And we say tool set
  289. 13:31attribute tool loaded comma true. So the
  290. 13:34reason I want to do tool loaded and set
  291. 13:37that attribute to true is because in
  292. 13:39here we can actually wait for the tool
  293. 13:41to actually be loaded before we can
  294. 13:43attack which is just sort of like a
  295. 13:45prerequisite sanity check to make sure
  296. 13:47the animations are all fully loaded and
  297. 13:49well. So in here we can say if not found
  298. 13:53tool get attribute tool loaded then
  299. 13:55return n. So it's just going to return
  300. 13:57if the tool is not actually loaded.
  301. 14:01Now, if we play
  302. 14:04the
  303. 14:05game, well, let's check for the
  304. 14:08animation. Let's print out all of our
  305. 14:10loaded
  306. 14:12animations. Dot
  307. 14:15loaded
  308. 14:17items. Animations. Here we
  309. 14:21go. Now, if we play the
  310. 14:25game, we can see that nice. All of the
  311. 14:28animations are fully loaded.
  312. 14:32So the reason this is good, right, is
  313. 14:34because if we want to make another
  314. 14:35katana and we call this like katana or
  315. 14:37something tool loader, we can actually
  316. 14:40just load the katana animations as well,
  317. 14:42which is
  318. 14:44great.
  319. 14:46So we go to our fist and then we can
  320. 14:49actually get the animations folder from
  321. 14:50the core
  322. 14:53folder. So local core folder equals
  323. 14:57character core local animations
  324. 15:01module. Require corefolder.an
  325. 15:04animations. Now, if we do print
  326. 15:06animations module
  327. 15:08here, let's remove it from
  328. 15:10here. And then let's exit out of that
  329. 15:12script, too, cuz that's pretty much all
  330. 15:14we need for this
  331. 15:16part. And if we play the game, you'll
  332. 15:19see that if we attack, it should print
  333. 15:22out the animations module.
  334. 15:26As you see, loaded animations has all of
  335. 15:29our
  336. 15:30fist. So, finally, we can actually play
  337. 15:33the
  338. 15:35animations. So, we can say animation
  339. 15:37modules fist. L1 play. We can also print
  340. 15:42the length of it
  341. 15:46too. That length like
  342. 15:48so. And if we play the game, wait for it
  343. 15:52a little bit.
  344. 15:54Oh, fist.
  345. 15:56screen. Oh. Uh, whoops. I forgot to
  346. 16:00reference loaded animation. So, we have
  347. 16:02to go loaded animations. And then we can
  348. 16:04actually play it.
  349. 16:09And you see that we don't have the issue
  350. 16:11with the zero anymore for it not
  351. 16:13loading. And it it actually prints out
  352. 16:14the length.
  353. 16:16Uh, so for the load animations part, I
  354. 16:18just messed it up because we actually
  355. 16:20loaded the animations in this table
  356. 16:22that's in here.
  357. 16:25So now that that works, we can also
  358. 16:28detect for
  359. 16:31the current swing that we're on now. So
  360. 16:33we'll make a folder in the fist
  361. 16:39called
  362. 16:41configuration. And this will just detect
  363. 16:43our last swing, our um last combo that
  364. 16:47we've done and things like that.
  365. 16:49So in here actually no we don't even
  366. 16:52need to worry about that. All right. So
  367. 16:55we got make an int value called last
  368. 16:57swing and we can make another value
  369. 17:00called swings or swing number like
  370. 17:04so.
  371. 17:06Now let's go over here
  372. 17:08and add our tool in here as
  373. 17:13well. There we go.
  374. 17:16And then
  375. 17:18now oh yeah another sanity check we can
  376. 17:21do if tool.name is not equal to
  377. 17:23script.name then return. So if the
  378. 17:25actual tool that's uh passed in the
  379. 17:27argument isn't equals uh the fist then
  380. 17:29we just return
  381. 17:31n. But now we can say local
  382. 17:34configuration folder equals tool finder
  383. 17:39configuration and not configuration then
  384. 17:41return end. Oops.
  385. 17:48Now we can say local last swing. This
  386. 17:52initial or yeah reference all of our
  387. 17:55values. Local screen
  388. 17:59number screen number.
  389. 18:04Now looking going back to our modules in
  390. 18:07here the shared data that we can
  391. 18:11have we can say module
  392. 18:15dot
  393. 18:18squ cool down or not even swing cool
  394. 18:22down we can say combo cool down is
  395. 18:24equals to 1.5
  396. 18:25seconds. So after the whole five hit
  397. 18:28combo is done, we want to add a cool
  398. 18:31down to how long the player can actually
  399. 18:33wait before they do a full combo
  400. 18:36again. So now we can
  401. 18:40say let's add another value in here
  402. 18:43called last
  403. 18:45combo. So if OS.C clock minus
  404. 18:50our let's initiate last
  405. 18:55combo minus last combo do
  406. 19:03value is less than our weapon data
  407. 19:07dot combo
  408. 19:09cooldown then return. So if the time
  409. 19:12pass from the current
  410. 19:14time minus our last combo time is less
  411. 19:17than 1.5 seconds then we prevent the
  412. 19:19player from
  413. 19:21attacking. And then after that we can
  414. 19:25[Music]
  415. 19:26say module combo reset time is equal to
  416. 19:321.5. So essentially, if the time between
  417. 19:36our last swing and the swing that we're
  418. 19:39trying to do is greater than 1.5
  419. 19:41seconds, we reset the combo back to
  420. 19:43swing one. So we can say if OSC
  421. 19:48clock
  422. 19:50minus last swing value is greater than
  423. 19:54or equal to weapon data, comma reset
  424. 19:58time, then we want to reset our swing
  425. 20:00number to zero.
  426. 20:03Now we can actually start adding in our
  427. 20:06swing
  428. 20:07numbers. So swing
  429. 20:10number if swing number dot
  430. 20:15value or first off let's just do this
  431. 20:18swing number do value plus equals 1.
  432. 20:20This also adds number to our swing
  433. 20:23value. And now we can say
  434. 20:26[Music]
  435. 20:29if swing number do value is greater than
  436. 20:32or equal to five then we want to put our
  437. 20:36last
  438. 20:37combo. So last combo value equals o
  439. 20:42clock and we can say last swing. O clock
  440. 20:47like so. Let's put this outside.
  441. 20:52And we also want to reset our combo. So
  442. 20:56swing number value equals zero. Like so.
  443. 21:02However, now we actually want to
  444. 21:05um assign the actual animation to play.
  445. 21:08So local animation to or local true
  446. 21:12swing
  447. 21:13number equals uh no. And now we can say
  448. 21:18true swing number is equal to swing
  449. 21:20number value. Or if we already set it to
  450. 21:23zero, we'll just set the true swing
  451. 21:25number to
  452. 21:28five is equal to five. Like
  453. 21:30so. Now we can say local animation to
  454. 21:35play animation
  455. 21:37track is equal to Oh, they're all
  456. 21:40completed at first, but animation
  457. 21:43modules fist.
  458. 21:47dot dot dot. We want a two string
  459. 21:51or L. Two string to true screen
  460. 21:55number like so. An animation to play. We
  461. 21:59want to
  462. 22:01play. Now if we play our game, it should
  463. 22:07work. We look in
  464. 22:11our configuration.
  465. 22:14One, two, three, four, and
  466. 22:17five. You see that? Now the cordon
  467. 22:19actually plays as
  468. 22:20well. One, two, three. Yep. If we
  469. 22:24unequipped it, it doesn't work. And if
  470. 22:27we wait 1.5 seconds, so let's say we're
  471. 22:30on swing three or something. We wait one
  472. 22:32and a half seconds and it resets it like
  473. 22:35so.
  474. 22:38Now if we stop playing the game,
  475. 22:41we want to actually address the
  476. 22:43animation markers part now. So remember
  477. 22:46or if you recall from before, we made a
  478. 22:49little animation marker called hit on
  479. 22:52here. So in order to address that, we
  480. 22:55can say animation to
  481. 22:58play get marker each signal like so.
  482. 23:05And we want to make this a
  483. 23:10connection. So the reason we make this a
  484. 23:12connection is what if it never actually
  485. 23:14reaches it because there's an issue with
  486. 23:15Roblox. We want to find a way to
  487. 23:17disconnect that so it doesn't cause any
  488. 23:20memory leaks or anything like that. So
  489. 23:22let's call this hit connect function
  490. 23:24like so or once because we only want to
  491. 23:28call it once, not a lot of times.
  492. 23:31And then if we go to our animations
  493. 23:33module, let's make something called uh
  494. 23:38connections like
  495. 23:41so now we can
  496. 23:47say
  497. 23:50table or we can call
  498. 23:53this let's remove this and we can say
  499. 23:57animation modules.loaded loaded
  500. 23:59animations. And we can also say
  501. 24:01animation
  502. 24:04modules.connections whatever our string
  503. 24:06is up here
  504. 24:11is equal to connection like so.
  505. 24:17No.
  506. 24:20Or instead of doing this, we can
  507. 24:26say there we
  508. 24:28go. And instead of just copying and
  509. 24:31pasting this, we can make this
  510. 24:33variable. So
  511. 24:37local local
  512. 24:39swing name is equal to
  513. 24:43that swing name. screen name.
  514. 24:48Over here we can also say screen
  515. 24:52name. Now we say print hits called
  516. 24:58like so. And up here we want to actually
  517. 25:00disconnect any thing that's that's
  518. 25:02associated with our fist. Let's swing.
  519. 25:06So if we loop through up here we can say
  520. 25:16for uh connection
  521. 25:19name, connection
  522. 25:22in animation modules connections too. If
  523. 25:26stringfind connection
  524. 25:28name,
  525. 25:31fist.swings, then we want to disconnect
  526. 25:33it. So we can say connection disconnect.
  527. 25:36So animation
  528. 25:40uh connection name
  529. 25:44disconnect connections connection name
  530. 25:46is equal to no like
  531. 25:49so now if we play the
  532. 25:53game wait for everything to load we can
  533. 25:56see that okay nice we have it printing
  534. 25:58out hit called
  535. 25:59now and if we also print out the
  536. 26:02connections
  537. 26:03folder we can see prints animation
  538. 26:06modules connections
  539. 26:14you see that okay there is a connection
  540. 26:15over here and it should be disconnected
  541. 26:17every time we
  542. 26:19finish. So for example if
  543. 26:22we remove
  544. 26:24that and over here we want to
  545. 26:28actually make the
  546. 26:31attacking the same length as our
  547. 26:34animation length. So animation to
  548. 26:37play.length and then we want to make our
  549. 26:39hitbox clone
  550. 26:42animation.length length like let's say
  551. 26:44minus or yeah let's keep it like this
  552. 26:46for now as before like
  553. 26:52so. So now let's move this over
  554. 26:55here to our
  555. 27:00Whoops. There we go.
  556. 27:05And then paste this in here. And let's
  557. 27:07move this up a little bit.
  558. 27:10Move this to where it's around right
  559. 27:13here.
  560. 27:18Like
  561. 27:18so. Or no, cuz we need to establish
  562. 27:21animation to play. Let's go over here.
  563. 27:24Right here. Like so.
  564. 27:29Now when it when the hit is called, we
  565. 27:33can actually play up hitbox.
  566. 27:46There we go. And you see that there's a
  567. 27:48sort delay before you can um before the
  568. 27:51actual hitbox is called because it's
  569. 27:53waiting for it to hit that marker.
  570. 27:57So now if you go up here to your hit
  571. 27:59dummy, you attack it. Here we
  572. 28:07go. And then let's go over here
  573. 28:09[Music]
  574. 28:11to our anim or our fist up here. And we
  575. 28:14can do we can do print out our loaded
  576. 28:19animations. Loaded or connections
  577. 28:22because we want to see if it actually
  578. 28:24disconnected.
  579. 28:33You go. Hit called
  580. 28:34L3. And you see that every time it calls
  581. 28:38it, the only connection that's in there
  582. 28:41is the last swing, which is good because
  583. 28:43you don't want it to be jumbled up with
  584. 28:45L3, L2, L1, and things like that.
  585. 28:49And now
  586. 28:51that should be it for playing the
  587. 28:54animations.
  588. 28:57So in the next video I'm going to show
  589. 28:59you how to actually stun the character
  590. 29:01and make a state system. So essentially
  591. 29:03what a state system would be is if you
  592. 29:05go to our starter character scripts, we
  593. 29:08add a folder called status, which this
  594. 29:11is going to handle all of our states in
  595. 29:12the game. So let's say we're running,
  596. 29:14we're dashing, or we are stunned, for
  597. 29:18example. We add a value called stunned
  598. 29:20in
  599. 29:21here. What what the input script will do
  600. 29:25now is check if you're stunned, and
  601. 29:26he'll set your walk speed to zero. So
  602. 29:29for example, we can
  603. 29:32say status checker like so.
  604. 29:36And we say if status folder, I'm not
  605. 29:38going to reference it yet, but if we
  606. 29:40find for child stun, then we want to set
  607. 29:43your walk speed or human walk speed to
  608. 29:45zero like so. So you can't walk is what
  609. 29:48the state system is going to do. And
  610. 29:50it's going to do that for attacking.
  611. 29:51It's going to slow you down a little
  612. 29:52bit. For blocking, it'll slow you down
  613. 29:54drastically because you're blocking and
  614. 29:57things like that.
  615. 29:59So that should be the end of this video.
  616. 30:02Thanks for watching and yeah.

About this transcript

This page contains the full transcript of [Part2] Roblox Combat System for Beginners | Playing Animations by Senko, generated from the public captions YouTube serves with the video. The transcript has 3,669 words across 616 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.