Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Max

Pages: 1 ... 13 14 [15] 16 17
211
Your projects / Re: Ocean's Heart
« on: March 06, 2018, 04:48:19 pm »
Thanks guys! Neovyse, I'm pretty happy with the sound effects and screen-shake. I've still got to come up with a better way to do it though because maps that aren't free-scrolling won't shake : /

Jojo- I think as far as "completion", there's a couple ways to answer that. I've been working on this game for a year, and I expect I'll finish it in about one more year (though maybe I'll get things done sooner, who knows!)(or maybe take longer. Who knows again, lol...)

As far as gameplay, I'll estimate there's about 3 hours of possible gameplay now. I'd like to have, when everything is done, around 7 hours. So content-wise, I'm about 45% done.

Does that answer your question?

212
Game art & music / Oceansheart Graphics
« on: March 06, 2018, 04:04:57 am »
Hey! I wanted to do something to help out the community. I like to think graphic art is one of my talents, and I've put in many many hours of work on tiles for the game I'm working on. I figure some of them might come in handy for others.

They're not necessarily compatible stylistically with Link to the Past graphics, because I taught myself pixel art looking at Minish Cap, haha, but at least the perspective is similar. I like to think these are a little more flexible in terms of topographical layout. Feel free to use these however you like, but please give me credit if you use them. It'd also be super cool if you let me know where my art goes, just because that's fun to track and see other people getting use out of my work : )


If you have any advice or feedback, I'm always looking to improve my talents and will welcome it.



213
Your projects / Re: Ocean's Heart
« on: March 06, 2018, 03:44:20 am »
Shoot, after I tested everything I added in a hero:freeze() function and was like "this is simple, I don't need to test it". Well.

Thanks though, got it fixed! I better play through everything again as fast as I can to see if I messed anything else up, haha.


UPDATE:
Ran through everything again today- the main quest, at minimum, can be completed without any problems that I could find. I didn't test every side quest again, but I don't think I changed anything in those that I didn't test.

Anyway, the download links have been updated with a new file that avoids that error!

214
Your projects / Re: Ocean's Heart
« on: March 05, 2018, 05:15:27 pm »
Hey guys, so I think I'm actually ready to show this off now. As Christopho suggested, I put my data folder and all the Solarus stuff in one zip, which was smaller than I expected, so I just put it on Google Drive. If you'd like to play the game I've been working on, here it is!

LINK!(Not that Link)(It's not a Zelda Game)

If you do all the sidequests and explore everything, I think the game is about 3 hours long so far, maybe more.

CONTROLS:
Arrow keys - Move
Space Bar - Talk / action
X - Bow
C - Sword
V - Bombs
D - Pause / Save

If you give this a play, I'd love to know what you think! Thanks.




215
Your projects / Re: AZ2R - Another Zelda 2 Remake
« on: March 05, 2018, 04:57:43 pm »
Thanks! TBH i'm using them to hide the lack of corner tiles for the edges or mountain tops. A few of them are bugging me too so I might put something different there instead.

Hey, this project is looking really good. I never played Zelda 2 for more than like 20 minutes, I just couldn't get into it. I'd honestly rather play a LTTP style remake, I think, and say that's close enough so this is great, haha.

If you want to send a png of the mountains that are missing tiles and point out what's missing, I could just make some corners for you, I don't think that'd take very long.

216
Development / Re: Creating a respawn point on map changed?
« on: March 04, 2018, 09:35:14 pm »
I'm hoping to get it out this week. You guys have been super helpful with some of the major things I've been wanting to get done first- this respawn system and a quest log. I've got maybe half a dozen little things (like, you can't read this paper on the desk in this house, this puzzle is slightly too hard) that I can fix in an hour, then there's a tavern in one town I need to finish, then it's one last playtest and last-minute balancing before I send it out.

I'm eager to get it out because I don't have it backed up anywhere currently and it's making me nervous. Anyone have advice on a best place to host a file? My google drive is pretty full of music/video production stuff, and it seems like github is most people around here's choice. Is that free?

217
Development / Re: Displaying an image on pause
« on: March 04, 2018, 09:27:46 pm »
Oh, that's super cool! Is that something you have on the site somewhere for others to use, or would you rather hold onto it yourself. I totally understand if it's the second, and I'll eventually figure it out myself.

218
Development / Re: Enemies drowning animation?
« on: March 04, 2018, 09:26:38 pm »
idk, I figure if the engine is automatically playing a "falling into a hole" sound effect when enemies fall into a hole, it doesn't seem too specialized to automatically play an accompanying animation-- and as for specificity, the engine requires sound effects for things like "cane", "boomerang", "hookshot", which I'd argue are even more specific.

But point taken, and I agree, it's not a very complicated script. But not at the top of my priority list either, so I just thought I'd check to see if it was a built-in function : )
Thanks for the info!

219
Development / Re: Displaying an image on pause
« on: March 04, 2018, 09:19:51 pm »
Thanks, llamazing! Those are neat tricks, basically since multiply is darkening pixels and you can't darken black, you can use it to affect white, and vice-versa? Awesome. I might probably take that tip and try to work it into the ALTTP dialog box script, so I can put something like $b in my dialogs to turn the text blue to indicate the hero is talking, then $w to turn it back to white for NPCs.

Not that I should get started on that until I finish up my current to-do list of things that need wrapped up before a like, demo 1 kind of thing, but it's nice to know some of what the to-do list holds for the future!

220
Development / Re: Enemies drowning animation?
« on: March 04, 2018, 09:03:41 pm »
Cool! I knew it'd be straightforward to write a script that does this. But, since the engine is already checking every enemy's ground to remove them and make a sound effect, I thought it might also inherently have the ability to pull a "drowning" or "falling" animation for every enemy already, similar to how the engine pulls the "enemy_killed" sprite automatically from "sprites/enemies/enemy_killed".

I thought maybe if I put an animation in "sprites/enemies/enemy_drown" or "sprites/entities/entity_fall", the engine might automatically pull from that when it is already checking for that circumstance to make the appropriate sound effect. If not, that's fine, I don't necessarily want to spend time coding something the engine is already doing part of, :p

221
Development / Re: Creating a respawn point on map changed?
« on: March 04, 2018, 08:57:45 pm »
ALRIGHT GUYS!
It works. There's a little bit of hacky stuff I had to do, which I will explain as I post what my code is. So the basic idea is this, for anyone who wants to join the conversation at the conclusion to implement a system like this:

STEP 1. Each time the player enters a map, the game will do one of two things. If the player has entered the map during normal gameplay, the game_manager script will put the player's location (x, y, layer, and map) and facing direction into savegame values. If, however, you enter the map during the respawning process, you will be moved to the saved location using hero:change_position(). It is of note that this has to be the map:on_opening_transition_finished() event, NOT map:on_started(). Part of the opening transition is moving the player actually onto the map, if you do map:on_started, the respawn location that gets saved is halfway onto the map from the edge if you entered by the side of the map. The player will be frozen halfway onto the map, although they can leave the map to reset, but anyway. You've gotta store the location data from on_opening_transition_finished.

STEP 2. Upon a gameover state, the game_manager script sets the hero's life to whatever you want (I'm using 80% full, most Zelda games do 3-4 hearts), then teleports the player to a blank map used only for respawning. Game:start() is never called, notably, because that would reset the player to the last saved DESTINATION, and often the player enters a map without using a destination, which was the whole point of this system.

STEP 3. This blank map has overriding behavior for map:on_opening_transition_finished(), because we don't want this location to be saved as a respawn point or the engine to try and move the hero to the restart position. The script for the respawn map creates a black surface (I made a menu called black screen for this) to hide what's about to happen. Then it teleports the hero to the map saved back in step one.
-HOWEVER, since we didn't specify a destination, you'll be taken to some destination on the map that's the default one, or else put at 0,0, either way, this is undesirable. So once you've been teleported there, the game_manager script will kick back in. This time, instead of saving your location (since we're in the respawning process), the game will use hero:change_position() to move the hero to the position we saved. The black screen hiding what's going on is for this purpose. Otherwise, we'd see the hero end up at some other location then be immediately moved to the saved one.
-Seeing the hero moved first to a wrong position, then the right one, could be avoided by having the hero:change_position() be called from a map:on_started() meta event instead of map:on_opening_transition_finished(). However, I just didn't want to go back and change all the syntax of everything I'd coded that already used that event, so I used the hacky method of just throwing up a black surface to hide everything. Then I take the surface away once everything is in place.




So all in all, the ingredients you'll need to recreate a system like this are:
1. game_manager script
2. a blank room
3. a menu that's a black surface to hide the untidy parts.


Game manager script:
Code: (lua) [Select]
--Set Respawn point whenver map changes

local map_meta = sol.main.get_metatable("map")
map_meta:register_event("on_opening_transition_finished", function()

  if game:get_value("gameovering") == true then --if we're in the respawning process, move the hero to the saved position
    game:set_value("gameovering", false)
    local hero = game:get_hero()
    hero:set_position(game:get_value("respawn_x"), game:get_value("respawn_y"), game:get_value("respawn_layer"))
    hero:set_direction(game:get_value("respawn_direction"))
    require("scripts/menus/respawn_screen")
    sol.menu.stop(respawn_screen) --take away the black curtain that hides the messiness.

  else --if it's normal gameplay, not the respawning process.
    local map = game:get_map()
    game:set_value("respawn_map", map:get_id() ) --savegame value "respawn map" is this new map's ID
--    print(map:get_id().." respawn saved")
    local hero = game:get_hero()
    local x, y, layer = hero:get_position()
    game:set_value("respawn_x", x) game:set_value("respawn_y", y) game:set_value("respawn_layer", layer)
    game:set_value("respawn_direction", hero:get_direction())

  end
end)




--Game Over

function game:on_game_over_started()
  local hero = game:get_hero()
  hero:set_animation("dead")
  sol.audio.play_sound("hero_dying")
  sol.timer.start(game, 1500, game_over_stuff)
end


local function game_over_stuff()
    -- some of this is just because my game has elixers, which function like the potions from Zelda gameboy games. They'll heal you
    --when you die if you have them in your inventory.

    local elixer = game:get_item("elixer")
    local amount_elixer = elixer:get_amount()
    local hero = game:get_hero()

    if amount_elixer > 0 then --you can ignore this case if you don't have a magic potion thing system
      game:set_life(game:get_value("elixer_restoration_level"))
      hero:set_animation("walking")
      elixer:remove_amount(1)
      game:stop_game_over()
    else
      game:start_dialog("_game.game_over", function(answer)
        --save and continue
        if answer == 2 then
          game:save()
        --contine without saving
        elseif answer == 3 then
        --quit
        elseif answer == 4 then
          sol.main.exit()
        end

    game:set_value("gameovering", true) --because we're in the respawning process
    game:set_life(game:get_max_life() * .8) --this can be set to whatever you want, but you can't leave the player with no health!
    hero:set_invincible(true, 1500) --this is just a few frames of invincibility for when you're respawned.
    hero:teleport("respawn_map") --this teleports the hero to our blank map
    game:stop_game_over()

      end) --end gameover dialog choice
    end --end "if elixers" condition
end --end gameover stuff function

Script for the blank room:
Code: (lua) [Select]
local map = ...
local game = map:get_game()
require("scripts/menus/respawn_screen")

-- Event called at initialization time, as soon as this map becomes is loaded.
function map:on_started()
    sol.menu.start(game, respawn_screen)
    hero:teleport(game:get_value("respawn_map"))
end

--This empty function is here to override the map:on_opening_transition_finished() metatable multievent.
--It keeps the game_manager script from saving a respawn location here, or trying to send the hero to the respawn location when
--the player arrives here.
function map:on_opening_transition_finished()
end


Then I've got a little menu to hide the messiness of sending the player to a map, THEN moving them to their starting location.
Code: (lua) [Select]
respawn_screen = {}

local black_screen = sol.surface.create()
black_screen:fill_color({0,0,0})

function respawn_screen:on_draw(dst_surface)
  black_screen:draw(dst_surface)

end



So, that works! Thanks for all the help, Diarandor and llamazing!


EDIT: For anyone wishing to replicate this- spiral staircase teleports don't play nicely with this! If you're respawned back to a map you entered via spiral staircase teleport, the engine actually starts you in a wall with these and shows the animation of the hero coming up the stairs. If you're respawned using this script, you'll be started in the wall, but the engine won't know you haven't arrived there by staircase, and you'll just be stuck in the wall. Watch out!

222
Development / Re: Creating a respawn point on map changed?
« on: March 03, 2018, 04:29:43 pm »
5) Don't use sensors or other entities. You do not need them, and your maps will get dirty. Do it with elegant code and without using entities, to keep things simple. That is the easiest way (which is not easy in any case).

I know and I agree, I'd much rather do it with code- but more than that, I'd rather it worked, haha. I had forgotten about entity:set_position(), that's a useful function and should work exactly as I want! Much better than creating a destination, I just had forgotten about that method. However, I'm still having problems I don't understand.

Here's my code for my blank map. This code seems pretty straightforward, but all that's being called is hero:teleport(). Everything after that isn't called.

Code: (lua) [Select]
function map:on_started()
  hero:teleport(game:get_value("respawn_map"))
  hero:set_position(game:get_value("respawn_x"), game:get_value("respawn_y"), game:get_value("respawn_layer"))
  print(game:get_value("respawn_x")) --for testing
  sol.audio.play_sound("secret") --for testing
  hero:set_direction(game:get_value("respawn_direction"))
end

I also tried writing this in a separate script and just having the script for the blank map requiring it. I'm at a loss here.

223
Development / Re: Displaying an image on pause
« on: March 03, 2018, 01:11:00 am »
Awesome! So much learning. Thanks again.

224
Development / Enemies drowning animation?
« on: March 02, 2018, 10:14:06 pm »
Hey all.

So when you knock an enemy or throw a carried item into a hazard (water, pit, probably lava too), the engine recognizes this and will remove it and play an appropriate sound. However, it doesn't show any animation. I'm not sure if I just need to create one in the right location or what, but is there a default animation for items or enemies to fall into hazards?

I'm sure one could code a script that checks for enemies or items tossed into hazards, but I'm really just curious for now if that's something the engine can already do that I'm just missing resources for.

225
Development / Re: Creating a respawn point on map changed?
« on: March 02, 2018, 09:43:22 pm »
Can confirm, sensors seem to only start on_map_transition_finished().

Interestingly, I still can't get the map to create a destination based off the saved respawn data and send the hero to it. My last attempt, to summarize, altered the map:on_opening_transition_finished() meta, so that it did two things.

If game:get_value("currently_gameover") was false, it'd save your location in respawn savegame data.
If game:get_value("currently_gameover") was true, it should create a destination from the respawn savegame data and teleport you there.

Then if you die, the engine would set "currently_gameover" true, and send you to a blank map. The blank map's script would send you to the map saved for respawning, and since "currently_gameover" was true, it SHOULD then create the destination from the respawn data and send you there.... but it didn't.



Anyway, I'm starting to feel like this technique is ballooning out. The much simpler, if less elegant, method would just be to place sensors that use game:set_starting_location() to set a manually placed destination as the starting location. It would require something like:

sensor_east:on_activated()
  game:set_starting_location(map:get_id(), "respawn_destination_1")
end

sensor_wast:on_activated()
  game:set_starting_location(map:get_id(), "respawn_destination_2")
end


to be placed on every map that is reached by scrolling, but honestly for my game, that's probably not more than a dozen maps tops, and in the time I've spent trying to figure out an alternate solution, I could have used this less elegant one and gotten it done a while ago, haha.

Pages: 1 ... 13 14 [15] 16 17