Community
General and Everything Else => The Games and other Sierra Adventure stuff => Topic started by: cosmicr on September 19, 2020, 10:34:59 PM
-
I've been slowly learning SCI programming, working on my game. As always my game is huge in scope and I needed a diversion.
I wanted to try to familiarise myself with a few lesser used functions of SCI and learn a bit more in the process, on a smaller game.
So today I present: SCI Tetris!
(https://i.imgur.com/vPOwBtA.png)
No don't check your calendar, this isn't an April Fools joke...
It's all coded in one room. I've included the source for anyone who wants to take a look (warning it's quite messy). Anyone new to SCI programming might learn a few things.
How it works and my methodology:
- I keep an array of the board in a 20x10 array. SCI doesn't support 2d arrays, so it's basically a 200 element array.
The blocks are programatically generated from one View (with 6 loops) and move down the board. A popular implementation of a Tetris game.
When the blocks hit the bottom they become part of the board and I used the AddToPic function. One of the issues I had to overcome was the addToPic library function doesn't work the way I wanted it to so I used the Kernel function instead. - Once I had the main game working, I added boundary and lines cleared detection. I used the template gScore and gMaxScore for the scoring. I also used the death handler but modified it to display a random Russian "Superstition" just for fun (and to abuse the text resource feature). I copied all the quotes from Wikipedia into a text file, then using a hex editor I replaced all the CRLF's with 0's and imported the text patch into my game.
- The game gets progressively faster as you level up. Rosella is there to give you a sense of urgency.
- I had a bit of trouble with keys. I'm not sure if SCI0 allows a key-held event. So for that reason you can't hold a key down you have to "tap" the key controls. I didn't spend a lot of time on controls so it might be possible to improve.
- High scoring is saved to a local file in the game folder so that next time you play it's still there. The big font is just a "Russian" style Cyrillic-looking font that I found online.
- Save and restore sort of don't work, but it wouldn't take much to make it work. But why you'd want that is beyond me hahaha.
- There's also some midi music in there too.
- I should also add I used Kawa's version of SCI Companion, but I don't think it makes any difference.
- If anyone's wondering this is the result of about 12 hours coding/design/learning (about 2 days).
So anyway I've attached the game files to this post, take a look, let me know what you think, and any questions you might have!
Now back to my main game...
-
Well, that's awesome, you're awesome.
-
Very cool! I look forward to giving this a go!
-
Cool!
-
I've played through this a bit, and greatly optimized the code. Here are some of the changes made:
The system scripts and globals have been replaced with the original Sierra ones.
Unnecessary LSL3 remnants have been removed.
The high-score file is now managed entirely by a distinct File object and its methods. This is much simpler than using the kernel functions.
The menu bar has been greatly simplified. Save and Restore aren't needed for this kind of game.
You can now move blocks with the arrow keys as well as WASD.
-
Awesome. Very nice. I thought about removing all the redundant scripts but thought best to leave it alone. The 1.1 version is what it would have been if I wasn't sick of working on it hahaha. Are these new scripts from your templates? Do you have a full list somewhere of the changes you've made on those?
I originally left the save/restore in because I thought it was funny and was also a reminder that you're playing tetris on a Sierra game engine.
What does the (`) Grave accent (backwards apostrophe?) do on the wasd control section? Convert the literal to a number? Is that documented somewhere?
Interesting it feels a lot more responsive now. Could all the overhead make such a difference?
-
What does the (`) Grave accent (backwards apostrophe?) do on the wasd control section? Convert the literal to a number? Is that documented somewhere?
` denotes the following character as the key for the menu.
See here (https://gist.github.com/OmerMor/7445cfca5fe927b2a0470757da56e944#file-sci-kernel-documentation-1989-07-25-txt-L707).
-
Hmm weird
I thought that only applied to menu definitions.
-
Hmm weird
I thought that only applied to menu definitions.
Oh, sorry - I think what you're talking about is the single character notation:
Characters are single ASCII characters, and are denoted by preceding the
character with the reverse single quote ("tick") character:
`A represents uppercase A and
`? represents the question mark
Several character sequences represent special key combinations:
`^a represents ctrl-A
`@b represents alt-B
`#4 represents the F4 key
See here (https://gist.github.com/OmerMor/82086056d254db75dbeed8c4b2a639ee#file-the-sci-programming-language-1988-04-04-txt-L448).
-
I tried to add a Bag of Seven randomizer but I can't seem to get it down.
-
Game is now downloadable from the games page: http://sciprogramming.com/fangames.php?action=review&id=208 (http://sciprogramming.com/fangames.php?action=review&id=208)
-
Maybe it's better to link the game page, the improved version of EricOakford?