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

Topics - Zaidyer

#1
Development / Separator_on_activated direction4
February 14, 2017, 10:53:12 PM
I'm trying to force the player to get moved into a room after a separator has finished scrolling towards South.

Code (lua) Select
function sub_separator_h:on_activated(3)
-- slide down.
  local hero = self:get_game():get_hero()
  sol.audio.play_sound("explosion")
 
  -- Create movement.
  local dir = 3
    hero:freeze()
  local m = sol.movement.create("straight")
  m:set_speed(90)
  m:set_angle(dir*math.pi/2)
  m:set_max_distance(32)
  m:start(hero)
  function m:on_obstacle_reached()
    hero:unfreeze()
  end
  function m:on_finished()
    hero:unfreeze()
  end
end


But it causes this error:

QuoteError: Failed to load script 'maps/testlevel': [string "maps/testlevel.lua"]:41: <name> or '...' expected near '3'
Line 41 is the beginning of the script here. The documentation for Separators suggests "on_activated(direction4)" only needs a number referring to the proper direction (in this case South), but I don't know how to write it so it won't throw this error.
#2
General discussion / Importing levels from Graal
February 04, 2017, 03:10:10 PM
Graal has been mentioned a few times here. It's a game from 1999 that originally began as a Zelda clone and editor, very similar to Solarus in most respects. It was re-named to Graal in an attempt to break away from Nintendo's IP and eventually become a commercial game. Unlike Solarus, it has built-in netcode for online play which eventually became the focus of the engine.

Graal is fondly remembered as a (formerly) free development platform for online games with Zelda gameplay, and is mostly known today as a popular iPhone game, but it is currently under the control of a company which is infamous among long-time players and its former employees for predatory terms of service and a consistently quasi-legal approach to business. (In fact, even the game's lead programmer eventually left, citing the head of the company as very bad to be in business with.)
It's sufficient to say Graal is no longer an ideal platform.

Now that the classic Graal engine is on its way out, Solarus neatly outdoes it.
Documentation from Graal's former free years isn't easy to come by, but I have some old backups, including a collection of levels that my friends and I built a long time ago which I'm hoping to get converted to Solarus. There's enough material for a large quest here.

The Graal level format is text-based and details a 64x64 tile grid, referencing a single tileset with 4096 patterns. Here's the official documentation:
Format:
  It begins with the signature GLEVNW01.
  It can contain following data types:

  - board lines:

    BOARD x y width layerindex <tilesdata>

    This is one line of the background layer. 'tilesdata' has a length if w*2
    characters; each tile is a 12bit-index into the tile list (pics1.png) and is
    encoded in two base64 characters (upper 6 bit first)
    base64: String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    so AA is tile 0, AB is tile 1, AC is tile 2, // is tile 4095 (=0xFFF)

  - level links:

    LINK <destination-level> x y width height newx newy

    The link attributes are the same like in the link options window in Graal.
    destination-level, newx and newy must not contain spaces.

  - signs:

    SIGN x y
    text
    ...
    SIGNEND

    Signs may be empty, but SIGNEND must always be there.

  - npcs:

    NPC imagefilename x y
    script
    ...
    NPCEND

    If the npc doesn't have a filename (invisible npc), then write '-' for imagefilename.
    x and y may be floating point values. The npc script may be empty, but NPCEND
    must always be there

  - baddies:

    BADDY x y type
    attackverse
    hurtverse
    winverse
    BADDYEND

    'type' is the baddy name (graysoldier ... dragon ) or index (0...9). You don't need
    to write all 3 verses, it's also possible to only write attackverse+hurtverse or only
    attackverse, but BADDYEND must always be there.

  - chests:

    CHEST x y item signindex

    item is the item name (greenrupee ... spinattack) or item index (0...24)



Simple, right? This could be translated to Solarus's own text-based map format, probably by writing a converter. The trick, I think, is making sure the Base64 tile grid can be re-interpreted to apply to a Solarus tileset. And while almost everything else has a direct analogue in Solarus, NPCs "script" field would have its own challenges which I think are best ignored, since it's a proprietary language that wouldn't translate directly to Lua without a considerable amount of effort.

Here is a sample of an actual level:
GLEVNW01
BOARD 0 0 64 0 FDFEFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/HkGOGOGOGOGOG7f/f/f/f/f/f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/f/DiDjDkCqCqCqCqCqCqCq
BOARD 0 1 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/ABf/f/f/f/f/f/f/f/f/f/f/HkGOGOGOGOGOG7f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/DSDTDUCqCqCqCqCqCqCq
BOARD 0 2 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/ABf/f/f/f/f/f/f/HkGOGOGOGOGOHnHXf/f/f/f/f/f/f/AAf/f/f/f/f/ABf/f/f/f/f/f/f/DiDjDkCqCqCqCqCqCqCq
BOARD 0 3 64 0 FCFCFCHdHeHfJCJDJ9f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/f/HkGOGOGOGOGOGOHnHXf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/DSDTDUCqCqCqCqCqCqCq
BOARD 0 4 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/AAf/f/f/f/f/f/f/f/ABf/HkGOH1H0GOGOGOGOG7f/f/f/AAf/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/DiDjDkCqCqCqCqCqCqCq
BOARD 0 5 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GmGWGOGOGOGOGOGOG7f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/DSFhC4F9CqCqCqCqCqCq
BOARD 0 6 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/ABf/f/AAf/f/f/f/H/GmGWGOGOGOGOGOG7f/f/f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/f/f/DiDYFxC4F9CqCqCqCqCq
BOARD 0 7 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GmGWGOGOGOGOHnHXf/f/f/f/f/f/DmDnH/f/f/f/f/f/f/f/f/f/f/GQGAGBDIC4F9CqCqCqCq
BOARD 0 8 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/GmGWGOGOGOGOHnHXf/f/f/AAf/D2D3Dnf/f/f/f/f/f/f/f/f/f/f/GQGRDYFxC4F9CqCqCq
BOARD 0 9 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/f/f/f/ABf/GmGWGOGOGOGOHnHXH/f/f/f/CmCnD3CpCpDnf/f/f/f/f/f/f/f/f/GQGAGBGNDUCqCqCq
BOARD 0 10 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GmGWGOGOGOGOHnHXf/f/f/C2C3C4C5C6D3Dnf/f/f/f/f/f/f/ABf/GQGRJCDkCqCqCq
BOARD 0 11 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/ABf/f/f/f/AAf/f/f/f/f/AAf/f/f/f/f/f/GmGWGOH1H0GOG7f/f/f/f/DHDIDJDKC4D3CpCpCpCpDnf/f/f/f/AADSDTDUCqCqCq
BOARD 0 12 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GmGWGOGOG3HHf/f/f/f/DXDYDZDaFxC4C5C6C5C6D3Dnf/f/f/DwDiDjDkCqCqCq
BOARD 0 13 64 0 FCFCFCHdHeHfJCJDJ9f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/ABf/H/GmH2H3HHH/f/f/f/f/H/DoDpDqGBDIDJDKDJDKC4D3Dnf/DwDxDyDzC1CqCqCq
BOARD 0 14 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/H/D4D5D6GRDYDZDaDZDaFxC4D3DnDxDyDzC1CqCqCqCq
BOARD 0 15 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GQGADpDqDpDqGBDIC4D3DSDTDUCqCqCqCqCq
BOARD 0 16 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/AAf/f/f/f/f/f/f/f/f/ABf/f/AAf/f/f/f/f/f/f/f/f/f/GQD5D6D5D6GRDYFxC4DiDjDkCqCqCqCqCq
BOARD 0 17 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GQGAGBGNEUDTDUCqCqCqCqCq
BOARD 0 18 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/AJAKALAMANAOAJAKALAMANAOAJAKALAMANAOAJAKALAMANAOf/f/GQGRJCEkDjDkCqCqCqCqCq
BOARD 0 19 64 0 FCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/f/f/AYYHYIYIYIYIYJAZAaAbAcAdAeAZAaAbAcAdAeAZAaAbAcAdAeAff/f/DSDTEUDTDUCqCqCqCqCq
BOARD 0 20 64 0 FCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/AoYXYYYcYcYYYZApAqArAsAtAuApAqArAsAtAuApAqArAsAtAuAvf/f/DiDjEkDjDkCqCqCqCqCq
BOARD 0 21 64 0 FCFCFCHdHeHfJCJDJ9I5f/f/f/f/f/f/f/f/AAf/f/f/f/f/f/f/A4YXYZHIH6YXYZA5A6A7A8A9A+A5A6A7A8A9A+A5A6A7A8A9A+A/f/f/DSDTEUDTDUCqCqCqCqCq
BOARD 0 22 64 0 FCFCFCHNHOHPFhC4I3I4I5f/f/AAf/f/f/f/f/f/f/f/f/f/f/f/BIYXYZHJG5YXYZBJBKBLBMBNBOBJBKBLBMBNBOBJBKBLBMBNBOBPf/f/DiDjEkDjDkCqCqCqCqCq
BOARD 0 23 64 0 FCFCFCHdHeGADYFxC4I3I4f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/BYYKYLTnToYKYLBZBaBbBcBdBeBZBaBbBcBdBeBZBaBbBcBdBeBff/f/DSDTEUFhC4F9CqCqCqCq
BOARD 0 24 64 0 FCFCFCI0I1I2GAGBDIIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/BoBpBqTnToBtBuBpBqBrBsBtBuBpBqBrBsBtBuBpBqBrBsBtBuBvf/f/DiDjEkDYFxC4C5C6C5C6
BOARD 0 25 64 0 FCFCFCFCI0I1I2GADYJDJ9f/f/f/f/f/f/f/f/f/AAf/f/f/f/f/B4B5B6TnToB9B+B5B6B7B8B9B+B5B6B7B8B9B+B5B6B7B8B9B+B/f/f/DSFhH+GAGBDIDJDKDJDK
BOARD 0 26 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/f/f/f/ABf/f/f/f/f/f/f/IAIBCJCKTnToCNCOCJCKCLCMCNCOCJCKCLCMCNCOCJCKCLCMCNCOf/f/f/DiDYFxH+GRDYDZDaDZDa
BOARD 0 27 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/f/f/f/f/f/f/f/f/f/f/IQIRf/CaT3T4Cdf/f/CaCbCcCdf/f/CaCbCcCdf/f/CaCbCcCdf/f/f/f/GQGAGBDIH+GADpDqDpDq
BOARD 0 28 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/AAf/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/ACADf/f/f/f/f/f/f/f/f/f/f/H/GQGRDYFxH+H8H9H8H9
BOARD 0 29 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/f/f/f/AAf/f/ACADf/f/f/f/f/f/f/ASATf/f/f/F2FnFmF3f/f/f/f/AAf/GQGAGBDIDJDKDJDK
BOARD 0 30 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/f/f/f/f/f/f/f/f/PzP0f/f/ABf/f/f/f/f/ASATf/f/f/f/f/ABf/f/f/f/f/F2GGAIEtGXACADf/f/f/f/H/GQGRDYDZDaDZDa
BOARD 0 31 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/f/f/f/f/f/f/f/PAPBf/f/f/f/f/f/f/f/f/f/f/f/f/ACADf/f/f/f/f/f/GnAICrFoFpASATf/f/f/f/f/f/GQGADpDqDpDq
BOARD 0 32 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/f/f/f/f/f/f/f/f/PQPRf/f/f/f/f/f/f/f/f/f/f/f/f/ASATf/f/f/f/f/f/GIF4F5Fpf/f/f/f/f/f/f/f/ABH/GQD5D6D5D6
BOARD 0 33 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/AAf/f/f/f/f/f/PgPhf/f/f/f/f/f/f/f/f/f/AAf/f/f/f/f/ACADf/f/ACADf/f/ACADf/f/f/f/f/f/f/f/f/f/f/f/f/f/
BOARD 0 34 64 0 FCFCFCFCFCHNHOHPIyIzJtf/ABf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/ASATACADASATACADASATf/f/f/f/f/AAf/f/f/f/f/f/f/f/
BOARD 0 35 64 0 FCFCFCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/F2FmF3AAf/ASATf/f/ASATf/f/f/f/ABf/f/f/f/f/f/f/f/f/f/f/
BOARD 0 36 64 0 FCFCFCFCFCHNHOHPIyIzJtf/f/f/f/f/PzP0f/f/f/f/f/f/f/f/f/f/PzP0f/f/f/f/f/F2FmGGCrGXf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/
BOARD 0 37 64 0 FCFCFCFCFCHdHeHfJCJDJ9f/f/f/f/f/PAPBf/f/f/f/f/f/f/f/f/f/PAPBf/f/f/F2FmGGCrCqCqGHFmFnFmFnFmF3f/f/f/f/f/F2FmFnFmFnF3f/f/AAf/f/f/f/
BOARD 0 38 64 0 FCFCFCFCFCHNHOHPIyIzJtf/f/f/f/f/PQPRf/f/f/f/OzO0f/f/f/f/PQPRf/f/f/GnAICqCqCqCqCqEtCqAPCrEtGHFmF3F2FnFmGGCrAIAPAIGHF3f/f/f/f/f/f/
BOARD 0 39 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/f/PgPhf/f/f/f/OzO0f/f/f/f/PgPhf/F2FmGGAPCqAPCrCqCqEtCqCqCqCqAICqGHGGAICrAPCqCqCqCqCrGXf/f/f/AAf/f/
BOARD 0 40 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GnAPEtCqEtEtCqEtEtCrCrCqCrEtAICrEtCqCqAPCqCqCqAIEtFoFpABf/f/f/f/f/
BOARD 0 41 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/AAf/f/f/GIF4F5F4F5GJCqCqCqCqCqCqCqCqCqCqCqCqCqCqCrAIAIFoF5Fpf/f/f/f/f/f/f/
BOARD 0 42 64 0 FCFCFCFCFCHNHOHPDTIzJtf/ABf/f/f/f/f/AAf/f/f/f/f/ABf/f/f/P/f/f/f/f/f/f/f/GIF5GJAICqCrAICqCqEtAIAPCqEtCqFoF4F5Fpf/f/f/f/f/f/f/f/f/
BOARD 0 43 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/f/f/ABf/f/f/f/f/f/PzP0f/f/f/f/f/f/f/f/AAf/f/f/f/f/GIF5F4F5GJEtAICqCrFoF4F5F4Fpf/f/f/f/f/f/f/f/f/f/f/f/
BOARD 0 44 64 0 FCFCFCFCFCHNHOHPDTIzJtf/f/f/f/f/AAf/f/f/f/f/PAPBf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/GIF5F4F5F4Fpf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/
BOARD 0 45 64 0 FCFCFCFCFCHdHeHfDjJDJ9f/f/ABf/f/f/f/f/f/f/f/PQPRf/f/ABf/f/ABf/f/f/f/f/E0KOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKP
BOARD 0 46 64 0 FCFCFCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/PgPhf/f/f/f/f/f/f/f/f/f/E0E1KeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKf
BOARD 0 47 64 0 FCFCFCFCFCHdHeHfJCJDJ9f/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/P/f/f/f/f/E0E1E2C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6
BOARD 0 48 64 0 FCFCFCFCFCHNHOHPIyIzJtf/f/ABf/f/f/f/f/f/AAf/f/f/f/f/f/f/f/f/f/f/E0E1E2C7DJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDK
BOARD 0 49 64 0 FCFCFCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/ABf/f/f/f/f/f/f/f/f/AAf/f/f/E0E1E2C7DeDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDa
BOARD 0 50 64 0 FCFCFCFCFCHNHOHPIyIzJtf/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/E0E1E2C7DLDuDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDq
BOARD 0 51 64 0 FCFCFCFCFCHdHeHfJCJDJ9f/f/f/f/f/f/f/f/f/f/f/f/f/ABf/f/f/f/E0E1E2C7DeDbD+IuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIv
BOARD 0 52 64 0 FCFCFCFCFCHNHOHPIyJDJ9I5f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/f/E0E1E2C7DLDuDvEmI+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/
BOARD 0 53 64 0 FCFCFCFCFCHNHOHPGtC4I3I4KOKPKOKPKOKPKOKPKOKPKOKPKOKPKOKPE1E2C7DeDbD+EmEnJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJP
BOARD 0 54 64 0 FCFCFCFCFCHdHeHfDYFxC4I3KeKfKeKfKeKfKeKfKeKfKeKfKeKfKeKfE2C7DLDuDvEmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 55 64 0 FCFCFCFCFCI0I1I2GAGBDIC4C5C6C5C6C5C6C5C6C5C6C5C6C5C6C5C6C7DeDbD+EmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 56 64 0 FCFCFCFCFCFCI0I1I2GAGBDIDJDKDJDKDJDKDJDKDJDKDJDKDJDKDJDKDeDuDvEmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 57 64 0 FCFCFCFCFCFCFCI0I1I2GAGBDZDaDZDaDZDaDZDaDZDaDZDaDZDaDZDaDuDvEmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 58 64 0 FCFCFCFCFCFCFCFCI0I1I2GADpDqDpDqDpDqDpDqDpDqDpDqDpDqDpDqDvEmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 59 64 0 FCFCFCFCFCFCFCFCFCI0I1I2IuIvIuIvIuIvIuIvIuIvIuIvIuIvIuIvEmEnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 60 64 0 FCFCFCFCFCFCFCFCFCFCI0I1I+I/I+I/I+I/I+I/I+I/I+I/I+I/I+I/EnEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 61 64 0 FCFCFCFCFCFCFCFCFCFCFCI0JOJPJOJPJOJPJOJPJOJPJOJPJOJPJOJPEoFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 62 64 0 FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
BOARD 0 63 64 0 FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
LINK d2a2010-b2.nw 63 0 1 64 0 playery
LINK d2a2010-bm2.nw 0 0 64 1 playerx 61
SIGN 25 27

#u Shrine
SIGNEND
NPC - 21 11
// invisible NPC sets music and map
if (playerenters) {enableweapons;
//play d.mid;
setminimap dmap2.png,map-d2a2010.txt,1,56;
setmap d2a2010-map-ow.png,map-d2a2010.txt,1,56;
puthorse goodride.gif,40,40;}
if (playertouchsme) {
}
NPCEND


I'd like to get some thoughts from Christopho and other Solarus developers to figure out how to get this to work, since I'm not sure where to begin.
#3
I notice this is the standard in Solarus quests. The overworld works more like I would expect, as it's broken up into a grid of many maps based on various points of interest.

In A Link to the Past, dungeon screens were equivalent to 512x512 maps, no smaller than that. In case a smaller room was needed, the map would be subdivided, which can be done in Solarus with Separator objects.
This explains how you could occasionally hear sounds coming from nearby rooms, and why enemies and puzzles wouldn't respawn or reset right away sometimes. (Because they're not reloaded when you are just going between separators.)
#4
Development / Thinking with overlapping tiles
July 09, 2015, 07:04:08 AM
I suspect newcomers to the editor might have some trouble with this at first, since most everything else out there uses a basic tile grid for editing maps.
You can do that in Solarus of course, but I actually really like how you can overlap tiles as much as you want, and whatever's on top takes priority over whatever's underneath it on the same layer.
You can use it to knock out passageways for doors in an otherwise singular wall object, instead of making two walls on each side. Just lazily put down a walkable floor right on top of the wall and extend it out so it overlaps the other wall, then decorate with door graphics.
Coming from other editors, the first thing you might try to do when you make something that has "fringes" like a carpet is lay out the carpet and then surround it with up to four separate border pieces, but if the borders are just the same tile graphic you don't have to. You can lay out a carpet made of two extended tiles; one is the border piece, and you just make it as big as the whole carpet is going to be. The other is the carpet itself, which you overlap as much as you want.

Every tile is essentially another block of text in your map files, so if you think creatively when you set up and use your tilesets, you can keep things cleaner and take lots of shortcuts that wouldn't be possible in other editors.

Anyway, I like it.
#5
I tried to resize my quest from 320x240 down to 256x224, which is the SNES screen resolution.

In doing this, Scroll teletransporters stopped working. They seem to roll over twice before locking the game.

They stop working in the same way if the quest size is larger than 320x240 as well.
#6
I've been looking at this engine for a couple days recently and I'm very happy with how it's built as of version 1.4.2. I particularly love how quests are just a collection of files and Lua scripts, not a series of weird formats or a single big package. (Zelda Classic's "qst" format and all its numbered slots are murderously hostile to the very idea of rapid development and group organization with multiple contributors. It deserves to be left in the dust bin of the DOS era from whence it came.)
In fact, I am over the moon with how you can just drop things into the quest's directories and the editor instantly knows they exist without having to reload anything. This is absolutely vital to rapid development and decentralized group collaborations. An engine like this hasn't come along in a very long time and I'm eager to explore what it can do.

There are just a few things I want to look into to really start working on something with this.

First: When editing Maps, it seems that the click+drag selection tool doesn't work unless I start by clicking on empty space. This happens in both the tile selector and the map area itself. It causes me to spend an unnecessary amount of time very carefully shift-clicking on every single tile I want selected.

Second: When dropping resources into the game, sometimes the editor needs to integrate them into its database before they can be used, and this has to be done with user input. Would be nice if this were automated a bit better or perhaps even made unnecessary.
Imagine a group of three to five (or ten!) people collaborating on a single quest. Addressing this issue would help.

Third: Dialog entries in particular are all bundled into a single large file. This is one of the few things in this engine that is hostile to group collaborations. I suppose it could be circumvented somewhat by using some custom scripts, but I don't think it should have to come to that, as doing so would theoretically make everything a little more difficult than it should be. (Particularly translations.)