Jump to content
IGNORED

My first steps into making Intv GFXs


Recommended Posts

Thanks guys for the sweet comments! :)

 

The game have a total of exactly 100 different screens

The premise is you've been captured by a tribe during your adventure and have been made prisoner

You've to escape from their temple without having any weapons/defense

But you'll have to find at least 100 diamonds to open the sacred door to freedom

  • Like 6
Link to comment
Share on other sites

I love cut-scenes. Not sure why. They were always something that made me want to play better to get to see the next one.

 

I think that's the point. To me they were always the "prize" you got for advancing through the game. This was especially true in arcade games, since they game-play is otherwise devoid of any story or depth.

  • Like 4
Link to comment
Share on other sites

 

I think that's the point. To me they were always the "prize" you got for advancing through the game. This was especially true in arcade games, since they game-play is otherwise devoid of any story or depth.

 

Bingo. Avid gamblers know these as "bonuses" in video slots.

 

It's actually why I play them. They have a very similar risk-reward curve to early arcade games. A lot more expensive to play, mind you.

Link to comment
Share on other sites

Now, I'm wondering if I should try to make a few cutscenes.....

Cut scenes are very time consuming to code if they are complex. This one from Rocketeer took well over 50 hours of coding time alone :-

 

post-21935-0-39262300-1447268070_thumb.gif <---- click to animate

 

The intro sequence and cut scenes in my version of Hover Bovver took quite a few 10s of hours too :-

 

 

From what DZ-Jay has said about "Carol vs" he took the approach of a scripted animation engine for the ones in his game. With hindsight, I should have gone down that route instead of doing it the brute force way.

  • Like 3
Link to comment
Share on other sites

Cut scenes are very time consuming to code if they are complex. This one from Rocketeer took well over 50 hours of coding time alone :-

 

attachicon.gifRocketeer_game_intro_06_07_14.gif <---- click to animate

 

The intro sequence and cut scenes in my version of Hover Bovver took quite a few 10s of hours too :-

 

 

From what DZ-Jay has said about "Carol vs" he took the approach of a scripted animation engine for the ones in his game. With hindsight, I should have gone down that route instead of doing it the brute force way.

 

 

Geez!!!

Now, that's ALOT of coding for sure!

Looks awesome!

 

 

Mine is a simple static screen

the game will already be big enough I guess

  • Like 1
Link to comment
Share on other sites

Geez!!!

Now, that's ALOT of coding for sure!

Looks awesome!

Thanks for the compliment. They were fun to do because the player will see them plenty of times when they play the games.

 

Mine is a simple static screen

the game will already be big enough I guess

Even animated static screens are pretty neat too. I think a comic style intro sequence would work well on an adventure/exploring game such as.Sacred Tribe.

  • Like 2
Link to comment
Share on other sites

From what DZ-Jay has said about "Carol vs" he took the approach of a scripted animation engine for the ones in his game. With hindsight, I should have gone down that route instead of doing it the brute force way.

 

Yup, I created a scripting engine I called "Auto-Pilot" which operates on each sprite, giving them the ability to move autonomously, following a pre-determined script. Originally, the intention was to move a sprite from one side to the other, pause, then move out (like the first few cut-scenes in Christmas Carol).

 

It turned out to be so flexible, that it was very easy to extend the engine to support additional commands. One problem I encountered was precisely that it was intended to operate on sprites. In a sense, using it for cut-scenes was actually a "hack." However, once I added commands for "Gosub" (call another script and continue when done), "Delay" (to wait an arbitrary number of milliseconds), "Exec" (to execute an external procedure and return when it's done), and "ExecDelay" (to wait some time before executing an external procedure); it gave me the ability to do absolutely anything!

 

Scripts are defined as a table with a series of command calls. Each entry has a command followed by two optional arguments. I typically include all the individual sprite's scripts for a single cut-scene within the same script file. However, each one is executed asynchronously, and triggered independently.

 

Here's a very simple script for the first cut-scene. It sets the elf speed to 27 FPS and moves it to screen column 19 (the right edge of the scene). At the end, it calls the routine "ElfEnd," which essentially triggers the Ghost's script.

 

The Ghost then becomes visible (he was hiding in screen column 1 all along), sets its speed to 42 FPS, and moves it to screen column 11 (about the center of the screen); where it stops, looks around, faces to the right, and moves out of the screen (column 19) at an accelerated pace.

; ===================================================================
APS_ISEQ_1      PROC

                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@Elf:          DECLE   AP_CMD.SetSpeed,        FPS_RATE(27),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(19),           AP_NONE

                ; End of script.
                DECLE   AP_CMD.StopDisable,     INTRO_SEQ_1.ElfEnd,     AP_NONE

                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@Ghost:        DECLE   AP_CMD.SetVisib,        AP_SHOW,                AP_NONE

                DECLE   AP_CMD.SetSpeed,        FPS_RATE(42),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(11),           AP_NONE
                DECLE   AP_CMD.Delay,           F_MSECS(350),           AP_NONE

                DECLE   AP_CMD.Gosub,           APS_GHOST.LookAround,   AP_NONE
                DECLE   AP_CMD.SetDirWait,      SPR_DIR.Right,          F_MSECS(500)

                DECLE   AP_CMD.SetSpeed,        FPS_RATE(48),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(19),           AP_NONE
                DECLE   AP_CMD.Delay,           F_MSECS(500),           AP_NONE

                ; The End.
                DECLE   AP_CMD.Stop,            SEQ_DONE.Intro,         AP_NONE
                ENDP
; ===================================================================

The end result is the introduction of the sprites, first the Elf walks through, then the Ghost comes in, stops, looks, and leaves. The end.

 

post-27318-0-70296800-1447271852_thumb.gif <-- Click to Animate

 

 

Here's a more elaborate and complex one for the final cut-scene introducing the "Boss". Notice the use (or abuse!) of "ExecDelay." It basically turns the "sprite-oriented" scripting engine into a "wait-and-exec" script which calls many small functions to handle scenery and sprite interactions.

; ===================================================================
APS_ISEQ_8      PROC
                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@Ghost:        DECLE   AP_CMD.Delay,           F_MSECS(250),           AP_NONE
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                AP_NONE

                ; Enters stage and stops.
                DECLE   AP_CMD.SetSpeed,        FPS_RATE(22),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(16),           AP_NONE

                ; Sees presents and blinks...
                DECLE   AP_CMD.Delay,           F_MSECS(600),           AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_GHOST.BlinkLook,    F_ANIM(9, GHOST_INFO.BlinkLook, 1)
                DECLE   AP_CMD.Exec,            SEQ_GHOST.Reset,        AP_NONE

                ; ...jumps in surprise and smiles! 
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.GhostJump,  F_MSECS( 125)
                DECLE   AP_CMD.ExecDelay,       SEQ_GHOST.SmileLook,    F_MSECS( 650)
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.GhostDrop,  F_MSECS(  75)

                ; Runs happily towards presents...
                DECLE   AP_CMD.SetSpeed,        FPS_RATE(100),          AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(9),            AP_NONE

                ; ...and halts suddenly when he notices trap above.
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TrapDrop,   F_MSECS( 300)
                DECLE   AP_CMD.Exec,            SEQ_GHOST.Reset,        AP_NONE
                DECLE   AP_CMD.SetDirWait,      SPR_DIR.Up,             F_MSECS( 750)

                ; Stares at trap quizzically...
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.GhostWhat,  F_MSECS(1500)

                ; ...and frowns 
                DECLE   AP_CMD.ExecDelay,       SEQ_GHOST.Stare,        F_MSECS( 150)
                DECLE   AP_CMD.ExecDelay,       SEQ_GHOST.Frown,        F_MSECS( 825)
                DECLE   AP_CMD.Exec,            SEQ_GHOST.Clench,       AP_NONE

                ; End of script.
                DECLE   AP_CMD.StopDisable,     AP_NULL,                AP_NONE

                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@TrappedGhost: DECLE   AP_CMD.SetVisib,        AP_HIDE,                MOB.mTrap
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                AP_NONE
                DECLE   AP_CMD.Delay,           F_MSECS(225),           AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Stare,         F_MSECS( 550)

                ; Trapped Ghost looks around confusedly...
                DECLE   AP_CMD.SetDir,          SPR_DIR.Left,           AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 400)
                DECLE   AP_CMD.SetDirWait,      SPR_DIR.Right,          F_MSECS( 750)
                DECLE   AP_CMD.SetDirWait,      SPR_DIR.Left,           F_MSECS( 800)

                ; ...then stares blankly and blinks.
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Stare,         F_MSECS( 500)
                DECLE   AP_CMD.Gosub,           APS_TRAP.Blink,         F_MSECS( 375)

                ; Kick off Bad Toy sequence and wait
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.BadToyGo,   F_MSECS( 500)

                ; Trapped Ghost looks at Bad Toy
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 250)

                ; ...and panics!
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TrapShock,  F_MSECS( 400)
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 275)

                ; Trapped Ghost looks around in despair...
                DECLE   AP_CMD.Gosub,           APS_TRAP.Despair,       AP_NONE

                ; Trapped Ghost shakes trying to break out!
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Clench,        F_MSECS(  75)
                DECLE   AP_CMD.ClearFlag,       SPR_FLAG.FlipAdj,       AP_NONE
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TrapShake,  F_MSECS( 430)
                DECLE   AP_CMD.SetFlag,         SPR_FLAG.FlipAdj,       AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Stare,         F_MSECS( 350)

                ; ...and stares at the Bad Toy.
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 750)

                ; Trapped Ghost stares blankly and blinks...
                DECLE   AP_CMD.Gosub,           APS_TRAP.Blink,         F_MSECS( 275)

                ; Trapped Ghost hears the Snowman coming and looks his way...
                DECLE   AP_CMD.SetDir,          SPR_DIR.Right,          AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 975)

                ; ...then notices Bad Toy moving and tracks him.
                DECLE   AP_CMD.SetDir,          SPR_DIR.Left,           AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Stare,         F_MSECS(  75)
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS( 250)
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Stare,         F_MSECS( 500)

                ; Trapped Ghost looks at Snowman
                DECLE   AP_CMD.SetDir,          SPR_DIR.Right,          AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_TRAP.Look,          F_MSECS(1000)

                ; End of script.
                DECLE   AP_CMD.StopDisable,     AP_NULL,                AP_NONE

                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@Snowman:      DECLE   AP_CMD.SetSpeed,        FPS_RATE(22),           AP_NONE

                ; Enter stage right
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                MOB.mSnoArmL
                DECLE   AP_CMD.MoveToX,         SCREEN_X(18),           AP_NONE
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                MOB.mElfHair
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                MOB.mSnowman

                ; Moves to center-right stage...
                DECLE   AP_CMD.MoveToX,         SCREEN_X(13) + 3,       AP_NONE
                DECLE   AP_CMD.Delay,           F_MSECS(25),            AP_NONE
                DECLE   AP_CMD.ClearFlag,       SPR_FLAG.Animate,       AP_NONE
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnoStop,    F_MSECS( 675)

                ; ...and stares at Trapped Ghost and Bad Toy...
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnoLook,    F_MSECS( 675)

                ; ...then reels in shock! SHOCK! at the scene of the crime.
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnoShock,   F_MSECS( 475)

                ; Snowman is zapped by Bad Toy and melts.
                DECLE   AP_CMD.SetFlag,         SPR_FLAG.Animate,       AP_NONE
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnoMelt,    F_ANIM(15, SNOWMAN_INFO.Melt, 1)
                DECLE   AP_CMD.ClearFlag,       SPR_FLAG.Animate,       AP_NONE

                ; Melted Snowman reconstitutes into Snowball!
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnoRebuild, F_MSECS(1500)

                ; Snowball rolls away to escape from Bad Toy!
                DECLE   AP_CMD.Gosub,           APS_SNOWBALL.Escape,    AP_NONE
                DECLE   AP_CMD.SetVisib,        AP_HIDE,                AP_NONE

                ; End of script.
                DECLE   AP_CMD.StopDisable,     AP_NULL,                AP_NONE

                ; +---------------------------+-----------------------+-------------------+
                ; |     Command:              | Param1:               | Param2:           |
                ; +---------------------------+-----------------------+-------------------+
@@BadToy:       DECLE   AP_CMD.SetVisib,        AP_SHOW,                MOB.mBadToy
                DECLE   AP_CMD.SetVisib,        AP_SHOW,                MOB.mBlites

                ; Bad Toy moves to meet the trapped Ghost
                DECLE   AP_CMD.SetSpeed,        FPS_RATE(16),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(7) + 6,        AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_BADTOY.Stop,        F_MSECS(2850)

                ; Kick off Snowman sequence
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.SnowmanGo,  F_MSECS(2600)

                ; Bad Toy moves to meet the Snowman
                DECLE   AP_CMD.SetSpeed,        FPS_RATE(18),           AP_NONE
                DECLE   AP_CMD.MoveToX,         SCREEN_X(11) + 1,       AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_BADTOY.Stop,        F_MSECS( 475)

                ; After a while, it shoots the Snowman!
                DECLE   AP_CMD.ExecWait,        SEQ_ZAP_SNOWMAN,        BYTE_PK(4, 7)
                DECLE   AP_CMD.Delay,           F_MSECS(2250),          AP_NONE
                DECLE   AP_CMD.ExecDelay,       SEQ_BADTOY.PowerOn,     F_MSECS(1500)

                ; Blank the screen, zooming in on the Bad Toy
                DECLE   AP_CMD.ExecWait,        INTRO_SEQ_8.ZoomIn,     AP_NONE
                DECLE   AP_CMD.Delay,           F_MSECS(250),           AP_NONE

                ; Bad Toy dreams of Carol...?
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TauntElf,   F_MSECS(2000)

                ; NO! He wants her DEAD!
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TauntCross, F_MSECS(1000)
                DECLE   AP_CMD.ExecDelay,       INTRO_SEQ_8.TauntChord, F_MSECS(2500)

                ; The End
                DECLE   AP_CMD.Stop,            SEQ_DONE.Intro,         INTRO_SEQ_8.CleanUp
                ENDP

http://www.CarolVsGhost.com/videos/Seq%238.mov

 

 

Besides the "Auto-Pilot" scripting engine, there is also an entire infrastructure dedicated to supporting the cut-scenes in Christmas Carol. It includes routines that automatically handle background tasks that add to the polish of the final game.

 

For example, one such routines randomly picks a horizontal position in the stage in which to animate a falling droplet from the roof. It executes after a randomly chosen delay, and it randomly picks between two or three different animation sequences. The final effect is that of droplets randomly falling from the roof, at varying intervals.

 

Another one is the automatic "gate cover" on the edges of the scene. There are "ice cube" blocks at the edges of the scene, but they are transparent. The sprites enter and leave the scene by coming out and going into these blocks, but since they are transparent, the transition looks awkward. My solution was to dedicate a single MOB of high priority to "cover" the blocks.

 

However, I didn't want to be bothered with the direction the sprites were moving and keeping track which block needs to be covered at any time, so I built a routine that automatically detects the closest moving sprite to a wall, and relocates the "cover" accordingly. The limitation is that only one sprite can go in or out of the scene at a give time, but in practice this was not really a problem.

 

Here's a test of how it works:

post-27318-0-89030900-1447274141_thumb.gif

 

Notice that the default location is on the left block, but that a change is triggered whenever a sprite gets close to one of the edges. Again, this is all automatic, and happens during the introduction sequence engine without having to explicitly invoke it.

 

Of course, if I were to do this again (and I will!), there are many things I would change to make it easier and more intuitive. However, as my game attest, it was very effective. :)

 

-dZ.

Edited by DZ-Jay
  • Like 3
Link to comment
Share on other sites

OT: Is there any way we can get an mp3 of some of those Carol sound effects? I'd like to make a new ring tone and text message alert sounds..

The sound effect when it says "Ready? Go!" would be a cool text notification. The whoosh sound reminds me of an 8bit equivalent of similar sounds in Zombies Ate My Neighbors on Genesis :)

Link to comment
Share on other sites

OT: Is there any way we can get an mp3 of some of those Carol sound effects? I'd like to make a new ring tone and text message alert sounds..

The sound effect when it says "Ready? Go!" would be a cool text notification. The whoosh sound reminds me of an 8bit equivalent of similar sounds in Zombies Ate My Neighbors on Genesis :)

 

You can find a lot of them here, including the "whoosh!" sound fx:

http://www.carolvsghost.com/pg_history.html

 

Please keep in mind that these are made available for personal use, and not for re-distribution. :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...