-
Content Count
499 -
Joined
-
Last visited
Posts posted by vidak
-
-
OKAY. I AM RETURNING TO THIS PROJECT.
It has only been 39-40 days anyway. A lot of my friends and party members are always asking me about this game, and their positive encouragement recently has made me want to return to development. If I keep making games people are interested in, I think I'll never want to stop working on them!I still have a lot of time left in the kernel for drawing the screen, so I think I can return at some time and include playfield graphics or missiles. But I will do that later.
I will call this next phase "Phase Three" - and I will dedicate it to creating a multi-screen world in which for you to move Che around in. "Phase One" was me learning how to draw the screen and a moving multi-colour character AT ALL, "Phase Two" was creating a multi-band kernel.
What I want to achieve in Phase Three is a randomly generated multi-screen world. I think I will achieve this with a polynomial counter. Anguna has a 13x13 screen world. I think I'll aim for that size.
I was thinking "how would it be possible to create a two-dimensional world using a polynomial counter?" I thought maybe I would have 13 individual different polynomial counters for each row/column of the square world, but after some daydreaming I thought perhaps a single polynomial counter that snaked down the world like this would probably work best:
|-1-|-2-|-3-|-4-|-5-|-6-|-7-|-8-|-8-|-10|-11|-12|-13| |-14|-15|-16|-17|...|---|---|---|---|---|---|---|---|
What would happen is that if you moved up one cell, the polynomial counter could decrement by 13 positions, and if you moved down a cell, it would increment 13 positions.
The benefits of randomly generating a world are:
- I would not have to store a complete isomorphic representation of the world in ROM
- Players could still have the option of playing the same world again by entering a seed number
- Players would be able to share interesting worlds by sharing seed numbers
- Players would have the choice of randomly generating a world through a title screen menu
- Random generation would add replay value
I don't fully understand polynomial counters yet, but I anticipate that a big disadvantage of using them would be that they would use up more RAM. However as I am writing this, I don't see how this would really be so, as the polynomial counter would really just be counting up and down for a single screen. The counter just moves up and down its one-dimensional pathway, and it gives the illusion that there is a permanent world cast out into two-dimensional space. Really there is just one screen, being loaded with different elements depending on what position the counter is at along its pathway.
I will reduce the number of bands in the multi-screen kernel from 5 to 4. I want to give the moving enemies and friendly NPCs more room to randomly move around on the screen. As it stands, I am not happy with the amount of vertical room that NPCs have to move.
So the polynomial counter will have 13 screens x 4 screen bands through which to step.
I want there to be a sense of progression to the game, so I will add in a finite number of bosses. I am hoping that the polynomial counter will generate, say, the locations for 5 bosses randomly throughout the world without needing a separate subroutine, but what I may do is have the polynomial counter for the total world to distribute trees and NPCs, and, eventually, playfield graphics, and then a separate routine to nicely position the five boss garrisons throughout the world.
I want the boss locations to be kind of like "castles" -- they'll be a barracks or a big building into which you enter.======
Work timeline:
I think I will be able to actually put some effort into coding on tuesday next week, because it's a holiday here in Australia, and my girlfriend has time off work and some family members are flying 4000km to come stay in my city for the holiday.
======
Social encouragement:
Finally, I want to say that if you're like me, and you've been finding this year really hard emotionally, I'm always here to talk. It has been very difficult finding steady work, and I am not sure I actually want to continue in the career of academic philosophy after my PhD, so I am naturally feeling worried about my scholarship running out in 3 months.
If you feel ashamed about yourself, and if you feel pathetic - I'm always here to listen. Depression is an artificial mental state. It is also temporary. The reason why you (and I) might feel depressed is not because of YOU (or in my case, ME). Everyone well-intentioned person in this Atari community is a wonderful person, and deserves to pursue a life and career that is fulfilling and satisfying.
I have JUST gotten over a spell of deep, deep depression - AND paranoid delusions after testing to see if I actually do have schizophrenia, so I am very very relieved. I hope I can be the person to believe in someone else while they can't believe in themselves. I want this because I have so many people in my life who have believed in me while I couldn't.
FIGHT IT. YOU CAN DO IT. FIGHT AND WIN. YOU ARE A GOOD AND WORTHWHILE PERSON.
-
5
-
Oh you're totally right.
A reflected playfield is 20 pixels.
I /thought/ the playfield was 4 times lower in resolution.
-
I guess you could whittle the plastic away...
Anything's possible - maybe buy a few in case you mess up hahha
-
There is still a world of BBS servers out there!
Telnet and usenet still function, and many 8bit and 16bit micros can be converted to use ethernet to connect to them.
-
Yeah I'm with the ASM or die faction, but I won't get in the way of the raspberry pi nanos in cartridges aping the 2600 hardware.
I think the normative test for "aping" or "traditional" should be: is the code actually being executed by the 2600 hardware?
Personally I don't care either way, but I will only evet write "traditional" 2600 code without acceleration.
-
So the playfield graphics are half the horizontal resolution of the player sprites.
-
The playfield graphics are 80 pixels horiztonally, if you wrote an assymetrica playfield. The player sprites are 160 pixels horizontally if you were able to draw a whole scanline of them.
-
I've been learning Ada, a very strongly typed language - and it's taught me a lot about C and BASIC.
I think the 2600 really is so much about the hardware that you can't use strong typing.
I agree it's too early to be talking about C for the 2600.
What does having C over BASIC for the 2600 achieve? This is a genuine question, and not a snarky comment!
Honestly I think the fact that precise timing is so critical for the 2600, the most powerful option will always be ASM.
-
The resolution for PLAYER graphics is 160x192
-
1
-
-
Awesome, thanks

-
- I started this thread in Contests, but that whole sub-forum is dead. I figured maybe this might be a good place to announce this idea.
Okay.
I got $250AUD for my birthday. This is the first discretionary spending money I've had since June last year. I was going to build something cool like a raspberry pi cell phone or build a homebrew 6502 computer. But it has all been done before.
I always say I wanna give back to AtariAge because it has helped me combat my depression and psychosis, and has helped me develop as a person.
I wanna use this prize money to stage a competition - is this allowed? Is this a good idea to promote activity on AtariAge?
I am an ASM 2600 programmer, so my natural idea was to promote 2600 homebrew development - but I know there is a lot of 7800, Intellivision, and other consoles being developed for. I feel like it might be more fair to allow the competition to be a multi-platform contest.
What do you think? If it was just 2600, I would put equal parts of the 250 towards dual first prizes for ASM and batariBASIC first prizes.
What would be a good set of rules for a possible contest?
-
Okay.
I got $250AUD for my birthday. This is the first discretionary spending money I've had since June last year. I was going to build something cool like a raspberry pi cell phone or build a homebrew 6502 computer. But it has all been done before.
I always say I wanna give back to AtariAge because it has helped me combat my depression and psychosis, and has helped me develop as a person.
I wanna use this prize money to stage a competition - is this allowed? Is this a good idea to promote activity on AtariAge?
I am an ASM 2600 programmer, so my natural idea was to promote 2600 homebrew development - but I know there is a lot of 7800, Intellivision, and other consoles being developed for. I feel like it might be more fair to allow the competition to be a multi-platform contest.
What do you think? If it was just 2600, I would put equal parts of the 250 towards dual first prizes for ASM and batariBASIC first prizes.
What would be a good set of rules for a possible contest?
-
When I was in High School in the mid-to-late 80s, my friend and I took a "Computer Class" which taught BASIC. I was already pretty proficient in BASIC and had moved on to Assembly Language (on the C=64), and my friend was a rather advanced hacker, so the class was a bit lame for me and my buddy.
Nonetheless, the teacher tried to mentor me by introducing me to Structure Programming and other "advanced" topics. This concept just blew my mind! I can't really overstate how much that insight blinded me. it was so obvious in retrospect.
At the time I was writing an archiving/indexing database system for my (huuuuuge!) collection of floppies which the teacher thought was good enough to apply to the problem of organizing the High School software library as well. It was good and efficient, but mostly written in pure, adulterated spaghetti code, with extra messy sauce. Teenage-hacker style!
I printed the whole thing out on green and white tracked paper on the library's printer and spent a week or so "refactoring" it by hand on the printout paper, with a highlighter, a red pen, and a bunch of pencils. The whole thing came to about 40 feet of paper. I went through it obsessively, line by line, identifying repeating patterns of code or potentially re-usable chunks.
At the end, I re-wrote the entire thing and it came out to be less than half the size of the original, tight and even more efficient -- and more importantly -- so easy and pleasurable to read and debug.
This has always been a very powerful turning point in my programming life. Yet, it was not BASIC that opened my eyes. I'd go as far as say that it was in spite of BASIC. In fact, my biggest problem with BASIC is that its syntax and friendly demeanor never made it obvious or even slightly apparent that it was ever possible to do it differently from the spaghetti way to which I was accustomed.
This is the reason that, as soon as I discovered other languages such as Pascal, C, Perl, etc., I moved out of BASIC and never ever looked back. I am very much not alone in this regard.
I owe some things to BASIC, yes, but it is mostly its role as doorway into a greater world, a world of power and creativity and control which I always felt it teased me about, yet never really fulfilled. At least not to me.
Why do you say that? I write very structured Assembly Language code. Just as you can write really crazy spaghetti code in Pascal (I've seen it! It's out there!), you can just as easily write elegant, structured, and modularized code in Assembly Language. Like with many things in life, it just takes discipline, hard work, and a little common sense.
-dZ.
That's such an awesome story!! I really enjoyed reading that.
-
1
-
-
The big trick that masking achieves is transferring the work the CPU has to do in real-time calculation to pre-calculating it in ROM. It's a wonderful trick. In fact engineers in embedded programming do this. Instead of storing information in RAM, you store it all in ROM, and it saves space and speeds up performance. This is a good idea with the Atari 2600 seeing as we only have 128 BYTES of RAM. Because bankswitching is well understood now, you should make the ROM do as much of the work as possible.
For instance what I've done for the GRP1 graphics drawn in the separate bands is just pad their graphics with $00 for 15 to 17 lines. This way if I want to move them vertically, I just adjust the pointer - I either load it sooner or later up and down the screen. This saves you many, many cycles. SkipDraw, DoDraw, SwitchDraw and FlipDraw are many times slower than just padding the ROM and messing with the pointer.
Anyway, there is a good DoDraw 2 line kernel on 8bitworkshop.com under the heading Complex Scene 1 and Complex Scene 2. I learned a lot by studying that code.
-
1
-
-
My fellow Atarians, you should do what I do and buy a laser printer and buy third-party toner cartridges.
As far as I can tell, black and white laser printers don't need special toner.
Come join me in the enlightened plane... *ascends into energy*
-
2
-
-
masking requires several things:
- a pointer to the mask
- a mask which is the same size height as the sprite graphics
- the mask must also be padded with zeroes to make the entire block equal to the number of scanlines on the screen (NB - 2 line kernel)
- a pointer to the graphics
- the graphics ROM (usually stored upside down)
- a kernel, with:
a structure like this:
LDY SCANLINE_NUMBER
LDA (GFX_PTR),Y
AND (MASK_PTR),Y
STA GRPX
that's the basics. you can find all of this in my blog posts on stay frosty, and you can find all of this in my source code, which I think is adequately commented. If I have some time I may write up a quick tutorial.
I am not using a 2 line kernel in my game, but depending on what you want to achieve, masking speeds up the kernel so much you may not need a 2 line kernel. masking should enable you to draw: GRP0, GRP1, /and/ some playfield graphics.
Keep at it, I reckon. I think you'll get it eventually. Personally I think the hardest thing about kernels is the pointers. They're type-independent objects so they'll load whatever they're pointing at.
-
1
-
-
-
One thing I'd like to do is have a seed-input menu on the title screen, which will allow users to find interesting worlds and compete for points.
-
1
-
-
I've been giving it some thought, and I think I might not create a static world placed in ROM for this game, and instead randomly generate a world through which to move.
I was reading what was going on in the IntyBASIC forum, and I really liked this port of Grail of the Gods: http://atariage.com/forums/topic/275233-grail-of-the-gods-rogue-like-or-mini-rpg/
I think the main problem that a randomly generated world will create is that it will be heavy on the RAM - a real premium in this context.I will do some brainstorming and thought experiments to draw up some ideas about how to randomly generate this world.
I think random generation will be a better idea for this game. It will allow you to replay the game over and over and get a different environment each time.
-
That is also my beef with smartphones and tablets vs traditional PC. The ability to handle and transfer individual files. I've said it in other posts of mine - people are scared of "files" they freeze up faster than winderz on bonky hardware when confronted with them. Even something as plain as a video or picture file is a burden. Just even remembering you have them or where you put them is a mental feat of heroic proportions. And some just give the impression it's "not that important."
And modern-day developers are equally scared of enabling consumers to do anything with files.. they just don't do it.. No drag'n'drop, no easy transfer to removable devices.. It's like they're plugging a hole.. forcing you to go through their services.
I typically spend about 1/2 hour a month managing the family photography. A hole half-hour! An in-ordinate amount of time, I'm sure. Time that's wasted when a smartphone would deal away with it and somehow make it all easier. Yet, I've got instant access to photos from 10, 20, 50 or more years ago. I've yet to see the cloud match that performance and practicality.
And it's based on ideas and philosophies I learned with classic computers.
The philosophies of old computing are democratic philosophies.
Linux isn't perfect on this, but at least it tries - but what happened to the philosophy that everything had to be a file? A harddrive, a song, a config file (in plain text)... A fundamental freedom is taken away from us when things are no longer distributed in files. I don't really like RMS, but he's right when he says every single piece of media we watch or listen to should be able to be possessed by us as a file or as some physical medium. Netflix and Spotify are terrible for this - they take DOWN movies and music that don't turn a profit. You're not in control of the library of media.
Because the bosses give so little of a shit about actual FILES all USB sticks these days, even if they're 64GB, come formatted in FAT32. That is ridiculous. I wanted to watch the Despecialised Star Wars, so I had to spend time reformatting my USB so I could fit a file bigger than 4GB on it.
I'm so done with modern tech. What happened to computer literacy? What happened to looking for more efficient ways to do things?
I am right now in the process of downloading my Spotify streaming music library as MP3s so I can get off the platform. I have to wait 5-15 minutes for the program (I refuse to say "app") to authenticate itself with its magical mothership before I'm allowed to listen to any music.
-
2
-
-
To be honest, older tech seems better built and better functioning than anything new I've bought.
All my mobile phones have terrible bloated and buggy software, and poor battery life. I have never had a phone I really liked since smartphones became dominant. Autocorrect is terrible. Voice commands are spyware and are always listening to you and ruin conversations. Social media is a dumpster fire. The phones are physically poorly made for long term use. The web is poorly optimised for mobile devices... I can go on and on.
I *loved* my old 486, where I learned to code.
Hell I even loved my Dad's old Pentium 2.
One really annoying example of how terrible phones are is how difficult it actually is to send people files now. You can't send MP3s or short videos anymore. They all have to be embedded in soundcloud or youtube, with all their associated IP scanning.
I am very frustrated. I wish I had been born 20 or 10 years before I was.
-
I love this project, but Nukey is right about the limitations of the Atari 2600.
I agree that probably the best way forward for this project would be to have some set made kernels which beginners and drag and drop some limited customisation onto.
Like you could have a Tank game, a Defender-like game, a Jungle Hunt game...
I guess I'm also a lot stricter about how I like people to approach computers. I personally would like people to develop their computer literacy. I suppose this would be like a "gateway drug" for that.
I think you should teach beginners about branching, indexing graphics in ROM, about variables, about loops and conditional statements... The beginner should probably also eventually come to learn about what makes the 2600 so unique (racing the beam).
Like Chairman Mao said, "let a thousand flowers bloom' - in other words, we should always encourage people to finish their projects and let many diverse plans be set.
I suppose I am a very smart person, but I don't see 2600 kernel writing as terribly difficult - really you're just writing to hardwired registers on a timer.
I'm here if you want some help!
-
And fuck yes about computer literacy being encouraged in supermarkets.
-
1
-
-
I think in some ways the 70s and the 80s were way better in terms of computing, compared to today.
Today we have loads of spyware, virtually all the major communication platforms are social media and are all designed to get you addicted and spy on you...
By contrast Usenet had a big philosophy of singling out conflicts of interest and keeping information free.
I feel like BASIC had a little bit to do with their democratic nature of early tech. It was simple enough for anyone to learn how to use as an operating system, and it captured a lot of people's imagination. Imagine 12K RAM games now... nobody can make a game that small now.
I personally hate modern computing because it is so bloated and all the AI in everything is like robotic used car sales.
I've commented in this thread before - but I think for what it was for beginners, it was pretty good. You'd just have tp graduate to something better if you were gonna get serious.
Personally I'd prefer a BASIC or a bash shell over my android phone any day - at least you know what's running on your computer now. You have to root your phone in order to get access to all that, and void your warranty.
Too many marketing departments and people with business degrees.
Not enough collective hardware and software engineering.
-
2
-

some guidance, stuck with masked sprites
in Atari 2600 Programming
Posted
I think you need to slow down, zilog!
A good strategy to learning something new is to learn things in steps!
I'd say master drawing a single character using DoDraw first, then draw a 2LK using DoDraw, then master drawing a symmetrical playfield using a 2LK, then perhaps draw an asymmetrical playfield by itself, and then see how much other stuff you can fit in with timing constraints.
I have found that an asymmetrical playfield uses up a LOT of cycles. It is probably the most difficult thing to fit into a kernel.
Small steps! I started building my game step by step - I had no ability to draw even a /single/ multi-coloured sprite when I first set out. Even multi-coloured sprites take up a lot of time. You have 76 cycles per scan line, that really is not a lot!!