I just want to let it be known that this question inspired me to work on the conversion project again. There's still a lot to do before it's minimally usable (event system, drawing manager, networking and a lot of ui), but progress is progress. Since I'm practically rewriting it from scratch, I'm trying to make it a more generic vector drawing program with dod support from the start rather than a dod client with some vector support like the old one is. And I get to structure the code better (hopefully >.<). But the more differences there are, the less I can just convert from the old code...
Qazhax
Creator of
Recent community posts
Unfortunately none that I would know of.
I once tried to port the code for android and I got some of it working but it was very unfinished and I'm not sure where the code is now... I keep trying to port the code into C++ to get rid of the java dependency, and to get ability to use the same code for windows and android but I'm not even 5% done with that...
The site has had quite low amount of active users the last 5-8 years and I've gotten more into vr lately, and a real software dev job, so I haven't had a lot of time, energy and motivation to work on the conversion... If it seems like there's a lot of interest for that I might continue working on it
Do you mean the nuke everything skull button? I don't think the base game has any erasers, the system that the doodleordie servers use for storing the drawing images only stores lines, so the erasers that exist in the app are all that I could make while keeping the data readable by the servers.
As for the skull button, if you just want to erase the entire screen, you could add a new layer and hide or remove the one you don't want to use. The layers that aren't set to visible won't be sent to the server. There should also be a keyboard shortcut (Alt+F) for undoing everything on a layer if you want to start over, and maybe redo the first few strokes. But I didn't think it was important enough to add a button for it. edit: no wait, there is a button for it, and for undo. Sorry, I don't know what eraser you are talking about.
Maybe you're thinking of some other drawing game?
Oh right, the image size the site uses is a bit weird so 100% would be 520x390px, I think the website might not save the images as png form at all. The browser renders the images based on the size of the browser window so the size varies between like 260x195(50%) and 840x630(~161.5%). 1280x960 would be ~246.2% and 1920x1440 ~369.2%. So yeah, I should probably make a proper export window that would ask for the resolution in pixels....
As for what would actually be in the final image, I think there are some very minor differences in the rendering systems of the site and on the client so the pixels near the edges of the lines might differ slightly between the two. Rendering at a higher resolution than what the site uses and scaling down with another program using e.g. bicubic scaling could give the closest result, although sometimes the renderer on the site causes moiré like patterns of its own so I don't think a perfect solution exists.
Replay preview is definitely a good idea, another window that would have a slider, play/pause and stop buttons, replay speed option and the canvas. then it would draw line segments and sleep for the rest of the frame before drawing the next batch. Should be possible. Would make animating things in dod replays easier.
I don't have clear firsthand information on what's wrong but looking at this conversation between davebc and zugwalt doesn't seem very promising that it's going to be fixed soon. At least it hasn't yet been confirmed to be completely abandoned: https://twitter.com/aarsilv/status/1369478584784592898
If there are no lines added to the doodle, the chain expires in 5 minutes. If there are lines drawn, I think it's about 48h since the last time that the doodle page was refreshed/opened or a line was added, but I'm not entirely sure. If you add a line to a doodle once every day, it should stay active. But if you forget to do that one day, you might lose it.
The prompts that are given to players are entirely controlled by the server side, so I can't affect it. The only actions that a user can do to change the prompt are are skipping the prompt and posting a doodle for the prompt, both of which give just a new prompt somewhat randomly.
On client side it would be possible to record the skipped prompts, so you could see what prompts have you skipped but it would be impossible to try and continue those chains afterwards. Additionally dod hides the public chain id when giving the prompts, so it's not possible to directly find the url of the chain for the prompts either, if you wanted to look at the full chain you have skipped. In the experiment room the client stores the prompt data on a database so it can find the previous step, but it's limited to the experiment room and still doesn't make it possible to choose which chain to continue.
So I don't think that it would be possible to get old/skipped chains in any meaningful way. I think it would be amazing if dod would be updated with an added option for the rooms to let players select which chain they want to continue, but it's not something I can do from the client side.
The config file should not cause any crashes no matter what it contains. The filename it's looking for is just "config" without an extension or the quotes. I recently added support for pen pressure and that requires the files "libjpen-2-3.jnilib" and "jpen-2-3-64.dll" that should be included in the zip to be in the same folder as the .jar file or it might crash. I'll look into this later.
The workaround now mostly works, but it induces a few limitations on the doodles. The colours in the browser saves are saved as the #aabbcc form, but without the first #, so it's not possible to export semitransparent lines. The save format is also unable to save numbers beyond [0,520] so the locations to up, left and right of the canvas get squished back inside the canvas, the lines going below the bottom of the canvas aren't affected as they are still inside the range.
I'll check if I can automatically cut off the parts of the lines outside the canvas and post the workaround a bit later once I've eaten and stuff.
The dod browser format saves are also unable to use higher accuracy than 0.5. adding a file with filename "config" and contents "accuracy=2" will make the client use the same accuracy to help avoid drawing too detailed and having it get destroyed in the conversion.
The browser script for loading the file contents to localstorage is available at http://qazhax.herp.io/scripts/. I uploaded a new version of the client here, in the new version ctrl+shift+s saves in the browser format. The saved file can then be dragged and dropped onto the popup created by the browser script and the script will load it into the active room.
I also finally changed the error messages while I was at it.
That's a great idea, thanks!
The more complex save files often get over a megabyte in size and trying to paste the save data to the browser directly would likely be pretty slow. When I last tried playing around with the saves on site I could freeze the browser trying to access the saves, but that was years ago and directly from the localstorage tab in the inspector. The save/load script I made (possibly the same you're talking about) accesses the localstorage from javascript and doesn't seem to lag much at all, so making a function that could load save data from the client shouldn't be impossible. I'll try if I can make a js script that could load the contents of a text file into the localstorage, that should make it possible to load doodles from the client.
The client technically can produce save files that the site can read, but the functionality is not linked to any button, so I'll have to add some keybind to save the doodles in that format once I get the javascript working.
edit: I got the javascript mostly working but it's late so I'll continue later.
The site recently switched to a full https site, which is causing this. Earlier only the login page was using https, so it was possible to just go around the login page when the certificate is expired, but now the cert expiring just breaks the entire client. And the cert expired last Thursday. I don't have access to any of the server things so I can't fix it on my own. I suppose I should try to notify the admins as soon as possible when sth breaks on the server side.. I'll try to change the error messages to reflect the change when I have time.
1. The zoom levels are following a curve 1.189207115002721^x where x ranges from -8 to 24, or alternatively 2^x where x is sampled at every 1/4 from -2 to 6. That means, that every zoom level is ~1.19 more zoomed in than the last one and that every 4 levels, the zoom level doubles. The values are truncated to a low number of decimals but it shouldn't have a large effect. Using exponential zoom means that the intervals should be the consistent at all levels. So I have to assume that the problem is not of consistency, but that the differences between the levels are too big? The zoom tool (to differentiate from the scroll wheel) on the other hand zooms the canvas 4 levels at a time (= doubles zoom), and should had had a way to zoom one level at a time, but that was broken, I'll fix that asap and add a slider for changing the zoom strength for good measure. Adding more fine grained zoom (e.g. doubling every 8 levels) would make zooming in and out slower especially on large doodles as this still redraws everything for every level when zooming with scroll wheel. If I manage to fix the lag with zooming with scroll I'll be able to add more fine grained zoom as well. If the problem was not any of this, and is somehow solvable, lmk.
2. Can I ask what your screen resolution is, I'm having a lot of difficulty trying to see if a dot or a part of line is one pixel in any direction because the pixels are very small. I changed the part of code that translates screen coordinates to add half a pixel to the screen coordinate so it should now use the center of the pixel instead of the top left corner of the pixel. I can't see a big difference but maybe the results are a tiny bit better now?
3. I don't know why the zoom level would affect the tool positions on the screen, other than that the zoom level gets changed even when the cursor is on the side panel. The scroll wheel is no longer used for zooming if it's on the layer or tool panels. I can't recreate the situation where the tools are off screen. I did, however manage to break the ui even more than it originally was.
4. insert "UI coding is my passion" meme or something here. I thought using an image would had been easier but apparently displaying images properly is too difficult for java or whatever so I'll just code the circle directly as a function of x and y positions of the pixels, the cpu usage likely won't be the best but at least it should stay intact when it's moving.
5. I thought I fixed that last year. At least on my machines the only time it's using more cpu is when it's redrawing the canvas but not if the cursor is not moving. I'll need to check that at some point when I have more energy.
I pushed a new build where at least some of those should be fixed.
I probably missed some things that need a tut, or maybe some of these are not clear enough, so let me know if I should add something here!
Adding new colors to your palette
The whole area under the basic colors is your palette, doubleclicking will open a color picker.
Using transparency
HSV, HSL, RGB and CMYK tabs all have a transparency/alpha slider that can be used to make the color transparent.
Gradient fill
Choose the main color normally, by clicking and if you want to fill a gradient right click the secondary color, which will become the other end of the gradient. Fill tool will use the line size to set the "smoothness" of the gradient, but the smaller the size you use, the more lines the gradient consists of, increasing file size and possibly causing lag if the filled areas are filled multiple times without undoing the previous one.
Drag towards the direction you want the gradient to change in (up, down, left, right). Holding Alt while dragging will interpolate the color in HSV mode, creating different colors.
By selecting a layer with a shape you want to fill you can fill the area behind the shape. The current layer is also selected, so in case of flood filling a part of a gradient, you'll only fill one line of it.
Picking color from image
Alt + Right click when using the pencil tool will pick the color from the current layer to the currently selected slot in palette. It can be used e.g. to pick colors from a gradient, or to pick a combined color from semitransparent lines.
Shift + Alt + Right click will pick the color from all visible layers combined on a white background, so it will always give a completely opaque color.
Removing a mistake from inside a layer
If you undo the part that you have drawn after the mistake and want to save, and press Alt + G, it splits the later strokes into a new layer and the mistake can be undone.
Bezier fill
Draw two bezier lines. if you want to make a linear gradient that is not restricted to horizontal/vertical axis, you can use bezier fill to combine two straight bezier lines. Bezier fill will fill the area between two bezier lines with a gradient made of bezier lines. If the lines are in opposite directions, the fill will create an X shape instead of filling the whole area, so make sure the lines are going in the same direction.
Perspective ruler
In perspective tool, place 1-3 vanishing points wherever you want, guides for deciding vanishing point locations are probably found elsewhere. When using the line tool, holding Ctrl will use an 8-directional ruler, and holding Ctrl+Shift while dragging the lines will use the perspective ruler. Unfortunately the keypress visualization failed to notice Ctrl+Shift clicks, so I pressed Ctrl+Shift+Space in the beginning to show they are pressed but that might had just been more confusing, sorry.
Perspective transform
A bit more secret functionality, it isn't very polished yet but it gets the job done. Press Ctrl+M to create a perspective transform layer that you can move around from the corners. Press Ctrl+M again to switch the layer back into a regular layer. If the final position is a lot smaller than the original size, It could be better to use a small brush size and only lines/bezier lines for the outlines, as the line widths are kept the same so they get proportionally thicker and freehand lines tend to get slightly jagged.
Minor pen tricks
These are probably not that practical but you can change the brush size and colour mid-stroke with the keyboard. You can also hold Alt when using pen tool to make it behave like it was a line. Right clicking while using the line tool will create another segment to the line by the way, as seen from the perspective ruler gif.
v0.500
- dodcacerts file is not necessary in the folder anymore, updated dodcacerts file can be added to the folder if necessary (if the cert on the website changes)
- added tool for changing line size and color
- added eraser tool for erasing whole lines
- line stabilizer using 1€ filter
- increased line accuracy 5x
- colours file parsing should let you load edited files more easily
- default colours now include the default super colours, if the colours file is not found in the folder.
- added registration link that should open dod on your browser, if someone finds the program before finding dod
- removed fb and twitter login, reducing the file size by ~50%, cookie login can be used instead.
- added possibility for using config file for some values
- fixed bug that used a lot of cpu for no reason
- fixed bugs with save/export file naming
- fixed bug preventing color picking with fill tool
- fixed bug in loading drawing time
v0.499
- client notices if the doodle has timed out
- doodle is saved properly when changing between rooms
- unicode characters work properly in drawing prompts (the font might not be able to render everything but that's a different thing)
- descriptions with quotes and slashes don't cause problems
- saving doodles will not change their save location in online mode
- player username is shown in the logout button
- logout button is bigger so you can see more than 4 first characters of the username
- the button to separate panels changed from [X] to [B] because it is too easy to accidentally press x when undoing
v0.498
- saving and loading doodles file chooser starts from the working directory
- bugfixes
v0.497
- saving and loading doodles uses an actual file chooser
- offline doodles are saved and loaded properly
- perspective ruler works the same way that the perspective tool shows
- layer panel and tool panel can be separated into their own little windows by pressing x/ctrl+x
v0.496
- freely choose exported image size
- set drawing area size in offline mode
- cookie login
- offline mode
- error message for when the site cert is expired
- transparency in submitted doodles is limited to 3 decimals, as it previously wasted a lot more space for little difference
- non-super players will be able to use bezier curves, fill, perspective ruler, zoom and pan tools
- added zoom and pan tools
- max description length is doubled?
- fill tool direction can be flipped by dragging it to the other direction
- improved perspective ruler
- zooming is slower normally and can be sped up by holding control
- colour mixing is gamma corrected
- refactored gui and tools, there should not be other differences than that the code is better and maybe less bugs? or more?
- increased palette size
v0.444
- perspective transform
- mac version
v0.430
- refactored ui
- fixed bug allowing too short descriptions to be sent
- submit button now gray when not enabled
- left clicking now picks both primary and secondary colours while right click only changes the secondary color
v0.425
- added checkbox to prevent accidental submissions
- added support for opacity
- removed constraints to stay within the canvas
- changed save format into one that contains layer and stroke information properly.
- as a result, saving is slightly slower, loading is slower and the save files are larger.
- save files should not overwrite saves of previous prompts
- save files will be saved in saves folder
- fixed autologin for normal players
- cursor should stay visible when using a small brush while zoomed out
- changed cacerts
- window size will not change when logging in/submitting/skipping
- trying to log in with empty username or password will produce error before trying to log in
- pressing enter on login screen will attempt to log in
- minor bugfixes
v0.410
- added possibility to login with twitter (still experimental)
- added possibility to login with facebook (still experimental)
- unicode characters work in descriptions, (some emoji should work too but the font doesn't really support them)
- bezier fill for supers
- ping doodles every 2h
v0.395
- added ability to open colorpicker by double clicking
- fixed bug with line tool where using rulers could draw line out of bounds
- fixed bug not allowing the bottom layer to be deleted
- fixed cursor being sometimes visible in the doodle you are describing
- made prompts more user friendly
- fixed bugs causing colours not to load properly
v0.390
- improved handling and usage of color codes
v0.385
- removed bug making it impossible to submit doodles
- removed bug that broke submitted doodles
- starting to describe pings description
- added .txt to the end of backup names again
v0.370
- added ability to split layers
- added option to automatically login
- added logout button
- undo and redo also save the doodle after 20 seconds
- removed .txt from the end of backup name, backups from older versions work by removing .txt
v0.365
- layer list will get a scrollbar if there are too many layers to fit on the screen
- fixed bug where saved doodle would not load on some computers
v0.360
- added finer zooming
- fixed bugs when using line tool outside the drawing area
- added dot in middle of drawing cursor
v0.350
- changed panning to middle mouse button
- changed picking color from doodle to alt+right mouse button
- added ctrl+shift+Z redo hotkey
- removed a faulty line simplifying feature
- added color picker
- added color slots
- added ability to load colors from file
v0.300
- fixed bug that prevented users from logging in...