<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sly Dog Studios</title>
	<atom:link href="http://slydogstudios.org/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://slydogstudios.org</link>
	<description>NES Development by Sly Dog Studios</description>
	<lastBuildDate>Fri, 27 Jan 2012 22:25:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>NES Virus Cleaner Appears in Retro Gamer Magazine!</title>
		<link>http://slydogstudios.org/index.php/2011/09/nes-virus-cleaner-appears-in-retro-gamer-magazine/</link>
		<comments>http://slydogstudios.org/index.php/2011/09/nes-virus-cleaner-appears-in-retro-gamer-magazine/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 17:19:37 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[NES Virus Cleaner]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=199</guid>
		<description><![CDATA[One time when I was jamming in my old band Slow Intentional Damage, someone told me that I was like a little kid in a candy store while talking about the songs that we were writing. I showed all kinds of excitement when we were talking about what we could do at *such-and-such* part, or [...]]]></description>
			<content:encoded><![CDATA[<p>One time when I was jamming in my old band Slow Intentional Damage, someone told me that I was like a little kid in a candy store while talking about the songs that we were writing. I showed all kinds of excitement when we were talking about what we could do at *such-and-such* part, or what we could do on the third stanza of *such-and-such* part. There have always been things that get me going like that, and NES development happens to be one of those things. Coming up with new ideas, even if I don&#8217;t make them happen on a game, makes my mind wander. I think it&#8217;s creating things that really grip my imagination. I probably get that from my father, who used to do things such as create his own armor for the Society of Creative Anachronism.</p>
<p>After finishing a game, every now-and-then shortly thereafter, I like to hit Google and see if there are any new things that turn up about the game on the web. I was pretty much done doing that, as I didn&#8217;t expect to find anything else on what was going to be the last time I did such a search. I released it at the end of April, so it&#8217;s getting close to six-months out, and there won&#8217;t be much new to read about what people might have to say about it. So you can imagine my surprise (and excitement) when I actually found something new on a blog called <a href="http://irishnintendofan.blogspot.com/2011/09/retro-gamer-issue-93.html">Irish Nintendo Fan</a> (love the name of the site!):</p>
<p class="blog_quote">
One of the featured homebrew reviews [in Retro Gamer Magazine issue #93] I like was NES Virus Cleaner. I tried it for myself and it&#8217;s quite addictive but tough, avoiding things like you would in say, Frogger and collecting all the bits to complete a level.
</p>
<p>Ah, good ol&#8217; <a href="http://www.retrogamer.net/">Retro Gamer Magazine</a>! My game prior to NES Virus Cleaner, that being <a href="http://slydogstudios.org/index.php/2009/03/pegs-gets-reviewed-in-retro-gamer-magazine/">Pegs</a>, actually appeared in there as well. It had a fair review from a guy named Jason Kelk, and though I can&#8217;t tell for sure, I believe he did the write-up this time around, too (the initials J.K. appear at the beginning of the article).</p>
<p>Once again, it is a solid write-up, and I&#8217;m grateful to have appeared in a magazine! It&#8217;s a cool feeling for sure. I&#8217;m definitely going to look into getting my hands on this issue, as I failed to get the Pegs issue last time. Here is a pic of it that a friend of mine, and also one of the lead testers of NES Virus Cleaner, took for me. Click to read it:</p>
<p><center><br />
<div id="attachment_200" class="wp-caption aligncenter" style="width: 160px"><a href="http://slydogstudios.org/index.php/2011/09/nes-virus-cleaner-appears-in-retro-gamer-magazine/nesviruscleanerwriteup/" rel="attachment wp-att-200"><img src="http://slydogstudios.org/wp-content/uploads/NESviruscleanerwriteup-150x150.jpg" alt="NES Virus Cleaner" title="NES Virus Cleaner in Retro Gamer Magazine" width="150" height="150" class="size-thumbnail wp-image-200" /></a><p class="wp-caption-text">The new phonebook is here!</p></div><br />
</center></p>
<p>I don&#8217;t know if you still lurk around here, but I&#8217;d like to once again thank you, Jason, for the opportunity to be in the magazine! Oh, and you can rest easy knowing that I don&#8217;t hit the coffee as hard as I used to ; )</p>
<p><center><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/ahuPW6_t-z0?rel=0" frameborder="0" allowfullscreen></iframe><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/09/nes-virus-cleaner-appears-in-retro-gamer-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Darned NES Scrolling</title>
		<link>http://slydogstudios.org/index.php/2011/09/darned-nes-scrolling/</link>
		<comments>http://slydogstudios.org/index.php/2011/09/darned-nes-scrolling/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 19:00:53 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[6502 Code]]></category>
		<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=207</guid>
		<description><![CDATA[Yesterday I decided to try and implement an intro for the story of Ardent Assault. I kind of wanted that Star Wars-esque scrolling the words up dealy. The only problem was, I have never scrolled more than one screen at a time! I thought it would be fairly easy to implement, and had hoped it [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I decided to try and implement an intro for the story of Ardent Assault. I kind of wanted that Star Wars-esque scrolling the words up dealy. The only problem was, I have never scrolled more than one screen at a time! I thought it would be fairly easy to implement, and had hoped it would take only an hour. Unfortunately, it took up my entire day yesterday, plus a little time after I got home from work to get it to behave properly. Ugh.</p>
<p>But the way I have the scrolling now feels&#8230; I don&#8217;t know. Like I&#8217;m not doing something properly. I can&#8217;t seem to comprehend the relationship between $2000, $2005, and $2006 that I&#8217;m always hearing about. Anyway, here is the code that I came up with after all kinds of time spent, and some guidance in IRC:</p>
<pre>
intro_nmi:
	lda time_write_count			; Check if we should write words to background
	beq :+					;  if so, jump over a couple instructions
		dec time_write_count		;  if not, decrement time_write_count
		jmp @scroll			;  and continue to scroll the screen
:	ldx offset_x_reg			; Use RAM register for our X offset
	lda intro_ppu_addy_hi, x		;  and check if #$ff is loaded from the table
	cmp #$ff				;  if it isn't, jump over an instruction
	bne :+					;  if it is #$ff, jump to the end of NMI,
		jmp end_nmi			;  effectively freezing the program
:	ldy offset_y_reg			; Load the RAM register for Y offset
	lda intro_lo, y				;  and use it to setup the pointer. The pointer
	sta pointer1				;  points to words to be printed to the
	lda intro_hi, y				;  background
	sta pointer1+1				;
	lda intro_ppu_addy_hi, x		; Use X to select from a table of background
	sta $2006				;  addresses to which to write to. Hi and lo,
	lda intro_ppu_addy_lo, x		;  of course
	sta $2006				;
	ldy #$00				; Use Y _without_ the RAM register offset,
:	lda (pointer1), y			;  and use it to grab the letters of the words
	sta $2007				;  and write them to the background
	iny					;  increment Y
	cpy #$1a				;  and check it against #$1a (the number of
	bne :-					;  letters in each row). Branch back if needed
	inx					; Increment X and store it back in the RAM
	stx offset_x_reg			;  X offset
	inc offset_y_reg			;  Increment the Y RAM offset
	lda #$38				; Use #$38 as the amount of time that needs to
	sta time_write_count			;  countdown before writing to the background
	lda reg2006hi				; Select the base nametable. In this routine,
	sta $2006				;  reg2006hi will be either #$20 or #$28
	lda #$00				;
	sta $2006				;
@scroll:
	bit $2002
	lda scroll_x_hi				; scroll_x_hi will never be anything but zero
	sta $2005				;  in this routine
		lda scroll_y_lo			; We want to scroll slower than 1 pixel per
		clc				;  frame, so we have a hi and lo value for
		adc #&lt;intro_scroll_speed	;  the Y scroll. intro_scroll_speed is set
		sta scroll_y_lo			;  at $0040 in the declarations
		lda scroll_y_hi			;
		adc #&gt;intro_scroll_speed	;
		sta scroll_y_hi			;
		cmp #$ef			; Check if the scroll has reached #$ef
		bne @store_scroll		;  branch and store scroll_y_hi in 2005 if not
			lda reg2006hi		; If it did reach #$ef, check if reg2006hi is
			cmp #$20		;  #$20, and if it is...
			bne :+			;
				lda #$28	;  ... stick #$28 in there
				sta reg2006hi	;  to use as the base nametable next time
				jmp :++		;  then jump two instructions
:			lda #$20		; If reg2006hi was NOT #$20, then make it that
			sta reg2006hi		;  number
:			lda reg2000save		; Load the $2000 register we made in RAM, and
			eor #%00000010		;  flip the bit for which nametable to scroll
			sta reg2000save		;  on. Be sure to save it in both reg2000save
			sta $2000		;  and the $2000 register itself
			lda #$00		; Reset the scroll_y_hi to zero
			sta scroll_y_hi		;
@store_scroll:
		sta $2005			; The second and final write to the scroll
	jmp end_nmi
</pre>
<p>I know there is some clean-up that can be done, like the inx/stx thing, followed by an inc, but whatever. Anywheres, the main loop of the program does nothing but keep waiting for another NMI to fire.</p>
<p>But yeah, I&#8217;m feeling like it&#8217;s just not right. It works, but feels wrong. If anyone has a better approach for this, please let me know! If you just want to see the end result of this, <a href="http://slydogstudios.org/video/aa_intro.avi">here is a vid</a> (ignore the font, it&#8217;s just a placeholder).</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/09/darned-nes-scrolling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://slydogstudios.org/video/aa_intro.avi" length="10344448" type="video/avi" />
		</item>
		<item>
		<title>Preserving a Hi-Score on NES</title>
		<link>http://slydogstudios.org/index.php/2011/09/preserving-a-hi-score-on-nes/</link>
		<comments>http://slydogstudios.org/index.php/2011/09/preserving-a-hi-score-on-nes/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 08:50:03 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[6502 Code]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=197</guid>
		<description><![CDATA[So I was at work thinking to myself. I said to myself, I says, &#8220;Self, what was it that you had heard about that one time&#8230; you know, about preserving a hi score on NES in the 700 page of RAM?&#8221; What I&#8217;m babbling about, is this. You know how you play some game that [...]]]></description>
			<content:encoded><![CDATA[<p>So I was at work thinking to myself. I said to myself, I says, &#8220;Self, what was it that you had heard about that one time&#8230; you know, about preserving a hi score on NES in the 700 page of RAM?&#8221;</p>
<p>What I&#8217;m babbling about, is this. You know how you play some game that has a hi score feature in it, but if you press reset, the hi score is still there? Well, oddly enough I never put much thought into it. But tonight it popped into my head, and I figured out how to do it. I remember someone telling me that the way you can do it is by having a space in RAM set aside that you don&#8217;t erase at the reset routine, and fill it with specific bytes. When it gets reset after those bytes are fed into it, you test them against the same bytes in ROM, and if they match, you don&#8217;t zero out the hi score. I don&#8217;t know if that sounds confusing, but here&#8217;s the code I came up with:</p>
<pre>
; in the declarations, of course
ram_check		=	$700
hi_ten			=	$706
hi_hundreds		=	$707
hi_thousands		=	$708
hi_ten_thousands	=	$709
hi_hun_thousands	=	$70a

; this is in ROM
rom_check:					; The string that gets put in RAM for
	.byte "SLYDOG"				; the hi score check

; and the actual subroutine that happens at reset
slydog_ram_check:
	ldx #$00
@start_ram_check:
	lda ram_check, x			; compare the RAM starting at $700 to
	cmp rom_check, x			; the ROM at rom_check
	beq @fill_ram_check			; if one of the bytes don't match
		ldx #$00			; throw zero back in the X register
@write_rom_ram:
		lda rom_check, x		; load a byte from rom_check
		sta ram_check, x		; store it in ram_check
		inx				; increment X and repeat until
		cpx #$06			; X is 6
		bne @write_rom_ram
			lda #$00		; Now throw a zero in all of the
			sta hi_ten		; hi score bytes. This means it
			sta hi_hundreds		; was a hard power up, so there is
			sta hi_thousands	; no hi score saved. If we don't do
			sta hi_ten_thousands	; this, the NES will print garbage
			sta hi_hun_thousands	; on-screen as the hi score
			jmp @done_check		; routine is done
@fill_ram_check:
	inx					; if the original comparison matched
	cpx #$06				; then we increment X six times
	bne @start_ram_check			; to be sure the whole string matches
@done_check:
	rts					; and we're outta here
</pre>
<p>It seems to work for me fairly well. It can also be used in other pages of RAM. I had heard that the 700 page was for stuff that needed to be saved, but it works in other places I tested. Anyway, I just thought it was cool and that I&#8217;d share : )</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/09/preserving-a-hi-score-on-nes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Early Times of Ardent Assault</title>
		<link>http://slydogstudios.org/index.php/2011/05/the-early-times-of-ardent-assault/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/the-early-times-of-ardent-assault/#comments</comments>
		<pubDate>Thu, 19 May 2011 20:41:07 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=195</guid>
		<description><![CDATA[I just realized that back when I first made the 3D maze demo, I didn&#8217;t actually blog about it! I figure that since I&#8217;m in a bit of a slump right now, maybe talking about the idea and the short evolution it took on might help me get motivated. Some of this is copy/pasta from [...]]]></description>
			<content:encoded><![CDATA[<p>I just realized that back when I first made the 3D maze demo, I didn&#8217;t actually blog about it! I figure that since I&#8217;m in a bit of a slump right now, maybe talking about the idea and the short evolution it took on might help me get motivated. Some of this is copy/pasta from a couple of forums, so uh, if you recognize some of the wording, that&#8217;d be why ; )</p>
<p>I&#8217;ve always been really fond of 3D mazes, like those found in the Golgo games, Ultima, etc. What I was looking to do was take the speed of the <a href="http://www.youtube.com/watch?v=stuzVQxoYsI">Golgo 13 &#8211; Top Secret Episode mazes</a>, and combine that with the smoothness of the <a href="http://www.youtube.com/watch?v=q2kKGiTZmGY">Mafat Conspiracy mazes</a>. I opted to use the same kind of screen layout from Mafat, with the big status bar at the bottom. In this way, I have less tiles to load. My initial build was good, because I got the actual maze loading and you were able to navigate around. The problem was with the screen loading, though. You could move VERY fast, but the screen flashed too much, kinda like Top Secret Episode. To play how it was in it&#8217;s original state, check out this ROM:</p>
<p><a href="http://slydogstudios.org/download/maze_orig.nes">http://slydogstudios.org/download/maze_orig.nes</a></p>
<p>What I really wanted to incorporate was how Mafat Conspiracy loaded in one nametable, then switched to the other nametable to have a seamless transition. After alot of time debugging, going through my code, and some folks in #nesdev testing it out via different emus and a powerpak, I finally found the right balance I was looking for. The thing that topped it off was my buddy Phil&#8217;s suggestion to be able to hold down the FORWARD button, instead of a constant pressing of it each time you wanted to move. This added to the feel and pacing that I really wanted in it, being an action game. Here&#8217;s a quick vid I whipped up a few minutes ago to show the nametable switching while playing (quality isn&#8217;t great):</p>
<p><a href="http://slydogstudios.org/video/aa_nametable_switch.wmv">http://slydogstudios.org/video/aa_nametable_switch.wmv</a></p>
<p>So that&#8217;s the basics of how it came from a Top Secret Episode style maze to a blend of that game and Mafat Conspiracy. Now with a character in the mix, it has a weird blend of Cabal, Punisher, and Smash TV going on, too. Pretty crazy haha</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/the-early-times-of-ardent-assault/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://slydogstudios.org/video/aa_nametable_switch.wmv" length="157265" type="video/asf" />
		</item>
		<item>
		<title>Ace Firing His Weapon</title>
		<link>http://slydogstudios.org/index.php/2011/05/ace-firing-his-weapon/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/ace-firing-his-weapon/#comments</comments>
		<pubDate>Thu, 12 May 2011 20:52:46 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=192</guid>
		<description><![CDATA[Got around to getting Ace&#8217;s weapon to fire today! For awhile he wasn&#8217;t firing when he was angled with his weapon facing to the right. Well, he was firing, but the blast from the gun wasn&#8217;t appearing at the end of it. I looked through the code over and over, kept watching certain places in [...]]]></description>
			<content:encoded><![CDATA[<p>Got around to getting Ace&#8217;s weapon to fire today!</p>
<p>For awhile he wasn&#8217;t firing when he was angled with his weapon facing to the right. Well, he was firing, but the blast from the gun wasn&#8217;t appearing at the end of it. I looked through the code over and over, kept watching certain places in memory and so-forth. I just couldn&#8217;t find it, and it ended up I had added and subtracted in opposite places haha The bad thing is, I looked at that quite a few times thinking that might&#8217;ve been the problem. For some reason I was thinking backwards the whole time, and it finally hit me. So dumb : P</p>
<p>The code isn&#8217;t really anything special enough to paste on here. It&#8217;s actually probably considered &#8220;bad practice&#8221; by some, but whatever. A person once told me on that same subject, &#8220;No, if you got it working, then you got it right.&#8221; Anywho, here is a quick vid of it in action:</p>
<p><a href="http://slydogstudios.org/video/aa_shooting.avi">http://slydogstudios.org/video/aa_shooting.avi</a></p>
<p>When you are facing dead-on forward and not angled, there was no way to know that you were firing, minus the sound effect. I wanted to have a visual of it, too. I ended up slightly changing the aiming sights and just have those two sprites shift in and out with two other slightly modified aiming sights. This gives it a bit of motion, though it won&#8217;t affect the actual hitbox when it is put in place. It&#8217;s just there to make it a bit more purdy-ful : )</p>
<p>All-in-all, I think it turned out good!</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/ace-firing-his-weapon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://slydogstudios.org/video/aa_shooting.avi" length="1713160" type="video/avi" />
		</item>
		<item>
		<title>The Gaming Goodness Revisionists</title>
		<link>http://slydogstudios.org/index.php/2011/05/the-gaming-goodness-revisionists/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/the-gaming-goodness-revisionists/#comments</comments>
		<pubDate>Thu, 12 May 2011 18:16:01 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[Editorials]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=210</guid>
		<description><![CDATA[Before I start, yes, I realize that there are different tastes in games for different folks. Opinions vary, but holy crap, do we ever have some revisionists in the gaming world. What I mean by this is how so many people knock so many games from the old-school systems that are good. It&#8217;s become somewhat [...]]]></description>
			<content:encoded><![CDATA[<p>Before I start, yes, I realize that there are different tastes in games for different folks. Opinions vary, but holy crap, do we ever have some revisionists in the gaming world. What I mean by this is how so many people knock so many games from the old-school systems that are good. It&#8217;s become somewhat of a fad to say *such-and-such game* sucks bad, and it <em>always has</em>. Well, if a game sucks, then yes, it always has. Either a game is good, or a game is bad. Period. Whether or not that style of game, and the little tweaks within each one appeals to certain individuals is subjective of course.</p>
<p>With that said, how many times have I heard that Castlevania II, Double Dragon III, Friday the 13th, Super Mario Bros. 2, etc., just out-right suck, and that people have always hated these games? So many times that it boggles the mind! Zelda II&#8230; apparently that sucks and no one liked it&#8230; ever. That&#8217;s always the implication or what is said. &#8220;Remember when you were so happy that a new Zelda was out, and you bought it and got home and then you were like, &#8216;what the fuck is this shit?&#8217;&#8221; Always. ALWAYS ALWAYS ALWAYS hear crap like this. As a matter of fact, no, I don&#8217;t remember thinking anything like that at all. As a matter of fact, I seem to remember everyone in our town loving Zelda II.</p>
<p>I have a friend that I have been getting reacquainted with on Facebook. He has been thinking about NES again lately, and what did I see in my updates today?:</p>
<p><center><br />
<div id="attachment_211" class="wp-caption aligncenter" style="width: 419px"><a href="http://slydogstudios.org/index.php/2011/05/the-gaming-goodness-revisionists/f13_awesome/" rel="attachment wp-att-211"><img src="http://slydogstudios.org/wp-content/uploads/f13_awesome.png" alt="Friday the 13th" title="Friday the 13th Status Update" width="409" height="215" class="size-full wp-image-211" /></a><p class="wp-caption-text">Wait, you mean people actually liked it?! Damn right.</p></div><br />
</center></p>
<p>Yup, that&#8217;s right, another person that used to love Friday the 13th. It wasn&#8217;t too hard to find them around here. Funny how the Internet seems to say otherwise, but myself and all of my friends loved it.</p>
<p>The Super Mario Bros. 2 argument pisses me off more than anything. Like most people know, there was a Mario 2 in Japan, and a different one here in The States. Now, because we have a different game of SMB2, people call the Japanese version of SMB2 the REAL sequel to SMB. Real? What? So, you are telling me that growing up, I was playing a fake game. No, dumbasses. They also like to say things along the lines of, &#8220;SMB2 was always the oddball of the Mario trilogy on NES, so it&#8217;s no wonder that it doesn&#8217;t get much attention.&#8221; When I hear statements like this, it clues me in right away that they are a bumbling buffoon. If you were around to play these games when they came out, you would remember people saying things like, &#8220;Hey man, let&#8217;s go play some Mario 2!,&#8221; to which a reply like, &#8220;Alright!,&#8221; would follow. As a matter of fact, when SMB3 came out, a lot of people were disappointed because it reminded them more of the first game in the series! After some time, it grew on folks, but the whole &#8216;destroy blocks&#8217; thing was a flash to the past at first, and kind of felt regressive. Only after you had played more into it did you realize that it was a pretty damn good game.</p>
<p>Oh, and how do people explain away why it is that we got a different version of SMB2 in the US? Well, that&#8217;s easy for them, because the Japanese counter-part was considered <em>too hard for Americans</em>. Yes, the good ol&#8217; defeatist, &#8220;we&#8217;re Americans and Japanese are better,&#8221; crap that has been spilling into these folks&#8217; brains. If something like this is true, then I beg these people to play the Japanese Ninja Gaiden 3 and compare it to the US Ninja Gaiden 3. How about the differences in the Bayou Billy versions? Did they just decide that Japanese people couldn&#8217;t handle the challenge on those games? I mean, Christ.</p>
<p>Castlevania II. The ENTIRE INTERNET HATES THIS GAME NOW. Sorry Charlie, but no one hated it at all when it came out. No one that I can think of, at least. It was considered a good game. People played it. People beat it. Now we have people on Youtube running around with friggin&#8217; tourettes and yelling how much it sucked. Go play your Call of Duty, chumps.</p>
<p>And that&#8217;s just it. I can&#8217;t tell if some of these people are young and just weren&#8217;t around for the release of these games, or if they were the oddballs growing up that seem to be able to infect everyone with this crap.</p>
<p>There&#8217;s more to say on this, but I&#8217;m tired of thinking about it. Another time, maybe.</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/the-gaming-goodness-revisionists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Enemy Types</title>
		<link>http://slydogstudios.org/index.php/2011/05/thoughts-on-enemy-types/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/thoughts-on-enemy-types/#comments</comments>
		<pubDate>Wed, 11 May 2011 21:15:34 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[6502 Code]]></category>
		<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=178</guid>
		<description><![CDATA[I didn&#8217;t get around to working on having Ace fire in the game today, but I did get all the hotspots set up, and the proper direction that you have to face for each encounter as well. This brought something else to my mind; defining the enemy clusters. I am figuring that I will add [...]]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t get around to working on having Ace fire in the game today, but I did get all the hotspots set up, and the proper direction that you have to face for each encounter as well. This brought something else to my mind; defining the enemy clusters.</p>
<p>I am figuring that I will add in another row of bytes to go along with the hotspots and direction to face, that being the cluster type. Within each cluster type will be a listing of enemy types. Something like:</p>
<pre>
clusters_a:
	.byte &lt;cluster00,&lt;cluster01,&lt;cluster02 ; low byte of cluster type
clusters_b:
	.byte &gt;cluster00,&gt;cluster01,&gt;cluster02 ; high byte of cluster type
cluster00:
	.byte $01,$01,$00,$02,$01,$03 ; list of enemy types
</pre>
<p>I think of this in a similar way as metatile compression, since I could actually reuse clusters if the environment permits. The only difference here is that it isn&#8217;t really for compression, but more for organization as a whole. Anywhat, the code to set up for the init to battle will look something like this in its final form:</p>
<pre>
cluster_ram		= $590
cluster_direction	= $598
cluster_types		= $5a0

;-----------------------------

enemy_cluster_pos1:
	.byte $18,$6e,$86,$b1,$cb,$00,$00,$00 ; position of enemy clusters
	.byte $02,$02,$20,$80,$08,$00,$00,$00 ; direction to turn to at hotspot
	.byte $xx,$xx,$xx,$xx,$xx,$00,$00,$00 ; cluster type [where xx is data]

check_cluster:
	ldx #$00		; set register X to zero
:	lda cluster_ram,x	; load A with the cluster offset by X
	cmp player_pos		; check if it matches with the player position
	beq :+			; if it does, jump to set things up for battle
		inx		; if not, increase X by one and compare it
		cpx #$08	; to the max number of enemy clusters, which
		bne :-		; is eight. Branch back and check all eight.
			jmp :++	; If all checks don't match, jump over the
:				; init for battle.
	lda still_writing_bg	; If other nametable is still loading, wait
	bne :+			; until it is finished to setup battle init
		lda cluster_direction,x	; Grab the direction the player will
		sta battle_direction	; face and store for later use
		lda cluster_types,x	; Grab the type of cluster that will
		sta cluster_type	; be used in this encounter and store
		lda #$00		; Clear the cluster to zero using X
		sta cluster_ram,x	; as the offset so that we don't fight
		lda #$02		; these enemies again
		jsr music_loadsfx	; Load the sound for the alarm.
		lda #$01		; Make being_attacked non-zero so we
		sta being_attacked	; will jump to the proper loop for battle
:	rts
</pre>
<p>I think that will be all the changes I have to make to that code. I had to throw in the check of still_writing_bg from the screen loading routine in order to make sure it was finished up before loading the screen of the direction that Ace will have enemies attacking from. Glad I had that in the code, as it made for an easy check!</p>
<p>So the enemies are going to be done differently in this game than from NES Virus Cleaner. In that game, I had 5 basic types of enemies. What was bad about that is that I had to define how each one behaved. Such as, Shokr v1, it would move at a certain speed, and another Shokr 1 would move at a different speed. The speed was an extra byte that I had defined each time. It would&#8217;ve been better had I defined those as two different enemy types, but alas I didn&#8217;t. See the pic?:</p>
<div id="attachment_179" class="wp-caption aligncenter" style="width: 266px"><a href="http://slydogstudios.org/wp-content/uploads/aa_enemy_type_proto_thought.png"><img src="http://slydogstudios.org/wp-content/uploads/aa_enemy_type_proto_thought.png" alt="Ardent Assault" title="Example of Enemy Behavior" width="256" height="240" class="size-full wp-image-179" /></a><p class="wp-caption-text">Whoa, numbers are charging at me!</p></div>
<p>The 1 and 2 are representing where an enemy would start at, for example. The lines from each represent what their heading would be. In NES Virus Cleaner, they would&#8217;ve been defined as the same enemy type. In this, I am planning on making their behavior dictate the enemy type. Even though they might look the same, they behave differently, so it only makes sense to have the type be different. That should save a lot of headaches, too!</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/thoughts-on-enemy-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Around During Combat</title>
		<link>http://slydogstudios.org/index.php/2011/05/moving-around-during-combat/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/moving-around-during-combat/#comments</comments>
		<pubDate>Tue, 10 May 2011 20:56:15 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=175</guid>
		<description><![CDATA[Just a quick update here. I managed to get entering combat mode, and also movement within combat mode. Both the character and the aiming cursor. I have a button assigned to the byte that tells whether or not you are in combat for now, so that I can exit it and test all the hotspots [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick update here. I managed to get entering combat mode, and also movement within combat mode. Both the character and the aiming cursor. I have a button assigned to the byte that tells whether or not you are in combat for now, so that I can exit it and test all the hotspots on the maps. Level one went swimmingly! I don&#8217;t have much time, so here&#8217;s a vid for you to check out:</p>
<p><a href="http://robertlbryant.com/video/aa_enter_combat.wmv">http://robertlbryant.com/video/aa_enter_combat.wmv</a></p>
<p>Sorry about the stretched look, but I had to encode this differently than the last one. When I tried using Microsoft Video 1 today, it looked HORRIBLE haha So I threw it in Movie Maker to export it as a WMV. Anyway, I wanted to get this bit done today, especially since I just got the angled look of Ace in my email. I think it turned out great : ) No shooting implemented yet, but soon enough.</p>
<p>Time to get ready for woik!</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/moving-around-during-combat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://robertlbryant.com/video/aa_enter_combat.wmv" length="1359145" type="video/asf" />
		</item>
		<item>
		<title>Dealing with Enemy Clusters on Ardent Assault</title>
		<link>http://slydogstudios.org/index.php/2011/05/dealing-with-enemy-clusters-on-ardent-assault/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/dealing-with-enemy-clusters-on-ardent-assault/#comments</comments>
		<pubDate>Mon, 09 May 2011 19:59:20 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[6502 Code]]></category>
		<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=172</guid>
		<description><![CDATA[I didn&#8217;t get a whole lot of time to work on Ardent Assault today, but I did tweak up a bit of code that I wrote yesterday. Before getting to that, I&#8217;ll explain how the game will work. I don&#8217;t think I&#8217;ve really done that yet : P You start off at the beginning of [...]]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t get a whole lot of time to work on Ardent Assault today, but I did tweak up a bit of code that I wrote yesterday. Before getting to that, I&#8217;ll explain how the game will work. I don&#8217;t think I&#8217;ve really done that yet : P</p>
<p>You start off at the beginning of each maze with no map on the HUD at the bottom of the screen. In the coordinates box, there will be a spot that represents where you are. There will also be a spot representing where the map is hidden at. So you will have to find your way through the maze to that spot to obtain it. During and, most likely, after you obtain the map, you will have to clear the level of all baddies. The HUD will contain the number of enemy &#8220;clusters&#8221; that are in the maze. Each cluster represents a predetermined spot where the enemies will be. When you hit a cluster spot, an alarm will sound and you will be attacked by a swarm of enemies, and you enter into battle mode. After getting rid of all the enemies in that cluster, you keep going through the maze to clear the floor of them all. Once that happens, an indicator on your map will show you where the exit to the next floor is. It will be unaccessable until all enemies have been defeated.</p>
<p>Anyway, the way I have it coded now, there are up to eight enemy clusters per level. I thought about using one byte to represent these, but I figured it would be easier to use a spot higher up in RAM and just have 8 bytes that represent the position of the enemies. For instance, here are the level one positions for the enemy clusters:</p>
<pre>
enemy_cluster_pos1:
	.byte $18,$6e,$86,$b1,$cb,$00,$00,$00
</pre>
<p>What happens is, when you land on a spot with a cluster, the byte that represents the position of the enemy cluster is then wiped out to zero. The player can never be at position $00, as it&#8217;s always a solid wall. In this way, it makes it easy to know if the player has destroyed that cluster yet or not. The code is pretty simple, too:</p>
<pre>
	ldx #$00		 ; set register X to zero
:	lda cluster_ram,x	 ; load A with the cluster offset by X
	cmp player_pos		 ; check if it matches with the player pos
	beq :+			 ; if so, branch to set things up for battle
		inx		 ; if not, increase X by one and compare it
		cpx #$08	 ; to the max number of enemy clusters, which
		bne :-		 ; is eight. Branch back and check all eight.
			jmp :++	 ; If all checks don't match, jump over the
:				 ; init for battle.
	lda #$00		 ; Clear the cluster to zero using X as the
	sta cluster_ram,x	 ; offset so we don't fight these enemies
	lda #$02		 ; again. Load the sound for the alarm.
	jsr music_loadsfx
:
</pre>
<p>There will still be a couple of things to add to the battle init, but that&#8217;s how it&#8217;s set up for now, just to get the ball rolling.</p>
<p>Shawn did a few graphics of an alien last night that look purdy good. The aliens all have the joe eyeball thing going on (read: the classic NES one eyeball on a baddie). Hopefully tomorrow I can get more going on in terms of setting Ace up for battle! That should be fun : )</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/dealing-with-enemy-clusters-on-ardent-assault/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time to Work on the 3D Maze Engine (Ardent Assault)</title>
		<link>http://slydogstudios.org/index.php/2011/05/time-to-work-on-the-3d-maze-engine-ardent-assault/</link>
		<comments>http://slydogstudios.org/index.php/2011/05/time-to-work-on-the-3d-maze-engine-ardent-assault/#comments</comments>
		<pubDate>Sun, 08 May 2011 16:40:46 +0000</pubDate>
		<dc:creator>Roth</dc:creator>
				<category><![CDATA[Ardent Assault]]></category>

		<guid isPermaLink="false">http://slydogstudios.org/?p=169</guid>
		<description><![CDATA[Back in 2009 I designed a simple 3D maze engine for the NES. The original plan was to have the player hold a controller sideways in their left hand (with the left arrow pointing at the screen), and holding a zapper in their right hand while playing the game. Unfortunately, I couldn&#8217;t figure out how [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2009 I designed a simple 3D maze engine for the NES. The original plan was to have the player hold a controller sideways in their left hand (with the left arrow pointing at the screen), and holding a zapper in their right hand while playing the game. Unfortunately, I couldn&#8217;t figure out how to implement the zapper properly. I was able to make the screen go black, change the palette colors to white on the sprites, but never could get it to read properly on whether or not it hit. Since I couldn&#8217;t do that, the next option is to have a controllable character on the screen. I decided that it would be cool to have a character along the likes of how <a href="http://www.youtube.com/watch?v=ecdH29FIn_4">The Punisher</a> looks on-screen. A basic &#8220;from the waist up&#8221; kind of look.</p>
<p>The next issue was the controls. Shawn suggested doing something along the lines of Smash TV since one controller was already programmed to be held sideways. I liked that idear, and came up with a scheme like:</p>
<pre>
Controller #1
===============
(held sideways, so left is pointing at the screen[FORWARD])
During maze roaming
-------------------
FORWARD = Move forward
LEFT = Turn to face to your left
RIGHT = Turn to face to your right
BACKWARD = Turn around 180 degrees

During combat
-------------
FORWARD = Fire
LEFT = Move character left
RIGHT = Move character right
BACKWARD = [still open as of now]

Controller #2
================
Not used during maze roaming, but during combat is used to move an
aiming cursor for your weapon.
</pre>
<p>I haven&#8217;t implemented the combat portions yet, so I have no testing of the aiming sights right now. However, I really wanted to get Shawn more involved with graphics on this game. See, back when we were kids he always had a knack for drawing things up to look pretty good. I figure that as he messes with pixel art more, he will get better. So he whipped up how the character will look on the game, and I threw it in the ROM. It looks pretty good, I think! Even better than that, he drew up a GREAT screen of the character from the front. I really want to show it off here, but I think I&#8217;m going to save it for the ending screen. It looks really good, great shading, etc. I was really friggin&#8217; impressed by it, honestly! It&#8217;s going to be one of those images where he will be mostly part of the background, but more than likely have to use sprites to show extra detail on him. I think that will be the first time that I actually do something like that, too. Should be interesting!</p>
<p>Anway, here is a video showing the character run around in the maze:</p>
<p><a href="http://slydogstudios.org/video/aa_movement.avi">http://slydogstudios.org/video/aa_movement.avi</a></p>
<p>The way his arms move when he is running came in handy for when turning left, right, or behind. There&#8217;s more of a signal to the player which way you are heading, as I know these kinds of mazes on games throw some people off. Maybe that will help some, along with the compass and eventually getting a map on each level. At the end of the video you can hear a sound effect that is like an alarm. That is what the sound will be when you encounter a group of enemies. Just thougt I&#8217;d toss that in there for ya : )</p>
<p>Before I end this post, I figure I&#8217;ll fill you in on the name of the hero. Shawn and I are both big fans of Red Dwarf, and love the other-dimension Arnold Rimmer that only appears in a couple of episodes. They call him Ace, and we thought that would be awesome. Seriously, a hero named Ace? Gold. We started dicking around with his color scheme, and ended up thinking, &#8220;hm, what about Boise State colors?&#8221; That&#8217;s where the color scheme came from (though I may switch the color $16 to $17 and see how that looks). Finally, we figured we should give him a last name, and decided to honor <del>Kendell</del> <ins>Kellen</ins> Moore from Boise State. So, the character&#8217;s name is officially Ace <del>Kendell</del> <ins>Kellen</ins> : )</p>
<p>This project should be fun to finish off! Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://slydogstudios.org/index.php/2011/05/time-to-work-on-the-3d-maze-engine-ardent-assault/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://slydogstudios.org/video/aa_movement.avi" length="1193042" type="video/avi" />
		</item>
	</channel>
</rss>

