Menu

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.

Show posts Menu

Messages - Max

#241
Development / Enemy Obstacle Behavior: Swimming
March 07, 2018, 07:11:26 PM
Hey, so I was trying to make a zora kind of guy, and I set his behavior to swimming. Now he will swim through the ground with impunity. Does the swimming behavior allow enemies to walk on the ground also? Is there a behavior that keeps them in the water? Thanks!
#242
Your projects / Re: Ocean's Heart
March 07, 2018, 07:08:16 PM
Cool, I think I've got all the errors you guys caught fixed (outside of the "illegal direction" errors.)

Diarandor, maybe something like the maps from Metroid? My main problem is my pause screen is running out of room, haha. Well, actually, so there's game:on_key_pressed()
Would something like this work? From the game_manager script?

Code (lua) Select

require("scripts/menus/map_menu")
game:on_key_pressed("m")
  if game:get_value("currently_map") ~= true
    sol.menu.start(game, "map_menu")
  else
    sol.menu.stop("map_menu")

#243
Your projects / Re: Ocean's Heart
March 07, 2018, 05:19:14 AM
Thanks for playing, guys!

Ezka, you can use the tag [ *img] and [*/img] with no * with a direct link to the image inside the tags. Also on imgur if you click on your image it automatically generated links for BBC code with the tags and your link. That's what I use.

Thanks for the error catches. The illegal direction errors just mean you created a sprite with <4 directions, so like the vase entity only has 1 direction (which is automatically right), and the entity is technically facing down. So it displays and works fine, but sends an error. The way you fix that is you just duplicate the direction so there's 4 and the error will go away, I just haven't bothered.

Ezka, the monster bait can only be used on certain stones- I haven't figured out how to make an equippable ites menu. Or a map screen for my menu... But anyway, you just go up to the certain stones and press spacebar. I should probably explain that better in-game. There's a guy in Crabhook Village that explains it, but he's kind of easy to miss and it's still a little obtuse. I'll make that better.

As far as respawning in the wall, I have no idea why that happens. Oh wait, actually I might, you said you died outside the lighthouse but respawned inside? I have an idea.

Last question, you said some of the graphics look off? Which ones? I'd love to fix them.



Diarandor, thanks for the error catches! A couple questions, do you remember what dialog had the typo about arrows? Who you were talking to?

Also, when you say swimming through boats, I don't have any plans for the player to ever learn to swim, my maps just aren't set up for it. Do you mean jumping off the dock and drowning in a boat? The issue is they're NPCs, so their hitbox is 16x16, lol.

Regarding a save-delete function, I was planning to get to that once I make a title screen. For anyone testing who doesn't know this, you can delete (or edit!) You save file by going to the location Solarus savegames are stored, finding the game folder, and manually deleting (or editing!) the file.

As far as design, I wasn't planning on ever having a map. It's a part of menus being to complicated to set up, I just decided I'd do that with my next game and leave it out of this one. Do you feel like a map is necessary for you? As the map designer, I have a hard time seeing the maps from another perspective.

Side note- I know a lot of people have posted on this forum essentially asking for more pre-made elements to come with Solarus (items, enemies, etc.). I agree somewhat with sentiments about how Solarus is for people who can code, however I think it would be nice to at some point,be able to release basically an empty game that had a menu, a few items, and maybe a couple enemies coded in. Is that kind of what Children of Solarus aims to be? If not, in a year or so I'd be willing to create such a thing, just an empty game with the systems set up (map, inventory, maybe three enemies, basic items), documented so they're easy to use.
#244
Your projects / Re: Ocean's Heart
March 06, 2018, 08:18:33 PM
Thanks! : D

So yeah, I'm still working on creating new sound effects. It's a pretty time intensive process, but I enjoy it.

And yep, I forgot I accidentally left the initial game start in my debug room! The new file I uploaded fixes that and starts you in the game, as well as fixes the error llamazing encountered, which I think would prevent you from completing the game, idk.

If you stick with the old download for some reason, the door in the top-left goes to the start of the game.
(The top right goes to the first areas I created, to test game mechanics, and the hole is the one I use to go wherever I'm testing without going through the whole game :p)
#245
Your projects / Re: Ocean's Heart
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?
#246
Game art & music / Oceansheart Graphics
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.


#247
Your projects / Re: Ocean's Heart
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!
#248
Your projects / Re: Ocean's Heart
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.



#249
Your projects / Re: AZ2R - Another Zelda 2 Remake
March 05, 2018, 04:57:43 PM
Quote from: Shade Aurion on February 10, 2018, 10:41:35 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.
#250
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?
#251
Development / Re: Displaying an image on pause
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.
#252
Development / Re: Enemies drowning animation?
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!
#253
Development / Re: Displaying an image on pause
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!
#254
Development / Re: Enemies drowning animation?
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
#255
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!