## [WIP] Sky goes to Net on Boomstarter!

Show off your games, demos and other (playable) creations.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### [WIP] Sky goes to Net on Boomstarter!

Story
"Sky goes to Net" is a story about tiny little bot that goes by the name Sky.
Sky is a small PC program. It doesn't remember neither who or what created it or how did it end up being where it is. It's destined to go on a journey throughout the digital world and find the answers to its (and those of other programs) questions.
It all begins with a havoc in the Sky's personal file storage. Very unpleased with what has happened Sky is forced to comply with the Unknown Voice's command to restore Sky's memories and learn that our protagonist is no less than an incarnation of catastrophe.
In the end Sky is bound to meet his "other" self and acknowledge or dismiss it.
Among other things it will (or will it?) save the world and find out how the Human World future defined his present.

Mechanics
Player takes control of Sky. The goal is to through a set of 2d locations and to find a bot named Net. Sky will be fighting against viruses of all kinds (worms, trojans, archived malware, zombie-processes etc).
Controls designed to be nearly as easy and as responsive as that in the classic Rockman/Megaman games.
Sky has an expandable inventory (starting with 20 slots) with a hotbar of 10.
There will be multiple upgrades to pimp your Sky.
Dozens ability-based AI patterns makes it easy to create your own bot by listing those abilities.
The game is has shops, power-ups and upgrades, hidden secrets, destructible stuff, false walls, etc.

Planned Features
- Minimum of 3 endings. (%% of recovered memory, some actions taken, world exploration %% will all have an impact on that)
- vast selection of temporary and permanent upgrades
- shops in every location (or in-between locations) to offer equipment, firepower, ammo, different gadgets, etc
- possibility of re-visiting levels to further explore those
- bonuses for missions completion
- several difficulty levels
- basic modding API

Music
Chiptune/Electronic is what I have in mind
I really like these gyus' music: http://ericskiff.com/music, http://ozzed.net/music/, but still need help in this direction. Maybe someone will be able to help me with the music?

Graphics
Won't mind to receive some help here too. Or else it will be all PD and CC0 and my crappy art. So, I *do* need some help!

Current state (what actually works ATM)
- Everything controls-related: movement, shooting or hitting, HP bar, inventories, buying stuff.
- About dozen AI patterns: walking, shooting, pit/void detection, jumping, projectile/enemy/objects detection. Can be stacked.
- Worm-like enemies AI.
- Intro and a test location.
- Everything listed in this topic as an update info.

My personal view on the development direction of the project
• To go in-between Rockman/Megaman, Cave Story, Metroid and Terraria (I really like it's inventories).
• To add shops and RPG-elements like raising stats ang finding some weapons.
• To create areas that can't be accessed until a certain condition met (weapon gained, boss beaten etc)
• To introduce powerups - the protagonist have mass and jump-power params which may change during the game for a period of time or permanently.
• To introduce enemy powerup system Doki-Doki Panic!/Disgaea -like
• To add multiplayer support (enet seems like a good lib to go with and I have some experience with it)
There are many interesting ideas which may fit and I'm eager to hear some more ^_^

Please, refrain from building anything upon this prototype.
I don't really want to pin a license on my work at the moment, so I humbly ask to not go further than fair dealing. Thanks in advance!

The *.love file should run fine on Android, since virtual controls are there too.
On a PC/Mac/Linux the keys are: WASD for movement, Q-E for switching weapons, Return/Enter for jump and Backspace to Fire. F12 saves a screenshot ^_^

Various development-related files and prototypes are here! ^_^

For the full list of available demos only consider browsing a gallery here.
Last edited by 4aiman on Sat Jan 28, 2017 10:47 am, edited 8 times in total.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### [WIP] Sky goes to Net - Messages module

One more gif showing a textbox messages system.
Fire to speed up the text, Jump to show next lines when the text is paused.

Messages can handle utf8 properly (I really hope so )
Last edited by 4aiman on Thu Jun 16, 2016 3:18 pm, edited 1 time in total.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### Re: [WIP] Sky goes to Net

I've tinkered a little with messages and items.

The result is 2 new modules (not really finished): "inventories.lua" and "items.lua"

Like the name suggests, the first one helps me to create and manage inventories. Currently only new_inventory, add_item and remove_item methods are available.
Add and Remove methods can add/remove different amount of item into/from an inventory slot. Currently max is not capped.
Remove also checks that the amount to remove is lesser than there are such items in a whole inventory.

Now, the items.lua for now have only 2 methods: new_item and new_weapon. The latter just fills in some weapon-specific defaults and calls the first one.

The changes above let me add new item of different types with ease. Just for the sake of test I've added 2 items:
• Jump Plus (an upgrade - permanently raises the jump power of a player)
• Jump Up (a powerup - temporarily raises the jump power of a player)

As for messages, I've added a simple "pop-up" and "slide away" animations. Nothing extraordinary, but feels a lot better

The gif shows both powerup and upgrade in action as well as messages window animation.

P.S. It's really a shame there's no [spoiler] bbcode.
Last edited by 4aiman on Sun Jun 19, 2016 5:20 pm, edited 3 times in total.
undef
Party member
Posts: 438
Joined: Mon Jun 10, 2013 3:09 pm
Location: Berlin
Contact:

### Re: [WIP] Sky goes to Net

Keep at it, it looks really nice!

I would really recommend changing the controls though, the one's you set may work well on your keyboard but most of these keys differ vastly from keyboard to keyboard.

I'd recommend something like UIJK (the J key is easy to find on most keyboards because of a marker on it, even when you're not seeing the keyboard).
twitter | steam | indieDB

Check out quadrant on Steam!
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### Re: [WIP] Sky goes to Net

Thanks for reply! ^_^

WASD + QE are used only due to the fact it's convenient for me to have those particular keys binded to controls.
Speaking of which, UIJK for action buttons truly seems like a good defaults.
(I wonder what should I do with non QWERTY layouts...)

Anyway, I'm planning to make controls configurable.
All code I need for that is already there, I just need some kind of a settings screen.
Although, I guess, that will have to wait until I'll be updating the menu module.

I also have something new to show: player inventory.

In the previous post it was present but could not be managed.
Now that's totally possible in an RPG-like way.

To navigate through an inventory directional keys are used (WASD in my conf).
The cursor is looped in all directions.

One can swap items like so:
• select an item with action1 key (in my layout it's Return/Enter)
• select another item or an empty slot with action1 key
• either confirm with the action1 key or select another item or an empty slot. One also can cancel the selection with action2 key (backspace)
• an in-game message-like window to show the name and the description of currently highlighted item
• some really lame descriptions to the test items
• zoom-im/out effect for currently selected inventory slot
• slightly different background for hotbar items
• two extra "windows" that show currently selected items when swapping
^ Some minimal prettiness wouldn't hurt no one

I still have to test this on different screens to replace numeric offsets with something math-based, but a fresh *.love file is here for anyone interested:

P.S.
Controls are set in player.lua at line #70.
Change there or look at lines #135 and #146 in main.lua as there's an example on how to set key bindings.
Note, that there's action5 key which is not listed in main.lua. It defaults to "space" and is used to open player's inventory.

Edit: fixed [ list ]
Last edited by 4aiman on Sun Jun 19, 2016 5:21 pm, edited 2 times in total.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### Re: [WIP] Sky goes to Net

Decided to not rush into making shops in favor of writing some AI.

So I've created yet another module enemies.lua and scripted methods to add, update and draw multiple enemies.
Due to the fact that one kind of enemy can be spawned multiple times I ended up with 2 methods to create an enemy:
• enemies:add(<definition table>) - only registers a new mob with all its properties and behaviour switches.
• enemies:spawn(<name of a registered mob>, x, y) - actually spawns pre-registered mob at (x, y)
Currently there's only one "lazy" type of monster acting pretty much like goombas in SMB - it switches direction if run into the wall, but fails to see below itself and would fall into any pit. There's no destruction code yet.
In turn, a player is able to jump on a "lazy" enemy (with a certain precision) and "ride" it.
Last edited by 4aiman on Thu Jun 16, 2016 3:19 pm, edited 1 time in total.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### [WIP] Sky goes to Net - Smart Jumpy Bot

Today's addition is a more sophisticated AI: The "Smart Jumpy Bot" AI.

I've added several sensors rather quickly, attached those to an enemy and made those sensors fill a table.
Filled table looks like this:

Code: Select all

{
fbr = true,  -- far bottom right sensor
ul = false,  -- upper left sensor
bl = true,   -- bottom left sensor
ml = false,  -- middle left sensor
fbl = true,
mr = false,
br = true,
ur = true
}
I think the non-commented lines are easy to figure out.

I've tinkered with filters and the cols table returned by world:move() [I'm using Bump, remember? ] and got this:

What can I say?
A pretty smart enemy that is able to:
• detect voids it *can* (as in "it can jump far enough to land on the other side") jump over
• detect voids it can't jump over and turn back (changes it's direction)
• detect any platforms that are higher than it which it *can* (as in "it can jump high enough to jump up there") jump on
The problem is: how to make it "sence" when it can safely drop down?
Right now an enemy will stay on those crates forever (if left on its own) being unable to "sence" that there is still a level of "ground" and not bottomless pit.

Working on that right now trying to make use of world:project().
Any ideas are welcomed and highly appreciated.
Last edited by 4aiman on Thu Jun 16, 2016 3:19 pm, edited 1 time in total.
davisdude
Party member
Posts: 1154
Joined: Sun Apr 28, 2013 3:29 am
Location: North Carolina

### Re: [WIP] Sky goes to Net

This is cool! Looks very well put together
GitHub | MLib - Math and shape intersections library | Walt - Animation library | Brady - Camera library with parallax scrolling | Vim-love-docs - Help files and syntax coloring for Vim
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### Re: [WIP] Sky goes to Net

Thanks!

After many trials and fails I've finally made the "Smart Jumpy Bot" respect the level's walls and voids
As I didn't show detection of huge holes in the floor in my previous post, here it is:

^ Note how the enemy "don't want to" fall/jump_from the platform.

The blue rectangles mean that the enemy which is leaving them is landed on a map tile.
The green rectangles mean that the enemy which is leaving them is going through a map tile because that tile is solid only when something is above it.
The white rectangles mark the map tile which lets enemy through itself.

And now a huge, "overall" showcase/test:

I've made enemy sensors hidden on a purpose, so that anyone will be able to judge the behaviour of an enemy, not the mechanics behind it.

STRANGELY enough, the part of this enemy's AI which handles landing on a top-only-solid blocks had to be tweaked.
Here what I have for a player:

Code: Select all

        if other.properties.solid == "top" and self.y + self.h <= other.y then
return "slide"
end
return false

But that didn't work for enemies as those always went through the blocks. Sometimes it worked (with like 1/40 chance decided upon launch) but most of the time it didn't

So I had to "reverse" the condition:

Code: Select all

         if other.properties.solid == "top" and math.floor(self.y+self.h)> other.y+3 then
return false
else
return "slide"
end

And *now* it works О_о

Please, note the "+3" thingy.

Enemies didn't respect the top-only-solid blocks until I've added that. (Actually, they did, but chances that they would on a *current* launch were like 1/20. Sometimes it worked with +2 and with +1 and even +0, but only +3 seemed to fix the issue).

Ideas? Anyone?
Last edited by 4aiman on Sun Jun 19, 2016 5:19 pm, edited 1 time in total.
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

### Announcement on *.gif attachments

I've decided to remove all "gif" attachments but the latest ones.
I've done that to reduce the size of the thread and to save the traffic of those who's on mobile devices.

Fear not, as I've uploaded every other deleted gif file to my Dropbox
The link in also available in the first post.

I'm planning to move any old gifs to Dropbox right after posting new.

### Who is online

Users browsing this forum: Bing [Bot] and 10 guests