onilink_

Untitled

May 20th, 2019
583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.55 KB | None | 0 0
  1.  
  2. // update/calculate delta time
  3. if(keyboard_check(vk_shift))
  4. dt = 0.2
  5. else {
  6. //new_dt = 60*(current_time - old_time)/1000
  7. //dt = dt*0.97 + new_dt*0.03
  8. dt = 60 / room_speed
  9. }
  10. //room_caption = string(state)
  11. room_caption = sprite_get_name(sprite_index) + ':' + string(frame)
  12.  
  13. KeyLeft = ord('Q')
  14. KeyRight = ord('D')
  15. KeyDown = ord('S')
  16.  
  17. check_l = keyboard_check(KeyLeft)
  18. check_r = keyboard_check(KeyRight)
  19. check_jump = keyboard_check(vk_space)
  20. press_atk = mouse_check_button_pressed(mb_left)
  21.  
  22. on_ground = !place_free(x, y+1)
  23.  
  24. force_x = 0
  25. force_y = 0
  26.  
  27. gravity_force = p_gravity_force
  28.  
  29. // debug - test hits
  30. if(keyboard_check_pressed(vk_numpad0)) {
  31. playerChangeState(StateHitStatic, s_player_hit_static, 0)
  32. }
  33. if(keyboard_check_pressed(vk_numpad1)) {
  34. playerChangeState(StateHitFallsBack, s_player_hit_falls_back, 0)
  35. }
  36. if(keyboard_check_pressed(vk_numpad2)) {
  37. playerChangeState(StateHitFallsFront, s_player_hit_falls_front, 0)
  38. }
  39.  
  40. if(on_ground) {
  41. deactivate_l = false
  42. deactivate_r = false
  43. }
  44.  
  45. if(deactivate_l) {
  46. deactivate_timer -= dt
  47.  
  48. if(deactivate_timer <= 0 ||
  49. (keyboard_check_released(KeyLeft) && check_r) ||
  50. keyboard_check_pressed(KeyLeft)) {
  51. deactivate_l = false
  52. }
  53. else {
  54. check_l = false
  55. check_r = true
  56. }
  57. }
  58. else
  59. if(deactivate_r) {
  60. deactivate_timer -= dt
  61.  
  62. if(deactivate_timer <= 0 ||
  63. (keyboard_check_released(KeyRight) && check_l) ||
  64. keyboard_check_pressed(KeyRight)) {
  65. deactivate_r = false
  66. }
  67. else {
  68. check_r = false
  69. check_l = true
  70. }
  71. }
  72.  
  73.  
  74. frame_prev = frame
  75. if(sprite_index == s_player_run_acc ||
  76. sprite_index == s_player_run_dec ||
  77. sprite_index == s_player_wallsword_start) {
  78. frame += 0.4 * dt
  79. }
  80. else if(sprite_index == s_player_atk_fa) {
  81. frame += 1/6 * dt
  82. }
  83. else {
  84. frame += 0.2 * dt
  85. }
  86.  
  87. if(state == StateIdle)
  88. {
  89. if(!on_ground) {
  90. playerChangeState(StateFall, s_player_jump_fall, 0)
  91. }
  92. else if(press_atk)
  93. {
  94. playerChangeState(StateAtkA, s_player_atk_a, 0)
  95. }
  96. else if(check_l xor check_r) {
  97. playerChangeState(StateRun, s_player_run_acc, 1)
  98. if(check_l && !check_r) {
  99. image_xscale = -1
  100. }
  101. else if(!check_l && check_r) {
  102. image_xscale = 1
  103. }
  104. }
  105. else if(check_jump && place_free(x, y-1)) {
  106. playerChangeState(StateJump, s_player_jump_leap, 0)
  107. }
  108. else if(sprite_index == s_player_run_dec
  109. && frame >= 8)
  110. {
  111. sprite_index = s_player_idle
  112. frame = 0
  113. }
  114. }
  115. else if(state == StateRun)
  116. {
  117. force = p_run_speed
  118.  
  119. if(sprite_index == s_player_run_acc)
  120. {
  121. if(frame >= 4) {
  122. sprite_index = s_player_run
  123. }
  124. else {
  125. // progressive acceleration
  126. force *= min(1, frame / 4)
  127. }
  128. }
  129.  
  130. if(!on_ground) {
  131. playerChangeState(StateFall, s_player_jump, 3)
  132. }
  133. else if(check_jump) {
  134. playerChangeState(StateJump, s_player_jump, 2)
  135. }
  136. else if(check_l) {
  137. image_xscale = -1
  138. force_x = -force
  139.  
  140. if(playerIsOnSlopeL()) {
  141. playerChangeState(StateSlide, s_player_slide_loop, 0)
  142. slide_acc = force
  143. }
  144. else if(press_atk) {
  145. playerChangeState(StateAtkFA, s_player_atk_fa, 0)
  146. }
  147. }
  148. else if(check_r) {
  149. image_xscale = 1
  150. force_x = force
  151.  
  152. if(playerIsOnSlopeR()) {
  153. playerChangeState(StateSlide, s_player_slide_loop, 0)
  154. slide_acc = force
  155. }
  156. else if(press_atk) {
  157. playerChangeState(StateAtkFA, s_player_atk_fa, 0)
  158. }
  159. }
  160. else {
  161. playerChangeState(StateIdle, s_player_run_dec, 0)
  162. }
  163. }
  164. else if(state == StateJump)
  165. {
  166. // run => jump
  167. if(sprite_index == s_player_jump) {
  168. if(frame >= 2) {
  169. if(on_ground)
  170. {
  171. if((image_xscale > 0 && check_r) ||
  172. (image_xscale < 0 && check_l) )
  173. {
  174. // small teleport
  175. applyForce(image_xscale*16, 0)
  176. //if(place_free(x+image_xscale*16, y))
  177. // x += image_xscale * 16
  178.  
  179. vy = -p_jump_force_y_forward
  180. vx = image_xscale * p_jump_force_x_forward
  181. force_x = image_xscale * 2
  182. playerChangeState(StateFall, s_player_jump, frame)
  183. }
  184. else
  185. {
  186. playerChangeState(StateJump, s_player_jump_leap, 2)
  187. }
  188. }
  189. }
  190. }
  191. // idle => jump
  192. else if(sprite_index == s_player_jump_leap) {
  193. if(frame >= 3) {
  194. if(on_ground) {
  195. // esquive?
  196. if((image_xscale > 0 && check_l) ||
  197. (image_xscale < 0 && check_r) )
  198. {
  199. playerChangeState(StateFall, s_player_jump, 3)
  200. vx = -image_xscale * 3
  201. vy = -p_jump_force / 1.2
  202. force_x = -image_xscale * 2
  203. }
  204. else if((image_xscale > 0 && check_r) ||
  205. (image_xscale < 0 && check_l) )
  206. {
  207. playerChangeState(StateFall, s_player_jump, 3)
  208. vx = image_xscale * 3
  209. vy = -p_jump_force / 1.2
  210. force_x = image_xscale * 2
  211. }
  212. else {
  213. vy = -p_jump_force * 1.1
  214. }
  215. }
  216. else if(check_l) {
  217. force_x = -2
  218. }
  219. else if(check_r) {
  220. force_x = 2
  221. }
  222.  
  223. if(frame >= 4) {
  224. playerChangeState(StateFall, s_player_jump_fall, 0)
  225. //sprite_index = s_player_jump_fall
  226. //frame = 0
  227. }
  228. }
  229. }
  230. /*
  231. else if(sprite_index == s_player_jump_fall) {
  232. if(vy >= 0) {
  233. playerChangeState(StateFall, s_player_jump_fall, frame)
  234. }
  235. else if(check_l) {
  236. force_x = -2
  237. }
  238. else if(check_r) {
  239. force_x = 2
  240. }
  241. }*/
  242. else if(on_ground) {
  243. playerChangeState(StateLand, s_player_jump_land, 0)
  244. }
  245. }
  246. else if(state == StateFall) // jumping and falling
  247. {
  248. if(vy < 0) // jumping
  249. {
  250. /*if(sprite_index == s_player_jump_fall)
  251. {
  252. if(frame > 3) {
  253. frame = 3
  254. }
  255. }
  256. else */if(sprite_index == s_player_jump)
  257. {
  258. if(sprite_index == s_player_jump && frame > 5) {
  259. frame = 5
  260. }
  261. if(sprite_index == s_player_jump_fall && frame > 3) {
  262. frame = 3
  263. }
  264.  
  265. ready_to_walljump =
  266. (wallAtLeft () && image_xscale < 0) ||
  267. (wallAtRight() && image_xscale > 0)
  268.  
  269. if((wallAtLeft () && image_xscale < 0) ||
  270. (wallAtRight() && image_xscale > 0) )
  271. {
  272. wall_glue_timer = -1
  273. }
  274.  
  275. if(check_jump
  276. && ready_to_walljump)
  277. {
  278. playerChangeState(StateWallJump, s_player_walljump_start, 0)
  279. wall_glue_timer = 0
  280. }
  281. else if(wall_glue_timer <= 0)
  282. {
  283. if(check_l) {
  284. force_x = -p_jump_force_x_forward
  285. }
  286. else if(check_r) {
  287. force_x = p_jump_force_x_forward
  288. }
  289. else {
  290. force_x = 0
  291. }
  292. }
  293.  
  294. if(sprite_index == s_player_jump
  295. && image_xscale < 0 && wallAtLeft())
  296. {
  297. playerChangeState(StateWall, s_player_wallsword_start, 1)
  298. }
  299. else if(sprite_index == s_player_jump
  300. && image_xscale > 0 && wallAtRight())
  301. {
  302. playerChangeState(StateWall, s_player_wallsword_start, 1)
  303. }
  304. }
  305. }
  306. else // falling
  307. {
  308. if( (image_xscale > 0 && playerIsOnSlopeR()) ||
  309. (image_xscale < 0 && playerIsOnSlopeL()) )
  310. {
  311. playerChangeState(StateSlide, s_player_slide_loop, 0)
  312. slide_acc = force
  313. }
  314. else if( (check_r && image_xscale > 0 && playerShouldCliffR()))
  315. {
  316. // move the player at the good coordinates
  317. var ins;
  318. ins = instance_position(bbox_right+1, bbox_top+8, o_block_cliff)
  319. if(ins != noone) {
  320. y = ins.y + (bbox_bottom - bbox_top) - 2
  321. }
  322.  
  323. playerChangeState(StateCliffHangStart, s_player_cliff_hang_start, 0)
  324. }
  325. else if( (check_l && image_xscale < 0 && playerShouldCliffL()))
  326. {
  327. // move the player at the good coordinates
  328. var ins;
  329. ins = instance_position(bbox_left-1, bbox_top+8, o_block_cliff)
  330. if(ins != noone) {
  331. y = ins.y + (bbox_bottom - bbox_top) - 2
  332. }
  333.  
  334. playerChangeState(StateCliffHangStart, s_player_cliff_hang_start, 0)
  335. }
  336. else if(sprite_index == s_player_jump_fall)
  337. {
  338. if(frame > 3) {
  339. frame = 3
  340. }
  341.  
  342. if(check_l) {
  343. force_x = -p_fall_force_x
  344. }
  345. else if(check_r) {
  346. force_x = p_fall_force_x
  347. }
  348. }
  349. else if(sprite_index == s_player_jump)
  350. {
  351. if(frame > 6) {
  352. frame = 6
  353. }
  354.  
  355. if(check_l) {
  356. force_x = -p_fall_force_x_forward
  357. }
  358. else if(check_r) {
  359. force_x = p_fall_force_x_forward
  360.  
  361. }
  362. else {
  363. force_x = 0
  364. }
  365.  
  366. if(!keyboard_check(KeyDown))
  367. {
  368. if(sprite_index == s_player_jump
  369. && image_xscale < 0 && wallAtLeft()) {
  370. playerChangeState(StateWall, s_player_wallsword_start, 1)
  371. }
  372. else if(sprite_index == s_player_jump
  373. && image_xscale > 0 && wallAtRight()) {
  374. playerChangeState(StateWall, s_player_wallsword_start, 1)
  375. }
  376. }
  377. }
  378. }
  379.  
  380. if(on_ground && state != StateSlide) {
  381. playerChangeState(StateLand, s_player_jump_land, 0)
  382. }
  383. }
  384. else if(state == StateLand)
  385. {
  386. if(frame >= 3) {
  387. playerChangeState(StateIdle, s_player_idle, 1)
  388. }
  389. else if(frame >= 2 && (check_l xor check_r)) {
  390. playerChangeState(StateRun, s_player_run_acc, 1)
  391. if(check_l && !check_r) {
  392. image_xscale = -1
  393. }
  394. else if(!check_l && check_r) {
  395. image_xscale = 1
  396. }
  397. }
  398. }
  399. else if(state == StateWall)
  400. {
  401. gravity_force = 0
  402. //vy = 0
  403. //force_y = p_wall_fall_force_y
  404.  
  405. if(sprite_index == s_player_wallsword_start) {
  406. //force_y = 0
  407. vy = 0
  408. }
  409. else if(sprite_index == s_player_wallsword && frame < 1) {
  410. force_y = 0
  411. }
  412. else {
  413. if(vy < p_wall_fall_force_y) {
  414. vy += 0.1
  415. }
  416. force_y = vy/2
  417. }
  418.  
  419. if(on_ground)
  420. {
  421. playerChangeState(StateLand, s_player_jump_land, 0)
  422. }
  423. else if(sprite_index == s_player_wallsword_start)
  424. {
  425. if(frame >= 3) {
  426. sprite_index = s_player_wallsword
  427. frame = 0
  428. }
  429. }
  430. else
  431. if( (image_xscale > 0 && !wallAtRight()) ||
  432. (image_xscale < 0 && !wallAtLeft()) )
  433. {
  434. playerChangeState(StateFall, s_player_jump_fall, 0)
  435. }
  436. else if(check_jump)
  437. {
  438. playerChangeState(StateWallJump, s_player_walljump_start, 0)
  439. }
  440. else if(keyboard_check_pressed(KeyDown)) {
  441. playerChangeState(StateFall, s_player_jump, 4)
  442. }
  443. }
  444. else if(state == StateWallJump)
  445. {
  446. gravity_force = 0
  447. vy = 0
  448.  
  449. if(frame >= 1) {
  450. playerChangeState(StateFall, s_player_jump, 2)
  451. deactivate_timer = 60
  452. if(image_xscale < 0) {
  453. deactivate_l = true
  454. deactivate_r = false
  455. } else {
  456. deactivate_r = true
  457. deactivate_l = false
  458. }
  459.  
  460. image_xscale *= -1
  461. force_x = image_xscale * p_wall_jump_force_x
  462. vx = image_xscale * p_wall_jump_inertia_x
  463. vy = -p_wall_jump_force_y
  464. }
  465. }
  466. else if(state == StateSlide)
  467. {
  468. force_x = slide_acc * image_xscale
  469. if(slide_acc < p_slide_max_speed) {
  470. slide_acc += p_slide_acc * dt
  471. slide_acc = min(slide_acc, p_slide_max_speed)
  472. }
  473.  
  474. // jump: todo
  475. if(check_jump) {
  476. //playerChangeState(StateJump, s_player_jump, 2)
  477.  
  478. // code doublon
  479. // small teleport
  480. applyForce(image_xscale*16, 0)
  481. vy = -p_slide_jump_force
  482. vx = image_xscale * (p_slide_jump_inertia_x + slide_acc*0.65)
  483. force_x = image_xscale * p_slide_jump_force_x
  484. playerChangeState(StateFall, s_player_jump, frame)
  485. }
  486.  
  487. else if((image_xscale < 0 && playerSlideShouldStopL()) ||
  488. (image_xscale > 0 && playerSlideShouldStopR())) {
  489. playerChangeState(StateSlideEnd, s_player_slide_end, 0)
  490. }
  491. }
  492. else if(state == StateSlideEnd)
  493. {
  494. force_x = slide_acc * image_xscale
  495. if(slide_acc > 3) {
  496. slide_acc -= p_slide_acc * dt
  497. slide_acc = max(slide_acc, 3)
  498. }
  499. if(frame >= 5) {
  500. playerChangeState(StateIdle, s_player_idle, 0)
  501. }
  502. }
  503. else if(state == StateCliffHangStart)
  504. {
  505. if(frame >= 4) {
  506. playerChangeState(StateCliffHang, s_player_cliff_hang, 0)
  507. }
  508. }
  509. else if(state == StateCliffHang)
  510. {
  511. if(check_jump) {
  512. playerChangeState(StateCliffHangUp, s_player_cliff_hang_up, 0)
  513. }
  514. else if((/*(!check_r && image_xscale > 0) ||
  515. (!check_l && image_xscale < 0))
  516. && (frame >= 5 || */keyboard_check(KeyDown)))
  517. {
  518. playerChangeState(StateCliffHangDrop, s_player_cliff_hang_drop, 0)
  519. }
  520. }
  521. else if(state == StateCliffHangDrop)
  522. {
  523. if(frame >= 2) {
  524. playerChangeState(StateFall, s_player_jump_fall, 0)
  525. }
  526. }
  527. else if(state == StateCliffHangUp)
  528. {
  529. var dx, dy;
  530. dx = 46;
  531. dy = 60;
  532.  
  533. camera_dx = lerp(0, dx * image_xscale, frame/7)
  534. camera_dy = lerp(0, -dy, frame/7)
  535.  
  536. if(frame >= 7) {
  537. x += dx * image_xscale
  538. y -= dy
  539. playerChangeState(StateIdle, s_player_idle, 0)
  540. camera_dx = 0
  541. camera_dy = 0
  542. }
  543. }
  544. else if(state == StateAtkA)
  545. {
  546. if(frame >= 2 && frame < 4) {
  547. mask_index = sprite_index
  548. playerHitGoblin()
  549. }
  550.  
  551. if(press_atk && frame < 7) {
  552. playerChangeState(StateAtkA2, s_player_atk_aa, frame)
  553. }
  554. else if(frame >= 8) {
  555. playerChangeState(StateIdle, s_player_idle, 0)
  556. }
  557. }
  558. else if(state == StateAtkA2)
  559. {
  560. if(frame >= 2 && frame < 4) {
  561. mask_index = s_player_atk_a
  562. }
  563. else if(frame >= 6 && frame < 8) {
  564. mask_index = s_player_atk_aa
  565. }
  566.  
  567. if(mask_index != s_player_mask) {
  568. playerHitGoblin()
  569. }
  570.  
  571. if(press_atk && frame < 10) {
  572. playerChangeState(StateAtkA3, s_player_atk_aaa, frame)
  573. }
  574. else if(frame >= 10) {
  575. playerChangeState(StateIdle, s_player_idle, 0)
  576. }
  577. }
  578. else if(state == StateAtkA3)
  579. {
  580. if(frame >= 2 && frame < 4) {
  581. mask_index = s_player_atk_a
  582. }
  583. else if(frame >= 6 && frame < 8) {
  584. mask_index = s_player_atk_aa
  585. }
  586. else if(frame >= 11 && frame < 13) {
  587. mask_index = s_player_atk_aaa
  588. }
  589.  
  590. if(mask_index != s_player_mask) {
  591. playerHitGoblin()
  592. }
  593.  
  594. if(frame >= 16) {
  595. playerChangeState(StateIdle, s_player_idle, 0)
  596. }
  597. }
  598. else if(state == StateAtkFA)
  599. {
  600. applyAnchor(anchor_atk_fa, StateIdle, s_player_idle, 0)
  601.  
  602. if(press_atk && frame < 5) {
  603. playerChangeState(StateAtkFA2, s_player_atk_fafa, frame)
  604. }
  605. else if(frame >= 8) {
  606. playerChangeState(StateIdle, s_player_idle, 0)
  607. offset_x = 0
  608. camera_dx = 0
  609. }
  610.  
  611. updateCameraOffset()
  612. }
  613. else if(state == StateAtkFA2)
  614. {
  615. applyAnchor(anchor_atk_fa2, StateIdle, s_player_idle, 0)
  616.  
  617. if(press_atk && frame < 13) {
  618. playerChangeState(StateAtkFA3, s_player_atk_fafafa, frame)
  619. }
  620. else if(frame >= 15) {
  621. playerChangeState(StateIdle, s_player_idle, 0)
  622. offset_x = 0
  623. }
  624.  
  625. updateCameraOffset()
  626. }
  627. else if(state == StateAtkFA3)
  628. {
  629. applyAnchor(anchor_atk_fa3, StateIdle, s_player_idle, 0)
  630.  
  631. if(frame >= 20) {
  632. playerChangeState(StateIdle, s_player_idle, 0)
  633. offset_x = 0
  634. }
  635. updateCameraOffset()
  636. }
  637. else if(state == StateHitStatic)
  638. {
  639. if(frame >= 23) {
  640. playerChangeState(StateIdle, s_player_idle, 0)
  641. }
  642. }
  643. else if(state == StateHitGetupBack)
  644. {
  645. if(frame >= 12) {
  646. playerChangeState(StateIdle, s_player_idle, 0)
  647. }
  648. }
  649. else if(state == StateHitGetupFront)
  650. {
  651. if(frame >= 12) {
  652. playerChangeState(StateIdle, s_player_idle, 0)
  653. }
  654. }
  655. else if(state == StateHitFallsBack)
  656. {
  657. if(frame >= 1 && frame < 2 && !place_free(x, y+1)) {
  658. vx = -image_xscale * 6
  659. vy = -2.5
  660. }
  661. else if(frame >= 11) {
  662. playerChangeState(StateHitGetupBack, s_player_getup_back, 0)
  663. }
  664. }
  665. else if(state == StateHitFallsFront)
  666. {
  667. if(frame >= 1 && frame < 2 && !place_free(x, y+1)) {
  668. vx = image_xscale * 6
  669. vy = -2.5
  670. }
  671. else if(frame >= 11) {
  672. playerChangeState(StateHitGetupFront, s_player_getup_front, 0)
  673. }
  674. }
  675.  
  676. // apply horizontal friction
  677. {
  678. fric = 0.1 * dt
  679. if(on_ground) fric *= 2
  680. if(vx > 0) {
  681. vx = max(0, vx-fric)
  682. } else {
  683. vx = min(0, vx+fric)
  684. }
  685. }
  686.  
  687. // some states deactivate the gravity and vertical forces
  688. if(state == StateCliffHangStart ||
  689. state == StateCliffHang ||
  690. state == StateCliffHangUp) {
  691. vy = 0
  692. } else {
  693. vy += gravity_force * dt
  694. }
  695.  
  696. // limit vertical speed
  697. if(vy > 12) {
  698. vy = 12
  699. }
  700.  
  701. updateFromVelocity(dt, force_x, force_y)
  702.  
  703. if(collisionRight || collisionLeft) vx = 0
  704. if(collisionTop || collisionBottom) vy = 0
  705.  
  706. old_time = current_time
Advertisement
Add Comment
Please, Sign In to add comment