Showing posts with label ChillED. Show all posts
Showing posts with label ChillED. Show all posts

Friday, 21 February 2020

Level 7, 8 and 9 Design

I've been away for the week, but took my laptop with me so I could carry on designing more levels for Chiller 2!  Take pity on my long suffering wife!

Level 7 is set in a park and features the rain from an earlier level expanded to fill more of the screen.  I do intend to go back to this level and add a bit more silhouette detail once I've designed further levels - I don't want to run out of chars too early!  The park level looks a little like this (excuse the lower quality screen-grab as I'm getting worried about sharing too much of the game)...


Level 8 is set underground in a sewer!  This level features an expanded version of the slime pools from the cemetery level, with additional slime 'falls'.  As with the park, more detail may be added later when I get a better idea of how many chars I will have remaining after the majority of the levels have been designed.  The sewer looks like this (although some modifications have been made since this grab)...


Level 9 is set outside and features a log cabin.  All the best horror films have a cabin in the wood scene don't they?!  The great thing about this level is that it was pixelled using practically all existing chars, leaving me chars for future use!  The log cabin looks like this...


I've also already started designing Level 10, which is set in a basement and will feature more slime oozing from a feature I have a slight fetish for - 8bit pixel pipes and conduits!  More on this soon!

Next diary entry...

Saturday, 15 February 2020

Level 6 Design

Hot on the heels of designing Level 5 a couple of days ago (read here...), I've only gone and designed Level 6!  This level is set inside a cinema and is a call-back to the original game, which also had a level inside a cinema.

The original Chiller level had a slightly odd perspective, with a screen in the distance and chairs that decreased in size the closer to the screen.  When static, that kind of looks fine, but when your character sprite approaches the never changing cinema screen, the sprite stays it's original size and things tend to look all strange then.

In Chiller 2, I've drawn a screen at the top of the display and chairs on platforms all around, with no perspective tricks tried at all.  I have reused, albeit with different colours, some of the staircase chars from Level 4 (The Haunted House) for some variety. And to combat the original game having a cinema screen that never changed, my cinema screen will have a very simple animated noise effect, with flickering black and white pixels - truth be told, this is already coded and working!

Here's what the level looks like in my editor, ChillED...


As an aside, I've now altered the code slightly so that each level can have it's own 'timer' for the background animations.  Up until now, all the background animations (flame, rain, slime, etc.), have shared a timer and been updated every fourth frame, which has been fine until the cinema screen 'noise' was coded up and ended up being too slow.  Thus, each animation has now been tweaked to a more suitable speed for what it's displaying.

Also, I cannot tell a lie.  I've installed a cheat mode whereby pressing up on the joystick skips to the next level!  Hey, the game is getting bigger now and it's the only way I can check that everything is working properly!  This cheat will be removed before release!

Next diary entry...


Thursday, 13 February 2020

Level 5 Design

In the diary entry called 'Level 4 Design', I described that level as 'the toughest so far'.

Forget that!

I've just designed Level 5, set outside in a cemetery and it's an absolute pig of a level!  Virtually all of the enemies are in your path constantly, the platforms are quite far apart and are peppered with mushrooms ready to drain your energy AND now there is a new introduction to the gameplay - small pools of green slime that, although can be walked on, drain your energy just like the mushrooms!

I've already added the enemy paths and just need to enter the cross locations in hex.  I really may need to make this level a little easier; it may not look that hard but playing it is something all together different, particularly if your energy is low!  At the moment, the cemetery looks a little like this...


Next diary entry...

Saturday, 18 January 2020

Level 4 Design

Off the back of sorting the cross locations for Level 2 yesterday, the evening saw the beginnings of me tentatively designing Level 4.  As stated in a previous blog entry (see here), I never intended to have levels set in exterior and internal locations alternatively, but since I've seemed to set off down this path, it shall continue!

Thus, after Level 3 being set outside, we're back indoors for Level 4 and most of today has been spent creating the inside of a haunted house!  This gives me a chance to save some characters in the charset by reusing some used in level 2, as well as adding new chars specifically designed for this level.  I need to do this after blowing five chars on the rain in Level 3!

New chars and features for this level include a wooden staircase that can be used to reach higher platforms, a stone fireplace (so as to reuse the animating flame char from Level 2) and a rather ominous looking rope and noose!

Since this is now Level 4, I'm assuming the player is getting better at the game, so platforms in this level are deliberately further apart to make them harder to cross, with gaps below that the player falls down if the jump is 'missed'.  Along with avoiding the planned to be fast moving enemies, this level should be the toughest so far. I hope!

What does the level look like?  On this occasion, I've done a time-lapse animation showing the build up over the course of the day it took to design.  Of course, things will probably change as the enemies and crosses are plonked into place and the level tested.



Next diary entry...

Monday, 13 January 2020

Level 3 Insertion

A fair few months ago, I started to design Level 3 for the game (see blog post here).  Up until yesterday, it only existed in my screen editor, but I've finally exported the screen and colour ram data and inserted it into the game, along with the code to set-up and call the level.

Since this level has been languishing for a while, I thought it deserved some habitation, so I've also added some data to the enemy table for this level and there are now various baddies crawling and flying around.  I still need to add some x and y data for the cross locations; currently the data table contains my stand-by data that only contains 2 locations that strobe back and forth.

Once it was all up and running, I wanted more screen action, but in a subtle way.  I've seen a couple of games recently that have rain in the background (it seems fashionable to have rain in your game at present and, at time of writing, appropriate given the weather outside) so I decided this level shall have rain!

I must also admit to having watched Simon Jameson's Twitch channel the other night where he demonstrated how he had implemented rain in his game and this also provided the idea and motivation for me to include rain in Chiller 2.  However, I wanted a much simpler solution for my game compared to Simon's code, so decided to go with the 'copying char data around' route rather than the pixel plotting through a char route he demonstrated.

So, to start I set aside 5 sequential chars that will be used for the rainfall and plotted a 1,2,3,4,5 repeating sequence in columns using these chars.  In the editor to begin with, the rain looked a little like this...


I did my very best to ensure it looked 'random', with columns of chars that were near or adjacent to each other not having identical numbers that were in-line (1's in line with other 1's, 2's next to other 2's and so on) - not doing this would have resulted in very unnatural looking rainfall methinks!  Once I was happy with the layout, I cleared the chars themselves of the numbers, knowing the chars were still actually in place on the screen.

I then designed a simple raindrop, not in the editor, but on a scrap piece of paper which I then turned into a table of hex bytes.  If you're interested, that table of data looks a little like this within my code...



 ; raindrop pattern  
   
 rain_patt     !byte $ff,$ef,$ff,$ff,$ef,$ff,$ef,$ff  


And then it was time to code a very simple rainfall by copy my raindrop pattern above into each char sequentially.  The code I came up with looks a little like this (please note, this is wholly unoptimised at present but was written this way to ensure it could be followed in the future by me!):


 l3_bkgrd_anim                          ; level 3 rain  
   
 ; clear all raindrops first  
   
           ldx #$00  
           lda #$ff                     ; char needs to be solid!  
 clear_rain            
           sta $2400,x                  ; raindrop 1  
           sta $2408,x                  ; raindrop 2  
           sta $2410,x                  ; etc  
           sta $2418,x  
           sta $2420,x  
           inx  
           cpx #$08                     ; all 8 bytes of each char cleared?  
           bne clear_rain               ; no? branch back  
             
 ; now check which raindrop should be drawn! 
   
           lda raindrop                 ; which raindrop are we on?
             
           cmp #$00                     ; drop '0'?
           bne *+$05                    ; no? go and check drop '1'
           jmp draw_rain0               ; yes? go draw rain0!
   
           cmp #$01  
           bne *+$05  
           jmp draw_rain1  
             
           cmp #$02  
           bne *+$05  
           jmp draw_rain2  
             
           cmp #$03  
           bne *+$05  
           jmp draw_rain3  
             
           cmp #$04  
           bne *+$05  
           jmp draw_rain4                                     
             
 draw_rain0       
           ldx #$00  
 rain0_loop  
           lda rain_patt,x            
           sta $2400,x  
           inx  
           cpx #$08  
           bne rain0_loop  
             
           jmp draw_rain_dun  
             
 draw_rain1       
           ldx #$00  
 rain1_loop  
           lda rain_patt,x            
           sta $2408,x  
           inx  
           cpx #$08  
           bne rain1_loop  
             
           jmp draw_rain_dun  
             
 draw_rain2  
           ldx #$00  
 rain2_loop  
           lda rain_patt,x            
           sta $2410,x  
           inx  
           cpx #$08  
           bne rain2_loop  
             
           jmp draw_rain_dun  
             
 draw_rain3  
           ldx #$00  
 rain3_loop  
           lda rain_patt,x            
           sta $2418,x  
           inx  
           cpx #$08  
           bne rain3_loop  
             
           jmp draw_rain_dun  
             
 draw_rain4  
           ldx #$00  
 rain4_loop  
           lda rain_patt,x            
           sta $2420,x  
           inx  
           cpx #$08  
           bne rain4_loop  
             
 draw_rain_dun  
           lda raindrop  
           inc raindrop  
           cmp #$04  
           bne reset_bkgrd_anim_tmr  
           lda #$00  
           sta raindrop
  

What's happening?  Well, when this routine is called, first of all I'm clearing all five rain chars to erase any previously drawn chars (this could be optimised to clear only the last previously drawn char!).  Then, using a 'variable' that stores which raindrop we're on (it starts with '0'), the code determines which char should be drawn to next and jumps to the drawing code for that char and copies the raindrop pattern data pattern into that char's memory location.  The code then jumps to a label called 'draw_rain_dun' which increases the raindrop variable and then checks to see if all five chars have been drawn to in sequence.  If they have all been drawn to sequentially over the course of the routine being called a few times (i.e. the fifth raindrop char was last drawn to), the code resets the raindrop variable to '0' so next run through the raindrop pattern is drawn to the first char again.

Hopefully that makes sense?!  Of course, this code is also inside a timer that executes it (at present) once every 4th frame.  Without the timer that rain would, er, rain too fast!

To be honest, if this code was applied to the whole screen and not just the top of the buildings as in my level, it would probably look pretty jerky.  However, in the context of my level and game, it has a nice cartoony feel that I'm very happy with!  What does it look like?  Something like this...


Next diary entry...

Saturday, 31 August 2019

Level 3 Origins

It's felt like time to work on another level design because I've been a bit tired of looking at the forest and the church levels for the last month.  Since the first level was exterior and the second interior, I guess it makes sense for the next level to be exterior again?  That wasn't planned at all, but that's how it seems to be panning out...

In the original "Chiller", there was a level called "The Ghetto" and I wanted to do a "call-back" to this, so I spent this morning starting the design for a level that I'm calling "The Apartments".  Using the word ghetto these days would seem a little non-politically correct.



When I say starting the design, it ended up being an almost complete design for the level, save some modifications that will probably need to be made to platform spacings, mushroom locations and some other embellishments (once I've thought of them).

The original brief to myself (i.e. what I dreamt up 5 minutes before pixelling commenced) stated that the window ledges were to act as the platforms and there was to be a couple of different coloured buildings for contrast on screen.  Drawing the the fence, brick and window chars took no time at all and I had a basic layout within half and hour.  However, it did look a bit plain with an all black background, even with my star, moon and cloud chars drawn in.

Then I had a brainwave, well as about as wavy as my ageing brain gets these days.  Make the sky a different colour to previous levels and since this game is supposed to be set at dusk/night, dark blue made sense.  I copied and reverse some existing chars (clouds, stars) to set on the night sky and then, as another "call-back" to the games of yore, used black chars to pixel in some silhouette skyscrapers in the background.  What old games inspired this?  Think "Ocean Software" and "Robocop".  Consider this level, therefore, my "love letter" to those Ocean games that gave me hours of pleasure as a young teen.

Here is the level as it exists at the moment in "ChillED", my screen editor.


My Grandson did give it an initial thumbs up when I showed him this afternoon and wanted to "play" it straight away, but I still need to export the screen and colour RAM data and add it to my level data "includes" file.  And then code the level set-up.  That will be another day.

On a side note, after giving the initial level 3 design the thumbs up, my Grandson asked to play a few games on my C64mini, so we transferred the latest build of game over as well for a quick test.  Chiller 2 seems to be C64mini compatible so far as well!  ;)


Next diary entry...

Saturday, 13 July 2019

More Title Screen

After getting a basic title screen up and running the other day and deciding it needed some extra something or other, I spent some time today adding some colour washing to the text so that there was more colour on the screen.

What the screen dump doesn't show is the text colours "animating" across the screen, left and right.

I had also previously decided it may be quite nice to make the title logo sprites move up and down continuously.


I was quite surprised how easy it was to do the "bounce".  In the mainline title screen loop, I just needed some code that added or subtracted a pixel from each sprites y position and then saved the new position into the sprite table to picked up by the sprite plotter in the interrupt code.

There was an extra table added that kept track of whether the sprite was moving up or down so the code knew whether to move the sprite up/down after checking if each sprite had reached it's top or bottom limit.

Here's the code to do the bounce; it may be possible to refine it in the future, but it works as it stands at the moment!

 ; update title sprites 'y' position to 'bounce' them  
   
           ldx bounce_timer               ; load up the bounce_timer  
           inx                              ; increase it by '1'  
           cpx #$03                         ; is the timer equal to '4' yet?  
           bne bounce_skip               ; no? don't update movement  
                                         ; yes? better do some moving then!  
           ldx #$00  
 t_sprite_y_upd  
           lda t_spr_y_dir,x  
           cmp #$01  
           beq t_sprite_up  
             
           lda sprite_y,x  
           clc  
           adc #$02  
           sta sprite_y,x  
           cmp #$4a  
           bcc t_next_sprite  
           lda #$01  
           sta t_spr_y_dir,x  
           jmp t_next_sprite  
                            
 t_sprite_up  
           lda sprite_y,x  
           sec  
           sbc #$02  
           sta sprite_y,x            
           cmp #$3e  
           bcs t_next_sprite  
           lda #$00  
           sta t_spr_y_dir,x  
           jmp t_next_sprite                 
   
 t_next_sprite  
           inx  
           cpx #$08  
           bne t_sprite_y_upd  
             
           ldx #$00                         ; load x register with '0'  
 bounce_skip                              ; to reset anim_timer and...       
           stx bounce_timer               ; store x register to anim_timer       

I also extracted the text scroller/plotter from "Unused Shmup Tunes" (see previous diary entry) to use on the title screen, so now intro/credit/greeting type text "types" itself on to the screen just above the ground.

As an afterthought, I decided it might be quite nice to have some sprites in the bottom part of the screen, since the screen is already split and therefore it's quite easy to recycle the sprites.  It struck me that it might be cool looking to use the ghost that is already in the sprite bank  and "fly" it across the screen to write and erase the scrolling message.

Again this was quite easy.  When each letter of the message is "plotted" onto the the screen, the ghost moves from left to right by 4 pixels at a time so it appears he is plotting the text.  A cheat really, but visually it works.


Finally, I decided to alter the title screen layout slightly to make more room at the bottom of the screen between "The Boy" and "The Girl" text to include the actual sprites of the boy and girl.  Another afterthought resulted in me making them dance in time to the music (yes, I have been venturing into Goattracker and toying with some sounds).

The decision to dance the sprites did mean a short trip into the sprite editor to adjust the main player sprites to add some dancing frames, but the boy and girl look happy enough having a boogie to an early version of the title screen music now!

Next diary entry...


Wednesday, 10 July 2019

Initial Title Screen

I've decided to work on the title screen today.

That may seem a little odd so early on in the project, but since so much code is needed right at the start to display anything at all (screen set-up and printing, splits and so on) and so much of it will be used for the title and in-game screens, I thought I may as well do it now and have something to show for it.  I'm too impatient!

I first completed a rough layout in my screen editor, 'ChillED'.



I then exported the screen RAM and colour RAM data into the game assembly file. I had previously written some screen display code for another C64 project (Unused Shmup Tunes, see here...), so surgically removed the code and inserted it into Chiller 2.

After a few changes to the layout in ChillED and a further export of data, the title screen ended up being displayed in the game.  Here is a screen dump using WinVICE...

Rather plain at the moment, but I have managed to include some previously pixelled sprites that spell out the game name.  The sprite "plotter" for this resides in split 1 on the screen and was written so that it won't just handle the the title screen sprites, but eventually the in-game sprite player and meanies too!  Double plus good!

I cannot tell a lie - this sprite plotting code was also written for and grabbed from the Unused Shmup Tunes release and since it's my code, it's allowed!  Here is the sprite plotter code for Chiller 2 that handles the x-y position (including MSB) and colour of all 8 sprites, as well as being able to pluck the correct sprite definition from the sprite bank...

 ; in-game sprite plotter!            
             
 sprite_plotter            
           ldx #$00  
           ldy #$00  
 sprite_plot  
           lda sprite_x,x  
           asl  
           ror $d010  
           sta $d000,y  
           lda sprite_y,x  
           sta $d001,y  
           iny  
           iny  
           lda sprite_col,x  
           sta $d027,x  
           lda sprite_def,x  
           sta $07f8,x            
           inx  
           cpx #$08  
           bne sprite_plot  


Now the basic title screen is in place, I fancy adding some colour washes to the text as well as making the logo sprites bounce up and down.  The grassy ground in the screen dump above will eventually have a scrolling message of sorts above it.

Next diary entry...



Monday, 13 May 2019

Level 1 Design

After a couple of false starts, I've spent the last few days off and on using my screen editor 'ChillED' to construct a level for the game, set in the forest - since the original game starts in a forest, it seems appropriate for the sequel to as well?

No doubt the layout will change considerably due to circumstances I've not foreseen yet (probably to do with code or gameplay restrictions), but I'm fairly happy with what I've come up with.

Here is a little animation of how the level was built up; most of the stages are here, with only a few left out that only had minor differences from a previous save.


EDIT:  After posting this, I decided to use Photoshop to overlay some of the sprites on the current final version of level 1 and post on Twitter.  There seems to have been some pretty good feedback, with some nice responses!  Anyway, the image that was posted on Twitter is below and a link to the actual Tweet is here...



Next diary entry...

Tuesday, 23 April 2019

ChillED Copy & Paste

While still toying with level backgrounds for "Chiller 2", I've come to the realisation that I will need a select/copy/paste function in "ChillED", my screen editor.  I was hoping to get away without having this feature since I'm spending more time on the editor than the game at the moment!

Having said that, if a copy/paste function makes life easier, then the editor shall have it!  So guess what I've been doing for the last few days while on a break away?

That's correct!  Select, copy and paste is now in!  Still a few small bugs that need ironing out, but here it is in action while I was pixelling a quick version of Yoda!


Next diary entry...

Friday, 12 April 2019

ChillED Data Export

Been building to this, a feature for "ChillED", my screen editor, that will enable me to put screens/levels straight into the game with ease: screen and colour RAM data export!

The data format is simple text, but it includes a "byte!" label at the start of each line to copy and paste straight into my ACME formatted source.

Here is the feature in action:


To be honest, the export has been working for the last few days and I've been using the editor to pixel some PETSCII screens and have been exporting them to some hastily written display code which has then been tested on my C64mini.  Here is a very quick version of R2D2 pixelled in ChillED, data exported to my rough code and being display on my spare TV using the 64mini...


All appears to be working nicely!

Next diary entry...


Friday, 29 March 2019

ChillED Testing

Work continues on ChillED, my screen editor that will be used to produce levels for the game.

It's been in a fit state to pixel screens for a couple of weeks now and I've been doing some thorough testing by actually using it!

Here are some examples of the editor in action:





Next diary entry...

Saturday, 9 March 2019

Screen Editor

A few days ago, I was on IRC chatting to Jon "Moloch" Mines about my game project again and have showed him some initial screen mock-ups.

I have begun experimenting with a background layout using the Arkanix Lab map editor, "CartographPC", or at least an early unreleased rewrite of it that I've been working on.  Since the original game "Chiller" started in a forest, I've decided that so should the sequel!  Here is a *very* early version...


While working within the "CartographPC" unreleased rewrite, I decided to "fork" the PureBasic code and create a new tool specifically to create single screen levels for my game.  The intention is that the new tool will have features such as the ability to export screen and colour RAM to use directly within the ACME based code used to create my sequel to "Chiller".

Thus, my new screen editor "ChillED" is born.  See what I did with the name there?!  The editor looks a little like this...


I've begun using it already to recreate the background I was working on in "CartographPC", but there is still a lot of work to be done on the editor till it's ready to begin creating "real" levels!


Therefore, if the diary appears to be updated very infrequently over the coming weeks, its because I'm coding "ChillED" for my own needs!

Next diary entry...