Ashley's Forum Posts

  • Yes, this is most likely a mistake in your events, especially if you cannot reproduce it in a new empty project. This is why we always ask for new empty projects which demonstrate just the issue by itself.

  • The anchor behavior sets the object position *and* the object size. If you try to change the object width using other events or behaviors, the Anchor behavior will override it (this is what I mean by conflicting). In this case you shouldn't be using the Anchor behavior; you should just use events.

  • You need to make sure you enable 'Social' for Game Center to work.

  • Due to popular request, we'd like to create an official version of the third-party Sprite Font plugin by Mipey. We always have too much to work on at Scirra, so we're offering to contract this work to a third party developer at a fair rate. Since official plugins require occasional maintenance, we intend for this contract to cover small amounts of future work in order to keep up with changes and bug fixes, which we are also happy to pay for.

    Specification

    The Sprite Font plugin is effectively the Text object, but drawing each character from an image. The image contains a grid of every character in a character set (most commonly ASCII), and then to render a string of text each relevant character is drawn out from the grid in the correct sequence. This allows arbitrary text to be rendered from individual hand-drawn characters.

    Note we are not looking for an identical clone of the third-party plugin; this specification makes some changes, additions and removals, some of which are also relatively subtle.

    Properties:

    Sprite font [Edit] - opens the image editor for the sprite font image

    Character width, Character height - size of each cell in the image

    Character set - the sequence of characters displayed in the image, so the plugin can look up which cell to retrieve for each character

    Text - initial text

    Scale - a multiplier to scale the drawn text with. Effectively the font size, but just done by stretching the drawn images.

    Initial visibility - visible/invisible

    Horizontal alignment - left/center/right

    Vertical alignment - top/center/bottom

    Hotspot - top-left/center

    Wrapping - word/character

    Character spacing - extra pixel width to add between characters, default 0

    Line height - extra pixel height to add between lines, as per the Text object, default 0

    Other properties from Mipey's plugin should be omitted. In particular the 'Effect' property must be omitted since that is now handled by the built-in 'Blend mode' property. The plugin should handle wrapping as the official Text object does (drawing to the full extent of the object's bounding box, but never outside the bounding box).

    Conditions:

    Compare text (match the official Text plugin's condition)

    Actions:

    Set text

    Append text

    Set scale

    Set character spacing

    Set line height

    It should also be possible to specify variable width characters. I think this would best be done by having an action to set a narrower width than usual for a specific cell. E.g.

    Set character width

    For example, "Set character 'i' width to 3 px". Any attempts to set a width wider than the cell width should be ignored. After that action, any 'i' characters that are drawn should only occupy 3px of width, rather than the full character width, so narrow 'i' characters do not appear with unnecessary space around them. Narrower characters should probably be drawn left-aligned in their cell, since if they were centered then the rounding of odd sizes could cause pixel-perfectness issues.

    Expressions:

    CharacterWidth

    CharacterHeight

    CharacterScale

    CharacterSpacing

    LineHeight

    Text

    TextWidth

    TextHeight

    Note TextWidth and TextHeight should mimic the official Text plugin, which returns the extent of the actually drawn text. For example if the string "foo" was displaying in a 1000x1000 sized text object, the TextWidth and TextHeight are the size of the box enclosing the characters of the string "foo".

    Default sprite font

    A default sprite font should be provided as the initial image, so something useful can be rendered immediately after inserting the plugin. We must have copyright permission to redistribute this image, so it would be best if you come up with an original, or at least find an acceptably licensed example online. We will need to add features to Construct 2 to support loading this as the default image, but we will do that ourselves.

    The default image must be a power-of-two size.

    Editor rendering

    It is not necessary to have accurate sprite font rendering in the editor, since this can be time-consuming and difficult to get right. A reasonable placeholder is acceptable, although if you can manage full edit-time rendering we would be very impressed!

    Technical aspects

    The plugin should support any size image. Specifically it must not require a wide image with all the characters on a single line, since this is likely to be wasteful on devices where the GPU places the image on a power-of-two surface internally. The plugin must work with power-of-two size images, and we will document that this is recommended for use with the plugin. Given any size image, the cell sequence starts in the top-left corner and continues after wrapping at the edge of the image.

    The character set should support unicode characters. In other words it should work correctly if the user enters a sequence of Russian characters for the 'character set'. You should check if some languages involve surrogate pairs (where two code points are emitted for a single typed character), and this should be handled correctly (the character must not span two cells in this case).

    The plugin should perform well and create a minimum of garbage. Rendering the object continuously whilst setting any of its properties to different values every tick should create virtually zero garbage, if reasonably possible. All official plugins are written with this aim. See this blog post.

    The plugin should not allocate any images or create any canvases other than the single sprite font image, to minimise image memory use. Note Mipey's plugin allocates additional images or canvases; this should not be done in this plugin. It should be possible to draw arbitrary strings directly from the single sprite font texture. It must support both canvas2D and WebGL renderers. It must support Construct 2's layout-by-layout texture management in WebGL mode (the Tiled Background object is a suitable example of how to do this).

    The plugin must be tested and verified that all features work on all Construct 2's supported platforms, including when minified. Specifically CocoonJS may be problematic, but it must work with the subset of features that CocoonJS provides. We can help with testing if you don't have access to particular devices, since we have lots of devices in our office.

    Copyright

    It is absolutely prohibited to re-use any code from Mipey's plugin, since we do not have copyright permission to use it. It should not be necessary anyway, since the features described here should be achievable by most competent programmers.

    You are free to re-use/rip/adapt/hack any code from any official code, especially the Text plugin (from which it might be useful to steal some word wrapping code).

    Maintenance

    Any bug reports we receive relating to the plugin, even long after release, we will forward to you and expect you to fix in a relatively timely manner (before the next stable release, which usually occurs every 6 weeks, or at the next stable release after that if already close to a stable release). The contract will also cover payment for maintenance work. We may also decide to alter the code of the plugin ourselves, after which we will notify you and send you our updated version. We do not expect maintenance work to be too time consuming (probably a couple of hours every couple of weeks in the long term).

    Obviously we have expertise with the Construct 2 engine, the Javascript plugin SDK, and general Javascript coding; we are happy to offer help and assistance as needed (but obviously it's preferable if you can be mostly self sufficient).

    Code quality

    We expect well-written, professional code. It should be at least reasonably readable and practical for another developer to understand and maintain.

    Documentation

    We think it is simplest that we provide the documentation, since the use of the plugin should be straightforward. Therefore you do not need to worry about writing the manual entry or any tutorials.

    Future work

    We are interested in contracting similar jobs in future, where we contract to have certain plugins or behaviors developed. High-quality work on this job will put you in a good position when we have other projects in future!

    Application

    This job has now been assigned to a developer. Look out for future work postings!

    Please email applications to ashley@scirra.com, with a CV or references to your past work. Things which will count heavily in your application are: experience with Construct 2; experience with writing previous plugins or behaviors in the Construct 2 Javascript SDK; any other Javascript programming experience; availability in the long term to perform maintenance work (on the order of a couple of hours every couple of weeks).

  • You do not have permission to view this post

  • We already use PNGNQi to do a high-quality 256-color reduction of high-color images when you set to use PNG-8 in the editor. Does that not do the same job mostly?

  • Yep, turns out I didn't properly fix the original problem. I've done a more reliable fix for the next build which should definitely fix it 100%. I watched it for a long time and the collisions appeared to work properly in every case at every angle, so hopefully this will be sorted now!

  • I'm not sure, I haven't looked in to this area much. Does it work for you? There are lots of different algorithms to reduce color depth, such as simple rounding, perceptual rounding, dithering, and probably other kinds of analysis I'm not aware of. Which does PNGOut do? Which are you after specifically?

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Closing, most of these should be fixed in the next build - thanks for the suggestions. Note some (such as the independent expand/collapse of properties between individual instances) are actually by design and we don't plan to change them.

  • Closing, your events conflict with what the anchor behavior is trying to do. Re-make the behavior with events if you need to customise it.

  • Closing, your events conflict with what the anchor behavior is trying to do. Re-make the anchor behavior in events if you need to customise it.

  • Closing, must be an issue with a third party plugin. Try doing a clean re-install of Construct 2.

  • Closing, try pressing 'Reset dialogs' in preferences.

  • Thanks, should be fixed in the next build.

  • Closing, we need a .capx. Looking at your events, it would appear that there are simply no 'Teleporter' objects that have a Floor variable equal to 1.