aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2025-03-20 18:44:36 +0100
committerMiquel Sabaté Solà <mikisabate@gmail.com>2025-03-20 18:44:36 +0100
commite0bdeaed3b2face03bb388df565344e688759bb3 (patch)
tree417495858b595c32a9892718e40ebe1d0b2c7702
parent7599259a573cbb93f02b8e8ee68bb4a987ccac22 (diff)
downloadjetpac.nes-e0bdeaed3b2face03bb388df565344e688759bb3.tar.gz
jetpac.nes-e0bdeaed3b2face03bb388df565344e688759bb3.zip
Add walking animation
This also corrects a pixel from one of the animations on the chr file. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
-rw-r--r--README.md2
-rw-r--r--assets/jetpac.chrbin8192 -> 8192 bytes
-rw-r--r--assets/session.nss62
-rw-r--r--src/assets.s1
-rw-r--r--src/player.s98
5 files changed, 120 insertions, 43 deletions
diff --git a/README.md b/README.md
index d5a8d7a..e8e0bf8 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-This is a port to the NES of the renown
+This is a port to the NES/Famicom of the renown
[jetpac](https://en.wikipedia.org/wiki/Jetpac) game from Ultimate Play the Game.
You can find a ROM to play the game in the [releases
page](https://github.com/mssola/jetpac.nes/releases).
diff --git a/assets/jetpac.chr b/assets/jetpac.chr
index 91dbe19..375f665 100644
--- a/assets/jetpac.chr
+++ b/assets/jetpac.chr
Binary files differ
diff --git a/assets/session.nss b/assets/session.nss
index 05df76f..1893377 100644
--- a/assets/session.nss
+++ b/assets/session.nss
@@ -46,9 +46,9 @@ BtnPPuMaskA=0
BtnPPuMaskB=0
BtnPPuMaskLinked=1
VarTileViewTagBuf=0
-VarBgPalCur=0
-VarPalActive=0
-VarTileActive=109
+VarBgPalCur=3
+VarPalActive=1
+VarTileActive=170
VarBankActive=0
VarPPUMask=0
VarPPUMaskSet0=0
@@ -57,7 +57,7 @@ VarPPUMaskSet2=0
VarPPUMaskSet3=0
VarPPUMaskGlobal0=0
VarPPUMaskGlobal1=0
-VarPalBank=1
+VarPalBank=0
VarMetaSpriteActive=0
VarSpriteActive=-1
VarSpriteGridX=64
@@ -65,7 +65,7 @@ VarSpriteGridY=64
VarNameW=32
VarNameH=60
VarNameViewX=0
-VarNameViewY=28
+VarNameViewY=0
VarNameViewX2=0
VarNameViewY2=0
VarNameSelectionL=-1
@@ -74,10 +74,10 @@ VarNameSelectionT=-1
VarNameSelectionB=47
VarNameCopyW=17
VarNameCopyH=3
-VarCHRSelectionL=13
-VarCHRSelectionR=14
-VarCHRSelectionT=6
-VarCHRSelectionB=7
+VarCHRSelectionL=10
+VarCHRSelectionR=11
+VarCHRSelectionT=10
+VarCHRSelectionB=11
VarCHRCopyW=1
VarCHRCopyH=1
VarCHRCopyRect=1
@@ -153,34 +153,34 @@ RadioAutoexport_UseSubDir_NEXXT=0
CheckAutoexport_MetatileAsBMP=0
-VarCHRSelected=00[6d]0100[92]
+VarCHRSelected=00[aa]0100[55]
-Palette=0f302c280f2c302a0f2814280f1630000f302c280f1122330f282c160f1324350f1324360f1526370f1627370f1928380f1829380f1b2a390f1b2b3c0f1c2c3b
+Palette=0f302c280f16101b0f1610300f1630000f302c280f1122330f282c160f1324350f1324360f1526370f1627370f1928380f1829380f1b2a390f1b2b3c0f1c2c3b
-PalUndo=0f302c280f2c302a0f2814280f1630000f302c280f1122330f282c160f1324350f1324360f1526370f1627370f1928380f1829380f1b2a390f1b2b3c0f1c2c3b
+PalUndo=0f302c280f16101b0f1610300f1630000f302c280f1122330f282c160f1324350f1324360f1526370f1627370f1928380f1829380f1b2a390f1b2b3c0f1c2c3b
-CHRMain=00[10]2f7fffddfb7b71212f7fffddfb7b7121bdff[2]f7ebddad04bdff[2]f7ebddad044cfeff3efffe9c084cfeff3efffe9c0800[8]01[2]02[2]05[2]090800[8]80[2]c0[2]e0[2]f01000[8]09[8]00[8]f0[5]50[3]00[8]09[5]19[2]2900[8]10f0b030b018f8fc00[8]2959[2]89b9[4]00[8]fcf4f6[2]f1f7[3]00[8]b9[3]f9a9[2]f4f500[8]f7[2]fff5[3]6fef00[8]555289b9b800[b]eacb91971700[4]3c464a52623c00[a]182808[3]3e00[a]3c42023c407e00[a]3c420c02423c00[a]081828487e0800[a]7e407c02423c00[a]3e407c42[2]3c00[a]3e02040810[2]00[a]3c423c42[2]3c00[a]3c42[2]3e023c00[9]3c4299a1[2]99423c00[9]3c42[2]7e42[2]00[a]7c427c42[2]3c00[a]3c4240[2]423c00[a]7c42[4]7c00[a]7c407040[2]7c00[a]3c40[2]7040[2]00[a]3c42404e423c00[a]42[3]7e42[2]00[a]3e08[4]3e00[a]02[3]42[2]3c00[a]44487048444200[a]40[5]7e00[a]42665a42[3]00[a]4262524a464200[a]3c42[4]3c00[a]7c42[2]7c40[2]00[a]3c42[3]3c0600[a]3c42[2]7c444200[a]3e403c02[2]7c00[a]3e08[5]00[a]42[5]3c00[a]22[4]140800[a]42[3]5a664200[a]422418[2]244200[a]41221408[3]00[a]7e040810207e00[9]18243c7e5a3c[2]6600[10]0810[2]20e0c000[2]30d0f0[6]30d0f0[7]fefffcfeff[3]f0fefffcfeff[3]00[a]01030206[2]0c00[8]0fffbf3f7f[2]ff[2]4f50607f00[4]4f50607f00[4]ff00[2]ff00[4]ff00[2]ff00[4]f90503ff00[4]f90503ff00[4]30ff[3]f0207f[2]30ff[3]f0207f[2]8f80407f00[4]8f80407f00[4]ff[8]00[8]ff[4]00[14]077f4f8f[5]00[8]ff[8]00[2]c06030188cc400[2]c06030188cc400[8]f8fce6[2]e7[4]00[8]071f3f5f9f[4]00[8]ff[6]fe[2]00[8]f8c6c182[2]04[2]0800[8]3f7fffdf9f[4]860488f800[4]860488f800[c]fe[2]c1a190fffcd800[8]e0f0b89c[2]8c[3]0c0919[2]3b33276f0c0919[2]3b33276fff[10]fcfbf8f0f1e1[2]c3fcfbf8f0f1e1[2]c300[4]ff[4]00[8]9fa0c0ff00[4]9fa0c0ff00[c]8f[2]cf77340f00[a]ff[5]7fbf00[9]ff[4]fe[2]fd00[9]e7f7fe1e3cf800[a]9f[5]bfff7f00[8]fe[2]c1a190fffcdf00[8]0810[2]20e0c0fc0200[8]9f[5]a0ff4000[8]ff0f[3]ff00ff00[9]ff[5]00ff00[9]8c[4]ccf8[3]fcf8c06030188cc4fcf8c06030188cc44f48f0ff00[4]4f48f0ff00[4]e6160cf800[4]e6160cf800[c]f1[5]f9fdff00[8]f8f6f1[6]00ff[3]00[2]ff[2]00ff[3]00[2]ff[2]7fbf5f9f[5]7fbf5f9f[5]fefdfaf9[5]fefdfaf9[5]00[8]0d191b3337674fff807fff[3]bf9f[2]807fff[3]bf9f[2]3fdff0ff[4]f03fdff0ff[4]f0e4fa0cfafcfafc0ee4fa0cfafcfafc0e78bf5f9f[5]78bf5f9f[5]fefdfbfdf9[4]fefdfbfdf9[4]7ffffc00[5]7ffffc00[5]f1c00103[2]06[2]0cf1c00103[2]06[2]0cf3ff[2]fcfeff[3]f3ff[2]fcfeff[3]1f7f9f[6]1f7f9f[6]ff0100ff00[4]ff0100ff00[c]ff[4]0f[3]ff01fdfefd1e0dfefb01fdfefd1e0dfefb3f2f4f[6]3f2f4f[6]9f3fff[6]9f3fff[6]f9[10]00[8]ff[5]fe[2]ff9f[10]00[892]0105[3]0c[2]00[2]0105[3]0c[2]00f0c080c0[2]f800[2]f0c0bcdc[2]f80078f87468cceeff0078f87468cceeff00[11]01[2]02[2]05[2]090801[2]02[2]05[2]090880[2]c0[2]e0[2]f01080[2]c0[2]e0[2]f01009[5]19[2]2909[5]19[2]2910f0b030b018f8fc10f0b030b018f8fcb9[3]f9a9[2]f4f5b9[3]f9a9[2]f4f5f7[2]fff5[3]6feff7[2]fff5[3]6fef00[2]303f[2]3c[2]3d071f3f7ffffc[2]fd00[3]e0f038b8bce0f8fcfeff3fbf[2]00[4]18ff[2]8a00[c]18ff[2]8b00[28]0a0e0a0e0b0f07050a0e0a0e0b0f0705f09a[2]8778[2]f878f09a[2]8778[2]f8780a0f0001030d0e070a0f0001030d0e07b858d8[2]981c1e1fb858d8[2]981c1e1f09[10]f0[5]50[3]f0[5]50[3]2959[2]89b9[4]2959[2]89b9[4]fcf4f6[2]f1f7[3]fcf4f6[2]f1f7[3]555289b9b800[3]555289b9b800[3]eacb91971700[3]eacb91971700[3]3c3f[5]00[2]fcfff07c7f[2]3f073cfcf8fcf0e000[2]3fff671efc[2]f8e0ba8abab8ff[2]1800[9]bb9bbb89ff[2]1800[29]0a0f00[6]0a0f00[6]b8[2]300030383c00b8[2]300030383c000a0f000a07081b040a0f00[6]bc[2]0c000e0f00[2]bc[2]0c000e0f00[4a]555289b9b800[b]eacb91971700[63]18243c7e5a3c[2]6600[2cf8]
+CHRMain=00[10]2f7fffddfb7b71212f7fffddfb7b7121bdff[2]f7ebddad04bdff[2]f7ebddad044cfeff3efffe9c084cfeff3efffe9c0800[8]01[2]02[2]05[2]090800[8]80[2]c0[2]e0[2]f01000[8]09[8]00[8]f0[5]50[3]00[8]09[5]19[2]2900[8]10f0b030b018f8fc00[8]2959[2]89b9[4]00[8]fcf4f6[2]f1f7[3]00[8]b9[3]f9a9[2]f4f500[8]f7[2]fff5[3]6fef00[8]555289b9b800[b]eacb91971700[4]3c464a52623c00[a]182808[3]3e00[a]3c42023c407e00[a]3c420c02423c00[a]081828487e0800[a]7e407c02423c00[a]3e407c42[2]3c00[a]3e02040810[2]00[a]3c423c42[2]3c00[a]3c42[2]3e023c00[9]3c4299a1[2]99423c00[9]3c42[2]7e42[2]00[a]7c427c42[2]3c00[a]3c4240[2]423c00[a]7c42[4]7c00[a]7c407040[2]7c00[a]3c40[2]7040[2]00[a]3c42404e423c00[a]42[3]7e42[2]00[a]3e08[4]3e00[a]02[3]42[2]3c00[a]44487048444200[a]40[5]7e00[a]42665a42[3]00[a]4262524a464200[a]3c42[4]3c00[a]7c42[2]7c40[2]00[a]3c42[3]3c0600[a]3c42[2]7c444200[a]3e403c02[2]7c00[a]3e08[5]00[a]42[5]3c00[a]22[4]140800[a]42[3]5a664200[a]422418[2]244200[a]41221408[3]00[a]7e040810207e00[9]18243c7e5a3c[2]6600[10]0810[2]20e0c000[2]30d0f0[6]30d0f0[7]fefffcfeff[3]f0fefffcfeff[3]00[a]01030206[2]0c00[8]0fffbf3f7f[2]ff[2]4f50607f00[4]4f50607f00[4]ff00[2]ff00[4]ff00[2]ff00[4]f90503ff00[4]f90503ff00[4]30ff[3]f0207f[2]30ff[3]f0207f[2]8f80407f00[4]8f80407f00[4]ff[8]00[8]ff[4]00[14]077f4f8f[5]00[8]ff[8]00[2]c06030188cc400[2]c06030188cc400[8]f8fce6[2]e7[4]00[8]071f3f5f9f[4]00[8]ff[6]fe[2]00[8]f8c6c182[2]04[2]0800[8]3f7fffdf9f[4]860488f800[4]860488f800[c]fe[2]c1a190fffcd800[8]e0f0b89c[2]8c[3]0c0919[2]3b33276f0c0919[2]3b33276fff[10]fcfbf8f0f1e1[2]c3fcfbf8f0f1e1[2]c300[4]ff[4]00[8]9fa0c0ff00[4]9fa0c0ff00[c]8f[2]cf77340f00[a]ff[5]7fbf00[9]ff[4]fe[2]fd00[9]e7f7fe1e3cf800[a]9f[5]bfff7f00[8]fe[2]c1a190fffcdf00[8]0810[2]20e0c0fc0200[8]9f[5]a0ff4000[8]ff0f[3]ff00ff00[9]ff[5]00ff00[9]8c[4]ccf8[3]fcf8c06030188cc4fcf8c06030188cc44f48f0ff00[4]4f48f0ff00[4]e6160cf800[4]e6160cf800[c]f1[5]f9fdff00[8]f8f6f1[6]00ff[3]00[2]ff[2]00ff[3]00[2]ff[2]7fbf5f9f[5]7fbf5f9f[5]fefdfaf9[5]fefdfaf9[5]00[8]0d191b3337674fff807fff[3]bf9f[2]807fff[3]bf9f[2]3fdff0ff[4]f03fdff0ff[4]f0e4fa0cfafcfafc0ee4fa0cfafcfafc0e78bf5f9f[5]78bf5f9f[5]fefdfbfdf9[4]fefdfbfdf9[4]7ffffc00[5]7ffffc00[5]f1c00103[2]06[2]0cf1c00103[2]06[2]0cf3ff[2]fcfeff[3]f3ff[2]fcfeff[3]1f7f9f[6]1f7f9f[6]ff0100ff00[4]ff0100ff00[c]ff[4]0f[3]ff01fdfefd1e0dfefb01fdfefd1e0dfefb3f2f4f[6]3f2f4f[6]9f3fff[6]9f3fff[6]f9[10]00[8]ff[5]fe[2]ff9f[10]00[892]0105[3]0c[2]00[2]0105[3]0c[2]00f0c080c0[2]f800[2]f0c0bcdc[2]f80078f87468cceeff0078f87468cceeff00[11]01[2]02[2]05[2]090801[2]02[2]05[2]090880[2]c0[2]e0[2]f01080[2]c0[2]e0[2]f01009[5]19[2]2909[5]19[2]2910f0b030b018f8fc10f0b030b018f8fcb9[3]f9a9[2]f4f5b9[3]f9a9[2]f4f5f7[2]fff5[3]6feff7[2]fff5[3]6fef00[2]3c3f7f7c7d[2]071f3f7ffffcfd[2]00[3]e0f038[2]bce0f8fcfeff3fbf[2]00[4]18ff[2]8a00[c]18ff[2]8b00[28]0a0e0a0e0b0f07050a0e0a0e0b0f0705f09a[2]8778[2]f878f09a[2]8778[2]f8780a0f0103191c0e000a0f0103191c0e00b858d8[2]9c1e1f00b858d8[2]9c1e1f0009[10]f0[5]50[3]f0[5]50[3]2959[2]89b9[4]2959[2]89b9[4]fcf4f6[2]f1f7[3]fcf4f6[2]f1f7[3]555289b9b800[3]555289b9b800[3]eacb91971700[3]eacb91971700[3]7c7f[2]3f[3]00[2]fcfff17c7f[2]3f073efef8fcf0e000[2]3fffe71efc[2]f8e0ba8abab8ff[2]1800[9]bb9bbb89ff[2]1800[29]0a0f00[6]0a0f00[6]b8[2]300030383c00b8[2]300030383c000a0f000a07081b040a0f00[6]bc[2]0c000e0f00[2]bc[2]0c000e0f00[4a]555289b9b800[b]eacb91971700[63]18243c7e5a3c[2]6600[2cf8]
-CHRUndo=00[10]2f7fffddfb7b71212f7fffddfb7b7121bdff[2]f7ebddad04bdff[2]f7ebddad044cfeff3efffe9c084cfeff3efffe9c0800[8]01[2]02[2]05[2]090800[8]80[2]c0[2]e0[2]f01000[8]09[8]00[8]f0[5]50[3]00[8]09[5]19[2]2900[8]10f0b030b018f8fc00[8]2959[2]89b9[4]00[8]fcf4f6[2]f1f7[3]00[8]b9[3]f9a9[2]f4f500[8]f7[2]fff5[3]6fef00[8]555289b9b800[b]eacb91971700[4]3c464a52623c00[a]182808[3]3e00[a]3c42023c407e00[a]3c420c02423c00[a]081828487e0800[a]7e407c02423c00[a]3e407c42[2]3c00[a]3e02040810[2]00[a]3c423c42[2]3c00[a]3c42[2]3e023c00[9]3c4299a1[2]99423c00[9]3c42[2]7e42[2]00[a]7c427c42[2]3c00[a]3c4240[2]423c00[a]7c42[4]7c00[a]7c407040[2]7c00[a]3c40[2]7040[2]00[a]3c42404e423c00[a]42[3]7e42[2]00[a]3e08[4]3e00[a]02[3]42[2]3c00[a]44487048444200[a]40[5]7e00[a]42665a42[3]00[a]4262524a464200[a]3c42[4]3c00[a]7c42[2]7c40[2]00[a]3c42[3]3c0600[a]3c42[2]7c444200[a]3e403c02[2]7c00[a]3e08[5]00[a]42[5]3c00[a]22[4]140800[a]42[3]5a664200[a]422418[2]244200[a]41221408[3]00[a]7e040810207e00[9]18243c7e5a3c[2]6600[10]0810[2]20e0c000[2]30d0f0[6]30d0f0[7]fefffcfeff[3]f0fefffcfeff[3]00[a]01030206[2]0c00[8]0fffbf3f7f[2]ff[2]4f50607f00[4]4f50607f00[4]ff00[2]ff00[4]ff00[2]ff00[4]f90503ff00[4]f90503ff00[4]30ff[3]f0207f[2]30ff[3]f0207f[2]8f80407f00[4]8f80407f00[4]ff[8]00[8]ff[4]00[14]077f4f8f[5]00[8]ff[8]00[2]c06030188cc400[2]c06030188cc400[8]f8fce6[2]e7[4]00[8]071f3f5f9f[4]00[8]ff[6]fe[2]00[8]f8c6c182[2]04[2]0800[8]3f7fffdf9f[4]860488f800[4]860488f800[c]fe[2]c1a190fffcd800[8]e0f0b89c[2]8c[3]0c0919[2]3b33276f0c0919[2]3b33276fff[10]fcfbf8f0f1e1[2]c3fcfbf8f0f1e1[2]c300[4]ff[4]00[8]9fa0c0ff00[4]9fa0c0ff00[c]8f[2]cf77340f00[a]ff[5]7fbf00[9]ff[4]fe[2]fd00[9]e7f7fe1e3cf800[a]9f[5]bfff7f00[8]fe[2]c1a190fffcdf00[8]0810[2]20e0c0fc0200[8]9f[5]a0ff4000[8]ff0f[3]ff00ff00[9]ff[5]00ff00[9]8c[4]ccf8[3]fcf8c06030188cc4fcf8c06030188cc44f48f0ff00[4]4f48f0ff00[4]e6160cf800[4]e6160cf800[c]f1[5]f9fdff00[8]f8f6f1[6]00ff[3]00[2]ff[2]00ff[3]00[2]ff[2]7fbf5f9f[5]7fbf5f9f[5]fefdfaf9[5]fefdfaf9[5]00[8]0d191b3337674fff807fff[3]bf9f[2]807fff[3]bf9f[2]3fdff0ff[4]f03fdff0ff[4]f0e4fa0cfafcfafc0ee4fa0cfafcfafc0e78bf5f9f[5]78bf5f9f[5]fefdfbfdf9[4]fefdfbfdf9[4]7ffffc00[5]7ffffc00[5]f1c00103[2]06[2]0cf1c00103[2]06[2]0c00[10]1f7f9f[6]1f7f9f[6]ff0100ff00[4]ff0100ff00[c]ff[4]0f[3]ff01fdfefd1e0dfefb01fdfefd1e0dfefb3f2f4f[6]3f2f4f[6]9f3fff[6]9f3fff[6]f9[10]00[8]ff[5]fe[2]ff9f[10]f3ff[2]fcfeff[3]f3ff[2]fcfeff[3]00[882]0105[3]0c[2]00[2]0105[3]0c[2]00f0c080c0[2]f800[2]f0c0bcdc[2]f80078f87468cceeff0078f87468cceeff00[11]01[2]02[2]05[2]090801[2]02[2]05[2]090880[2]c0[2]e0[2]f01080[2]c0[2]e0[2]f01009[5]19[2]2909[5]19[2]2910f0b030b018f8fc10f0b030b018f8fcb9[3]f9a9[2]f4f5b9[3]f9a9[2]f4f5f7[2]fff5[3]6feff7[2]fff5[3]6fef00[2]303f[2]3c[2]3d071f3f7ffffc[2]fd00[3]e0f038b8bce0f8fcfeff3fbf[2]00[4]18ff[2]8a00[c]18ff[2]8b00[28]0a0e0a0e0b0f07050a0e0a0e0b0f0705f09a[2]8778[2]f878f09a[2]8778[2]f8780a0f0001030d0e070a0f0001030d0e07b858d8[2]981c1e1fb858d8[2]981c1e1f09[10]f0[5]50[3]f0[5]50[3]2959[2]89b9[4]2959[2]89b9[4]fcf4f6[2]f1f7[3]fcf4f6[2]f1f7[3]555289b9b800[3]555289b9b800[3]eacb91971700[3]eacb91971700[3]3c3f[5]00[2]fcfff07c7f[2]3f073cfcf8fcf0e000[2]3fff671efc[2]f8e0ba8abab8ff[2]1800[9]bb9bbb89ff[2]1800[29]0a0f00[6]0a0f00[6]b8[2]300030383c00b8[2]300030383c000a0f000a07081b040a0f00[6]bc[2]0c000e0f00[2]bc[2]0c000e0f00[4a]555289b9b800[b]eacb91971700[63]18243c7e5a3c[2]6600[2cf8]
+CHRUndo=00[10]2f7fffddfb7b71212f7fffddfb7b7121bdff[2]f7ebddad04bdff[2]f7ebddad044cfeff3efffe9c084cfeff3efffe9c0800[8]01[2]02[2]05[2]090800[8]80[2]c0[2]e0[2]f01000[8]09[8]00[8]f0[5]50[3]00[8]09[5]19[2]2900[8]10f0b030b018f8fc00[8]2959[2]89b9[4]00[8]fcf4f6[2]f1f7[3]00[8]b9[3]f9a9[2]f4f500[8]f7[2]fff5[3]6fef00[8]555289b9b800[b]eacb91971700[4]3c464a52623c00[a]182808[3]3e00[a]3c42023c407e00[a]3c420c02423c00[a]081828487e0800[a]7e407c02423c00[a]3e407c42[2]3c00[a]3e02040810[2]00[a]3c423c42[2]3c00[a]3c42[2]3e023c00[9]3c4299a1[2]99423c00[9]3c42[2]7e42[2]00[a]7c427c42[2]3c00[a]3c4240[2]423c00[a]7c42[4]7c00[a]7c407040[2]7c00[a]3c40[2]7040[2]00[a]3c42404e423c00[a]42[3]7e42[2]00[a]3e08[4]3e00[a]02[3]42[2]3c00[a]44487048444200[a]40[5]7e00[a]42665a42[3]00[a]4262524a464200[a]3c42[4]3c00[a]7c42[2]7c40[2]00[a]3c42[3]3c0600[a]3c42[2]7c444200[a]3e403c02[2]7c00[a]3e08[5]00[a]42[5]3c00[a]22[4]140800[a]42[3]5a664200[a]422418[2]244200[a]41221408[3]00[a]7e040810207e00[9]18243c7e5a3c[2]6600[10]0810[2]20e0c000[2]30d0f0[6]30d0f0[7]fefffcfeff[3]f0fefffcfeff[3]00[a]01030206[2]0c00[8]0fffbf3f7f[2]ff[2]4f50607f00[4]4f50607f00[4]ff00[2]ff00[4]ff00[2]ff00[4]f90503ff00[4]f90503ff00[4]30ff[3]f0207f[2]30ff[3]f0207f[2]8f80407f00[4]8f80407f00[4]ff[8]00[8]ff[4]00[14]077f4f8f[5]00[8]ff[8]00[2]c06030188cc400[2]c06030188cc400[8]f8fce6[2]e7[4]00[8]071f3f5f9f[4]00[8]ff[6]fe[2]00[8]f8c6c182[2]04[2]0800[8]3f7fffdf9f[4]860488f800[4]860488f800[c]fe[2]c1a190fffcd800[8]e0f0b89c[2]8c[3]0c0919[2]3b33276f0c0919[2]3b33276fff[10]fcfbf8f0f1e1[2]c3fcfbf8f0f1e1[2]c300[4]ff[4]00[8]9fa0c0ff00[4]9fa0c0ff00[c]8f[2]cf77340f00[a]ff[5]7fbf00[9]ff[4]fe[2]fd00[9]e7f7fe1e3cf800[a]9f[5]bfff7f00[8]fe[2]c1a190fffcdf00[8]0810[2]20e0c0fc0200[8]9f[5]a0ff4000[8]ff0f[3]ff00ff00[9]ff[5]00ff00[9]8c[4]ccf8[3]fcf8c06030188cc4fcf8c06030188cc44f48f0ff00[4]4f48f0ff00[4]e6160cf800[4]e6160cf800[c]f1[5]f9fdff00[8]f8f6f1[6]00ff[3]00[2]ff[2]00ff[3]00[2]ff[2]7fbf5f9f[5]7fbf5f9f[5]fefdfaf9[5]fefdfaf9[5]00[8]0d191b3337674fff807fff[3]bf9f[2]807fff[3]bf9f[2]3fdff0ff[4]f03fdff0ff[4]f0e4fa0cfafcfafc0ee4fa0cfafcfafc0e78bf5f9f[5]78bf5f9f[5]fefdfbfdf9[4]fefdfbfdf9[4]7ffffc00[5]7ffffc00[5]f1c00103[2]06[2]0cf1c00103[2]06[2]0cf3ff[2]fcfeff[3]f3ff[2]fcfeff[3]1f7f9f[6]1f7f9f[6]ff0100ff00[4]ff0100ff00[c]ff[4]0f[3]ff01fdfefd1e0dfefb01fdfefd1e0dfefb3f2f4f[6]3f2f4f[6]9f3fff[6]9f3fff[6]f9[10]00[8]ff[5]fe[2]ff9f[10]00[892]0105[3]0c[2]00[2]0105[3]0c[2]00f0c080c0[2]f800[2]f0c0bcdc[2]f80078f87468cceeff0078f87468cceeff00[11]01[2]02[2]05[2]090801[2]02[2]05[2]090880[2]c0[2]e0[2]f01080[2]c0[2]e0[2]f01009[5]19[2]2909[5]19[2]2910f0b030b018f8fc10f0b030b018f8fcb9[3]f9a9[2]f4f5b9[3]f9a9[2]f4f5f7[2]fff5[3]6feff7[2]fff5[3]6fef00[2]3c3f7f7c7d[2]071f3f7ffffcfd[2]00[3]e0f038[2]bce0f8fcfeff3fbf[2]00[4]18ff[2]8a00[c]18ff[2]8b00[28]0a0e0a0e0b0f07050a0e0a0e0b0f0705f09a[2]8778[2]f878f09a[2]8778[2]f8780a0f0103191c0e000a0f0103191c0e00b858d8[2]9c1e1f00b858d8[2]9c1e1f0009[10]f0[5]50[3]f0[5]50[3]2959[2]89b9[4]2959[2]89b9[4]fcf4f6[2]f1f7[3]fcf4f6[2]f1f7[3]555289b9b800[3]555289b9b800[3]eacb91971700[3]eacb91971700[3]7c7f[2]3f[3]00[2]fcfff17c7f[2]3f073efef8fcf0e000[2]3fffe71efc[2]f8e0ba8abab8ff[2]1800[9]bb9bbb89ff[2]1800[29]0a0f00[6]0a0f00[6]b8[2]300030383c00b8[2]300030383c000a0f000a07081b040a0f00[6]bc[2]0c000e0f00[2]bc[2]0c000e0f00[4a]555289b9b800[b]eacb91971700[63]18243c7e5a3c[2]6600[2cf8]
CHRCopy=18243c7e5a3c[2]6600[10]f8f6f1[6]00[8]ff[4]0f[3]ff00[8]f1[5]f9fdff9fa0c0ff00[4]9fa0c0ff00[4]f90503ff00[4]f90503ff00[4]807fff[3]bf9f[2]807fff[3]bf9f[2]30d0f0[6]30d0f0[6]00[10]9f[10]f0fefffcfeff[3]f0fefffcfeff[3]00[2]c06030188cc400[2]c06030188cc48f80407f00[4]8f80407f00[4]ff00[2]ff00[4]ff00[2]ff00[4]e6160cf800[4]e6160cf800[24]9fa0c0ff00[4]9fa0c0ff00[4]f90503ff00[4]f90503ff00[1c]4f48f0ff00[c]ff0100ff00[c]860488f800[c]9fa0c0ff00[c]f90503ff00[c]ff[8]00[8]fcfbf8f0f1e1[2]c300[8]1f7f9f[6]00[8]f9[8]00[8]9f[8]00[8]f0fefffcfeff[3]00[a]c06030188cc400[8]4f48f0ff00[c]ff0100ff00[c]860488f800[c]9fa0c0ff00[c]f90503ff00[c]8f80601f00[c]ff00[2]ff00[c]e4140cfc00[a]44aa00[6]993380[6]558880[6]991180[6]44aa00[6]881100[5]0145a800[6]88132040[2]80[2]00548a200040008000893300[6]44aa000200040008993300[6]558800[6]991114[4]10[2]44aa04[3]00[2]01881100[6]45a800[6]881304000201[2]00548a040002000100893300[5]2a44aa00[5]44993300[3cd0]
-NameTable=00[44]112f2a00[3]3500[4]222300[9]122f2a00[db]0102[4]0300[45]0102[4]0300[66]0102[2]0300[12d]0102[1e]0300[c4]112f2a00[8]222300[9]122f2a00[43]50[20]40[21]41[1e]40[2]00[1e]40[2]00[2]4243[2]4500464748004243[2]45004943[2]4c393a43610046474800[2]40[2]00[2]5253545500565758005253545500595a5b5c6575706000564b3600[2]40[2]00[3]636400[2]66676800[2]636400[2]696a6b6c3e62[2]7100663700[3]40[2]00[2]72737400[2]766d5d00[2]767400[2]7674004d4e4f6e740076384400[2]40[2]00[2]3b3c3d00[2]3f3c5f00[2]513d00[2]513d005e6f4a513d003f3c5f00[2]40[2]00[1e]40[41]00[8a]11002a261b331f2c00211b271f00[53]12002a261b331f2c00211b271f00[a9]
+NameTable=00[44]112f2a00[3]3500[4]222300[9]122f2a00[db]0102[4]0300[45]0102[4]0300[66]0102[2]0300[4c]aa00[1f]ba00[c0]0102[1e]0300[c4]112f2a00[8]222300[9]122f2a00[43]50[20]40[21]41[1e]40[2]00[1e]40[2]00[2]4243[2]4500464748004243[2]45004943[2]4c393a43610046474800[2]40[2]00[2]5253545500565758005253545500595a5b5c6575706000564b3600[2]40[2]00[3]636400[2]66676800[2]636400[2]696a6b6c3e62[2]7100663700[3]40[2]00[2]72737400[2]766d5d00[2]767400[2]7674004d4e4f6e740076384400[2]40[2]00[2]3b3c3d00[2]3f3c5f00[2]513d00[2]513d005e6f4a513d003f3c5f00[2]40[2]00[1e]40[41]00[8a]11002a261b331f2c00211b271f00[53]12002a261b331f2c00211b271f00[a9]
NameCopy=7172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d858e8f909192939495969798999a9b9c9d9e9fa0a1a200[74d]
-NameUndo=00[44]112f2a00[3]3500[4]222300[9]122f2a00[db]0102[4]0300[45]0102[4]0300[66]0102[2]0300[12d]0102[1e]0300[c4]112f2a00[8]222300[9]122f2a00[43]50[20]40[21]41[1e]40[2]00[1e]40[2]00[2]4243[2]4500464748004243[2]45004943[2]4c393a43610046474800[2]40[2]00[2]5253545500565758005253545500595a5b5c6575706000564b3600[2]40[2]00[3]636400[2]66676800[2]636400[2]696a6b6c3e62[2]7100663700[3]40[2]00[2]72737400[2]76775d00[2]767400[2]7674004d4e4f6e740076384400[2]40[2]00[2]3b3c3d00[2]3f3c5f00[2]513d00[2]513d005e6f4a513d003f3c5f00[2]40[2]00[1e]40[41]00[8a]11002a261b331f2c00211b271f00[53]12002a261b331f2c00211b271f00[a9]
+NameUndo=00[44]112f2a00[3]3500[4]222300[9]122f2a00[db]0102[4]0300[45]0102[4]0300[66]0102[2]0300[12d]0102[1e]0300[c4]112f2a00[8]222300[9]122f2a00[43]50[20]40[21]41[1e]40[2]00[1e]40[2]00[2]4243[2]4500464748004243[2]45004943[2]4c393a43610046474800[2]40[2]00[2]5253545500565758005253545500595a5b5c6575706000564b3600[2]40[2]00[3]636400[2]66676800[2]636400[2]696a6b6c3e62[2]7100663700[3]40[2]00[2]72737400[2]766d5d00[2]767400[2]7674004d4e4f6e740076384400[2]40[2]00[2]3b3c3d00[2]3f3c5f00[2]513d00[2]513d005e6f4a513d003f3c5f00[2]40[2]00[1e]40[41]00[8a]11002a261b331f2c00211b271f00[53]12002a261b331f2c00211b271f00[a9]
-AttrTable=0300[14]405511040501515000[2]c000010005[2]00[1b]a0[8]aa[18]00[18]
+AttrTable=0300[14]405511040501515000[2]c000010005[2]00[2]4400[18]a0[8]aa[18]00[18]
AttrCopy=aa[18]00[60]
@@ -324,14 +324,14 @@ MetatileSet_8x8_props=00[2000]
MetatileSet_8x8_propsUndo=00[2000]
-MetatileSetLabels_2x2=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-MetatileSetLabels_2x2Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+MetatileSetLabels_2x2=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+MetatileSetLabels_2x2Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-MetatileSetLabels_4x4=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-MetatileSetLabels_4x4Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+MetatileSetLabels_4x4=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+MetatileSetLabels_4x4Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-MetatileSetLabels_8x8=Unlabeled,Unlabeled
-MetatileSetLabels_8x8Undo=Unlabeled,Unlabeled
+MetatileSetLabels_8x8=Unlabeled,Unlabeled
+MetatileSetLabels_8x8Undo=Unlabeled,Unlabeled
CHRBankLabels=Unlabeled,Unlabeled,Unlabeled,Unlabeled
@@ -496,18 +496,18 @@ Checkpoint_MetatileSet_8x8_props=00[2000]
Checkpoint_MetatileSet_8x8_propsUndo=00[2000]
-Checkpoint_MetatileSetLabels_2x2=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-Checkpoint_MetatileSetLabels_2x2Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_2x2=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_2x2Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-Checkpoint_MetatileSetLabels_4x4=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-Checkpoint_MetatileSetLabels_4x4Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_4x4=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_4x4Undo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-Checkpoint_MetatileSetLabels_8x8=Unlabeled,Unlabeled
-Checkpoint_MetatileSetLabels_8x8Undo=Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_8x8=Unlabeled,Unlabeled
+Checkpoint_MetatileSetLabels_8x8Undo=Unlabeled,Unlabeled
-Checkpoint_CHRBankLabels=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_CHRBankLabels=Unlabeled,Unlabeled,Unlabeled,Unlabeled
-Checkpoint_CHRBankLabelsUndo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
+Checkpoint_CHRBankLabelsUndo=Unlabeled,Unlabeled,Unlabeled,Unlabeled
Checkpoint_32_NTSC_MsprDuration=00000006[100]
diff --git a/src/assets.s b/src/assets.s
index ffc6585..3d1a6a3 100644
--- a/src/assets.s
+++ b/src/assets.s
@@ -161,6 +161,7 @@
.byte $0F, $16, $30, $00
;; TODO: fuel tank needs color $24
+ ;; TODO: SUSE coin needs $0F, $16, $10, $18
;; Foreground
;; 0: player & ship
.byte $0F, $30, $10, $30
diff --git a/src/player.s b/src/player.s
index af5572b..dc87cb0 100644
--- a/src/player.s
+++ b/src/player.s
@@ -61,15 +61,24 @@
;; Flags that manage the state of the game.
;;
- ;; | Bit | Short name | Meaning when set |
- ;; |-----+------------+----------------------------------------------------------|
- ;; | 7 | throttle | Player is hitting the throttle |
- ;; | 6 | heading | heading right |
- ;; | 5-3 | - | Unused |
- ;; | 2 | update | Sprite (animation or heading) must be updated |
- ;; | 1-0 | walk | 0: still; 1: animation 1; 2: animation 2, 3: animation 3 |
+ ;; | Bit | Short name | Meaning when set |
+ ;; |-----+------------+-----------------------------------------------|
+ ;; | 7 | throttle | Player is hitting the throttle |
+ ;; | 6 | heading | heading right |
+ ;; | 5-3 | - | Unused |
+ ;; | 2 | update | Sprite (animation or heading) must be updated |
+ ;; | 1-0 | walk | 0: still; 1: animation 1; 2: animation 2 |
zp_state = $50
+ ;; Simple counter for the walking animation.
+ zp_walk_counter = $51
+
+ ;; How many animations are there for walking?
+ WALK_ANIMATION_NR = 3
+
+ ;; How many frames are we allowing for each walk animation state?
+ WALK_COUNTER_MAX = (HZ / 10)
+
;; Initialize the player's sprite. Note that for the sprite to look
;; correctly on screen you still need to call `Player::update` afterwards.
.proc init
@@ -77,12 +86,13 @@
lda #%01000100
sta zp_state
- ;; Reset velocity
+ ;; Reset velocity and walking counter.
lda #0
sta zp_target_velocity_y
sta zp_velocity_y
sta zp_target_velocity_x
sta zp_velocity_x
+ sta zp_walk_counter
;; Set position, and the screen coordinates will be updated upong
;; calling `update`, which on initialization will happen right after.
@@ -98,10 +108,56 @@
rts
.endproc
+ ;; Call this function to update anything player-related. Ideally this should
+ ;; be called on each game iteration for the main screen, and after the
+ ;; controller has been read.
.proc update
+ ;; Update both vertical and horizontal positions.
jsr update_vertical_position
jsr update_horizontal_position
+ ;; If throttling, then reset the walking counter and the walk state.
+ bit zp_state
+ bpl @walk_animation
+ lda #0
+ sta zp_walk_counter
+ lda #%11111100
+ and zp_state
+ sta zp_state
+ jmp @to_screen
+
+ @walk_animation:
+ ;; If the player is not even moving, skip the animation.
+ lda zp_velocity_x
+ beq @to_screen
+
+ ;; Increase the counter and check for its maximum value.
+ inc zp_walk_counter
+ lda zp_walk_counter
+ cmp #WALK_COUNTER_MAX
+ bne @to_screen
+
+ ;; The counter has reached the maximum value. Increase the walk state.
+ lda zp_state
+ tax
+ and #%00000011
+ clc
+ adc #1
+ cmp #WALK_ANIMATION_NR
+ bne @set_animation
+ lda #0
+ @set_animation:
+ sta Globals::zp_tmp0
+ txa
+ and #%11111100
+ ora Globals::zp_tmp0
+ sta zp_state
+
+ ;; And reset the counter.
+ lda #0
+ sta zp_walk_counter
+
+ @to_screen:
;; At this point all positions are clear, transform them into screen
;; coordinates, eject out from boundaries and platforms, and update the
;; sprite with the new state.
@@ -424,8 +480,8 @@
lda #0
sta zp_velocity_y
- ;; Set the player's state to grounded and with the still animation.
- lda #%01111100
+ ;; Set the player's state to grounded.
+ lda #%01111111
and zp_state
ora #%00000100
sta zp_state
@@ -465,10 +521,30 @@
;; dealing with heading can rely on these two registers.
bit zp_state
bmi @throttle
- ;; TODO: walk animation
+
+ ;; The walking sprites depends on the current walking animation set on
+ ;; the player's state.
+ lda zp_state
+ and #%00000011
+ cmp #1
+ beq @animation1
+ cmp #2
+ beq @animation2
+ ;; NOTE: fallthrough for either 0 or even buggy states.
+ @still:
ldx #$21
ldy #$20
bne @heading
+ @animation1:
+ ldx #$02
+ ldy #$20
+ bne @heading
+ @animation2:
+ ldx #$13
+ ldy #$12
+ bne @heading
+
+ ;; There's only one set for the throttle, no animations here.
@throttle:
ldx #$23
ldy #$22