1 điểm bởi GN⁺ 2023-07-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Giải thích chiến lược lấy ngôi sao Watch for Rolling Rocks trong Super Mario 64 với 0.5 lần nhấn A, không có lần bấm A mới nào, chỉ dùng thao tác giữ A được duy trì từ trước khi bắt đầu
  • Đầu vào A được chia thành press, hold và release; nếu tiếp tục giữ A đã nhấn từ ngôi sao trước đó thì có thể được tính là 0.5 cho một ngôi sao riêng lẻ, và là 0 lần nhập thêm trong toàn bộ lượt chạy
  • Cốt lõi của chiến lược là di chuyển vị trí home của Scuttlebug và dùng ranh giới kích hoạt căn phòng để nâng nó lên, sau đó tận dụng misalignment và cú nảy để đạt đủ độ cao của bệ ngôi sao
  • Tốc độ ngang cần thiết được tạo ra bằng Hyper Speed Walking thông qua việc kết hợp nước nông, dốc đứng, gate và phán định out-of-bounds, và việc tích tốc độ mất khoảng 12 giờ
  • Lộ trình di chuyển PU được thiết kế để quay lại main map và tiếp cận elevator cùng bệ ngôi sao bằng cách khớp phép chuyển đổi short của floor collision, syncing speed theo từng độ dốc và căn chỉnh QPU

Tiêu chuẩn của 0.5 lần nhấn A

  • Một lần nhấn A không phải là đầu vào xảy ra trong chớp mắt mà được chia thành ba giai đoạn: press, hold, release
    • press được dùng để làm Mario nhảy
    • hold có thể được dùng cho cú kick nhỏ, swim dưới nước, rơi chậm khi twirl, và rơi chậm khi dùng Wing Cap
    • release hiện không có ví dụ nào hữu ích hoặc quan trọng
  • 0.5 lần nhấn A có nghĩa là không nhấn A mới mà tiếp tục hold A đã được nhấn trước đó
  • Ví dụ Over the Rainbow cho thấy cách tính này
    • để tới cannon platform chỉ cần hold A
    • lần bắn cannon thứ nhất và lần bắn cannon thứ hai mỗi lần đều cần một A press
    • nếu chỉ xét riêng ngôi sao đó thì được tính là 3 lần nhấn A
    • trong toàn bộ lượt chạy A Button Challenge, có thể tiếp tục hold A press đã dùng để vào course nhằm đáp ứng yêu cầu hold đầu tiên
    • vì vậy Over the Rainbow được tính là 2.5 A presses khi xét riêng một ngôi sao, và thêm 2 A presses khi xét toàn bộ lượt chạy
  • Chiến lược Watch for Rolling Rocks cũng bắt đầu khi A đã ở trạng thái được nhấn từ đầu level, và trong toàn bộ lượt chạy thì đầu vào này được tính là nối tiếp từ một A press trước đó

Vận chuyển và nâng Scuttlebug

  • Scuttlebug Transportation tận dụng tính chất vị trí home của Scuttlebug sẽ được cập nhật khi nó va chạm với Mario
    • Scuttlebug tuần tra trong một bán kính nhất định quanh home
    • khi Mario đi vào bán kính đó, nó sẽ thực hiện lunging attack
    • nếu Scuttlebug va vào Mario, vị trí của Scuttlebug tại thời điểm va chạm sẽ trở thành home mới
  • Việc vận chuyển có một số giới hạn
    • Scuttlebug không thể ra khỏi native room của nó và sẽ bị kẹt ở door
    • nếu nó đi vào wall từ vị trí thấp hơn home hiện tại quá nhiều thì có thể biến mất, nên cần tránh điều này trong lúc vận chuyển
  • Mục tiêu là đưa Scuttlebug và home của nó tới gần góc ngay bên dưới ngôi sao Watch for Rolling Rocks
  • Scuttlebug Raising dùng phạm vi kích hoạt của rolling rocks room để nâng Scuttlebug lên cao
    • room và các object bên trong chỉ được kích hoạt khi Mario ở trong rolling rocks room hoặc trong vùng vàng nhỏ bên ngoài door
    • nếu Mario ở ngoài đó thì room sẽ trông đen và các object trở nên invisible, không di chuyển
    • ngay cả khi đang không hoạt động, Scuttlebug vẫn có thể quay về phía Mario và bắt đầu lunge
    • sau khi Mario vào vùng vàng để kích hoạt Scuttlebug, nếu Mario rời vùng vàng đúng lúc Scuttlebug đạt đỉnh quỹ đạo thì Scuttlebug sẽ không rơi xuống mà dừng ở độ cao đó
    • lặp lại quá trình này sẽ tiếp tục nâng Scuttlebug lên cao hơn
  • Bán kính phát hiện của Scuttlebug không phải là hình cầu mà là hình trụ kéo dài vô hạn theo phương dọc, nên dù nó lên cao đến đâu vẫn có thể tiếp tục dụ nó lunge
  • Trong chiến lược này, Scuttlebug được làm cho lunge về phía home để nó lơ lửng ngay trên góc đó
    • nếu Mario kích hoạt nó khi đang ở trong bán kính của Scuttlebug, Scuttlebug sẽ lunge về phía Mario và có thể di chuyển về phía door
    • cách đó nhanh hơn, nhưng chiến lược này cần vị trí gần góc nên không dùng

Misalignment và đạt đủ độ cao

  • Phần phía trên của góc có một đặc tính gọi là misalignment
    • trong mã trò chơi, floor collision checking và wall collision checking được xử lý theo cách khác nhau
    • kết quả là trong một vùng 1x1 unit, Mario có thể không bị đẩy khỏi wall và chui xuống dưới floor
  • Nếu Mario ở dưới floor ít hơn 79 units thì sẽ bị snap trở lại lên trên floor
  • Ở bước cuối, chiến lược kết hợp cú nảy từ Scuttlebug và ground pound với misalignment để lấy đủ độ cao leo lên bệ Watch for Rolling Rocks

Hyper Speed Walking và di chuyển Parallel Universe

  • Tốc độ cần thiết được tạo bằng Hyper Speed Walking
    • trên slope quá dốc, bình thường Mario không thể đứng yên và sẽ trượt
    • ở phần underwater của một slope ngập trong nước nông, nếu cố chạy uphill thì Mario sẽ chạy lùi và tốc độ tiếp tục tăng mà không có upper bound
  • Thông thường Mario sẽ rơi xuống nước hoặc ra khỏi slope nên khó tích được nhiều tốc độ, nhưng có thể dùng gate và out-of-bounds để tích tốc độ tại chỗ
    • phần đáy của gate được tính là ceiling
    • nếu Mario cố di chuyển quá gần ngay bên dưới ceiling thì trò chơi sẽ từ chối việc dịch chuyển vị trí đó
    • sau khi lấy được một lượng tốc độ nhất định, nếu đổi hướng để intended next position vượt qua wall và trở thành out-of-bounds thì trò chơi sẽ không đặt Mario ra out-of-bounds mà giữ Mario đứng nguyên tại chỗ
    • vì out-of-bounds kéo dài liên tục nên có thể tích tốc độ lâu hơn so với ceiling của gate
  • Trong chiến lược này, gate được mở ra và một phần tốc độ được tạo dưới gate ceiling, sau đó angle được xoay về phía out-of-bounds để tích nốt phần tốc độ còn lại
  • Việc tích tốc độ mất khoảng 12 giờ

PU, QPU, syncing speed

  • Position của Mario là số dấu phẩy động, nhưng trong floor triangle collision test thì nó được chuyển thành short
    • phần lẻ bị truncated
    • các giá trị quá lớn hoặc quá nhỏ sẽ được đưa vào khoảng từ -32768 đến 32767 bằng modulo operator
  • Dù vị trí thực tế nằm ngoài phạm vi này, vị trí dùng cho floor detection vẫn bị loop trở lại vào hộp ban đầu
    • ngay cả khi ở vị trí thực của Mario không có địa hình, nếu vị trí floor detection nằm trên địa hình thì trò chơi vẫn coi Mario đang đứng trên mặt đất
    • những vùng hoạt động như bản sao của map gốc như vậy được gọi là Parallel Universe, hay PU
  • PU không có graphics, cũng không có object, enemy, coin, star hay wall như elevator hoặc item block
  • Trên máy N64, nếu camera đi theo Mario vào PU thì có thể bị crash, nên chiến lược này cố định camera ở main map để tránh crash
  • Trò chơi kiểm tra xem Mario có đứng trên floor hay không ở mỗi quarter step của chuyển động
    • với kiểu di chuyển PU đơn giản, phải nhảy qua 4 PU trong một lần để mỗi quarter step đều nằm trên địa hình
    • khoảng cách 4 PU này được gọi là QPU
  • Speed thực tế và de facto speed dùng cho chuyển động là khác nhau
    • de facto speed được xác định từ một phần của speed thực tế tùy theo độ dốc của slope
    • slope càng dốc thì với cùng một speed, de facto speed càng nhỏ
  • Speed khiến khoảng cách QPU khớp với quarter step được gọi là syncing speed
    • syncing speed thấp nhất là tốc độ di chuyển chính xác 1 QPU
    • các bội số của nó cũng là syncing speed, cho phép di chuyển nhiều QPU trong một lần
    • mỗi slope có một tập syncing speed khác nhau
  • Trong ví dụ di chuyển PU của Secret Aquarium, cần lần lượt thỏa mãn syncing speed của nhiều slope, và mất khoảng 12 giờ để đạt syncing speed đầu tiên, khoảng 25 giờ để đạt syncing speed thứ hai
  • Lộ trình Watch for Rolling Rocks được thiết kế để chỉ cần tích tốc độ trong 12 giờ thay vì 25 giờ
    • path đi lên từ hồ gồm hàng chục floor triangle có độ dốc khác nhau
    • trong số đó, sáu triangle từ T1 đến T6 được chọn, và độ dốc của chúng giảm nghiêm ngặt
    • độ cao của sáu triangle này phủ kín quãng chênh cao cần thiết từ dưới lên trên mà không có khoảng trống
    • bằng cách lần lượt dùng các triangle này, bản thiết kế route được hoàn thiện chỉ với first syncing speed của slope ban đầu

Lộ trình cuối cùng và lấy ngôi sao

  • Lộ trình cơ bản bắt đầu từ slope Hyper Speed Walking, đi lên theo path phía trên hồ, dùng hai elevator, rồi tới Amazing Emergency Exit platform và được phóng về phía Watch for Rolling Rocks platform
  • Trong lúc di chuyển PU, nếu speed hơi thấp hơn syncing speed thì Mario đi relative forward, còn nếu hơi cao hơn thì đi relative backward
  • Chỉ cần lệch angle một chút khỏi cardinal direction thì do khoảng cách QPU, sideways movement sẽ bị phóng đại rất nhiều
  • Việc quản lý QPU alignment là cực kỳ quan trọng
    • lưới tương ứng với bội số của 4 PU được gọi là QPU grid
    • khi Mario nằm trên lưới này thì ở trạng thái QPU aligned
    • các kiểu di chuyển PU dương khác cần điều kiện đặc biệt như out-of-bounds hoặc đổi slope
    • nếu bị QPU misaligned thì có thể rất khó quay lại main map
  • Trên lake path, tại mỗi triangle từ T1 đến T6, speed được hạ xuống gần syncing speed của slope đó rồi Mario di chuyển uphill để sang triangle tiếp theo
    • mỗi lần đổi triangle, QPU alignment sẽ thay đổi, nhưng route được lên kế hoạch để đến cuối các thay đổi này triệt tiêu lẫn nhau và trở lại trạng thái QPU aligned
    • ở triangle thứ sáu, Mario tiếp cận main map bằng cách di chuyển zigzag
  • Vì PU không có object nên các elevator chỉ có thể được dùng sau khi đã quay lại main map
  • Lý do phải tiếp tục hold A là để có thể nhấn B thực hiện cú kick nhỏ
    • nếu không có kick thì Mario sẽ đi xuyên qua elevator
    • có kick thì Mario có thể đứng lên elevator và lấy thêm độ cao
  • Pha di chuyển cuối cùng là kick về phía Amazing Emergency Exit platform rồi đổi hướng để launch về phía Scuttlebug
    • chuyển động này tạo ra displacement 10 PU sang phải và 3 PU xuống dưới, nên Mario được đặt sẵn ở vị trí cao hơn 3 PU và lệch trái 10 PU để kết thúc ở main map
    • đồng thời vị trí tương đối trên map cũng được điều chỉnh để có thể thực hiện bước cuối cùng
  • Scuttlebug được kích hoạt ngay khi vào phiên bản PU của room, và phải tới nơi trước khi nó rơi xuống quá nhiều nên ở pha tiếp cận cuối chỉ có vài frame dư địa
  • Cuối cùng, dùng cú nảy từ Scuttlebug và ground pound trong vùng misalignment để lấy đủ độ cao leo lên bệ Watch for Rolling Rocks, và lấy ngôi sao với 0.5 A presses

1 bình luận

 
GN⁺ 2023-07-16
Các ý kiến trên Hacker News
  • Tôi nghĩ đây chẳng phải là video YouTube hoàn hảo sao
    Phía sau có soundtrack Mario tuyệt vời và cảnh gameplay, các biểu đồ tự làm trực quan hóa chuyện đang xảy ra, còn phần thuyết minh thì giải thích những gì trên màn hình
    Nó còn tham khảo cả các video YouTube khác và bình luận, cực kỳ chi tiết và uyên thâm, mà cũng không bán thứ gì
    Cảm giác như được làm vì tình yêu hơn là vì lượt xem; với tôi, đó là đỉnh cao của YouTube

    • Video của HealthyGamerGG cũng cho cảm giác tương tự
      Rất chi tiết và uyên thâm, đi qua thần kinh hóa học/sinh hóa, tâm lý học, game, hành vi con người, văn hóa và tôn giáo, rồi cả cách chúng thay đổi theo thời gian
      Với tôi, những thứ như vậy là đỉnh cao của YouTube
    • Có lẽ sẽ dễ hiểu hơn nếu nói: “Bắt đầu màn chơi trong khi giữ nút A, và sau đó không nhấn nút A lần nào nữa”
    • Bạn nên thấy may là mình không quá nhạy cảm với nhạc nền
      Tôi thì rất khó chịu nổi nhạc nền
  • Độ sâu kiến thức và năng lực phân tích của pannenkoek thật sự đáng kinh ngạc
    Xem các video SM64 xong tôi bị nâng tiêu chuẩn lên, nên rất khó tìm được mức độ nghiêm ngặt và chất lượng sản xuất tương tự ở các game khác
    Thứ gần nhất tôi từng thấy đến giờ là một video nói về cách các speedrunner chinh phục yếu tố ngẫu nhiên trong một câu đố của Wind Waker
    https://youtu.be/1hs451PfFzQ

  • Đây là nerd porn tinh khiết và thật sự tuyệt
    Những giải thích kiểu như việc phát hiện va chạm của game thực ra nhận giá trị dấu phẩy động rồi chuyển thành short khiến não tôi được gãi đúng chỗ một cách kỳ lạ
    Việc một game như SM64 vẫn mê hoặc và níu chân mọi người sau hàng chục năm kể từ khi phát hành nói lên rất nhiều điều
    Có vẻ ngày càng ít game chủ lưu hiện nay chia sẻ được mức độ đam mê như vậy từ người chơi

  • Toàn bộ lịch sử của thử thách nút A
    https://www.youtube.com/watch?v=yXbJe-rUNP8
    Video dài hơn 5 tiếng, tôi thường bật làm nền hoặc xem để giết thời gian
    Lượng kiến thức và mức độ khai thác bug mà những người này thể hiện thật phi lý

    • Gần đây tôi đã xem hết video này, và rất khuyến nghị cho bất kỳ ai có chút quan tâm
      Một số khám phá thật sự điên rồ, và điều đáng kinh ngạc là có quá nhiều thứ chỉ vừa đủ hoạt động
      Nhìn chung Bismuth cũng là một YouTuber có chất lượng cao
  • Tôi đã cười vỡ bụng ở đoạn “tích lũy tốc độ trong 12 giờ
    https://youtu.be/kpk2tdsPh0A?t=640
    Lối tư duy thật sự rõ ràng
    Thật thích khi trên Internet có nhiều người thông minh đến mức này

    • Nhìn theo hướng ngược lại thì cũng có cảm giác hơi lãng phí
      Dĩ nhiên ai muốn dùng trí óc của mình thế nào là quyền của họ, nhưng việc dồn tâm sức đến mức này vào một bug cực kỳ khó hiểu của một game khoảng 30 năm tuổi, để chứng minh rằng một màn trình diễn không thể thực hiện trong thực tế nếu không có công cụ hỗ trợ là khả thi về mặt kỹ thuật, trông thật sự kỳ quặc
      Video giải thích thì xuất sắc, nhưng mục tiêu nền tảng bên dưới với tôi lại có vẻ vô lý
  • Nếu bạn thích câu chuyện về vũ trụ song song, tôi rất khuyến nghị xem speedrun SM64 1-Key https://youtube.com/watch?v=iUt840BUOYA, rồi tiếp theo là phần giải thích của Bismuth https://youtube.com/watch?v=wjge1bVobN0
    Đây là một thành tựu kỹ thuật thật sự đáng kinh ngạc, dựa rất nhiều trên nghiên cứu của pannenkoek2012

    • Những thuật ngữ mà game thủ tạo ra để mô tả các hiện tượng rốt cuộc chỉ là bug của game khá thú vị
      Vũ trụ song song và toàn bộ bối cảnh xung quanh nó đều sinh ra từ việc số nguyên 16-bit bị overflow trong mã kiểm tra sàn
      Mario 64 thường lưu vị trí bằng dấu phẩy động, nhưng trong kiểm tra va chạm thì chuyển đổi sang số nguyên 16-bit
  • Thật sự đáng kinh ngạc
    Mỗi khi thấy những người bị một niềm đam mê nào đó thôi thúc mạnh mẽ đến mức dốc vào đó sự tận tụy cực đoan như vậy, tôi lại thấy khâm phục
    Hiếm khi tôi từng cảm thấy một niềm đam mê đủ để khiến mình làm việc chăm chỉ đến thế
    Đôi khi tôi nghĩ giá mà những người như vậy dùng tài năng và năng lượng của họ vào những việc thật sự quan trọng như chữa bệnh hay các đột phá khoa học thì tốt biết mấy
    Ít nhất thì với chính họ, họ cũng có thể cảm thấy tiềm năng lớn của mình không bị lãng phí
    Chỉ riêng công sức bỏ vào video này có lẽ cũng đủ để cho ra một bài nghiên cứu tử tế
    Tôi ước gì mình có mức động lực như thế trong công việc, nhưng nhìn chung thì chỉ biết thán phục

  • Tôi thích video này
    Gần đây hơn, họ còn làm một video về các yếu tố kỹ thuật cụ thể của N64, và cần lưu ý về số thực dấu phẩy động
    https://youtu.be/nYDmBdUalgo

    • Video này có thể dùng trong lớp khoa học máy tính như tài liệu nhập môn về bộ sinh số giả ngẫu nhiên và số thực dấu phẩy động IEEE
  • Có ai giới thiệu thêm các video kiểu hố thỏ như bài gốc không?
    Chủ đề gì cũng được
    Tôi thích những video cho thấy một việc có thể đi sâu đến mức nào
    Hiện video tôi thích nhất là https://youtu.be/_hjRvZYkAgA

    • Gần đây tôi xem khá thú vị một video bắt đầu dịch ngược một game Lego PC cũ mà tôi nhớ hồi nhỏ https://www.youtube.com/watch?v=MToTEqoVv3I
    • Marcel Vos có khá nhiều video YouTube về cơ chế của game Roller Coaster Tycoon, đặc biệt là khi đẩy chúng đến mức cực đoan
      https://youtu.be/KVgoy_a_gWI
    • Cũng có một video rất hay về việc luôn thắng Pokémon bằng cùng một bộ input
      https://youtu.be/6gjsAA_5Agk
    • Tôi thích các video speedrun của Karl Jobst
  • Video này cũng giải thích 0,5 lần nhấn A là gì và vì sao người ta quan tâm
    Mario 64 không quan tâm đến thao tác thả nút, nên các runner không tính riêng thao tác thả
    Vì lúc nào cũng có thể chọn không thả A, nên trong các run tối thiểu số lần nhấn A, họ chỉ thả A để có thể nhấn A lại
    Trong phần bình luận trực tiếp có thể giải thích ngắn gọn 0,5 A “nghĩa là gì”, nhưng nếu không có lời giải thích này thì rất dễ thắc mắc vì sao lại phải quan tâm đến nó

    • Chỉ đọc phần này thì người không rành game sẽ không hiểu vì sao không thể cứ giữ A từ lần nhấn cuối cùng
      Cũng cần giải thích rằng khi giữ A, Mario sẽ có hành vi khác so với khi không nhấn A
    • Chính xác hơn, đôi khi game yêu cầu nhấn mới nút A, nhưng đôi khi chỉ cần A đang ở trạng thái được nhấn là hành động xảy ra
      Nếu trong trường hợp đầu tiên bạn nhấn A rồi không thả ra, thì trường hợp thứ hai có thể mượn input đó để dùng
    • “Mario 64 không quan tâm đến thao tác thả nút” có thật sự đúng không?
      Nếu nó quan tâm đến trạng thái đang giữ, như lướt trên không, thì chẳng phải tất yếu nó cũng quan tâm đến trạng thái không giữ, như đang ở trên không nhưng không lướt, hay sao
      Để chuyển từ trạng thái đang lướt trên không sang trạng thái ở trên không nhưng không lướt, bạn phải thả nút
      Tôi có hiểu sai không?
      Tôi mới chỉ chơi M64 khoảng 5 phút, nhưng đã đưa vào danh sách sẽ chơi một ngày nào đó, và vẫn đang cố thuyết phục bọn trẻ mê game này để tôi cũng có cớ dành thời gian chơi
    • Nó đúng là có quan tâm đến thao tác thả nút
      Muốn nhảy lần thứ hai thì trước hết phải thả nút
      0,5 thực ra gần với khái niệm một input A được kéo dài qua nhiều màn chơi hơn
    • keydown + keyup = keypress
      Nhìn bề ngoài thì sẽ nghĩ “0,5 rốt cuộc là cái gì?”, nhưng cuối cùng chỉ là vấn đề ngữ nghĩa