diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-03-20 18:44:36 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-03-20 18:44:36 +0100 |
| commit | e0bdeaed3b2face03bb388df565344e688759bb3 (patch) | |
| tree | 417495858b595c32a9892718e40ebe1d0b2c7702 | |
| parent | 7599259a573cbb93f02b8e8ee68bb4a987ccac22 (diff) | |
| download | jetpac.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.md | 2 | ||||
| -rw-r--r-- | assets/jetpac.chr | bin | 8192 -> 8192 bytes | |||
| -rw-r--r-- | assets/session.nss | 62 | ||||
| -rw-r--r-- | src/assets.s | 1 | ||||
| -rw-r--r-- | src/player.s | 98 |
5 files changed, 120 insertions, 43 deletions
@@ -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 Binary files differindex 91dbe19..375f665 100644 --- a/assets/jetpac.chr +++ b/assets/jetpac.chr 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 |
