Skip to content

Commit

Permalink
Merge branch 'main' into outofsight
Browse files Browse the repository at this point in the history
  • Loading branch information
x-sheep committed Feb 16, 2025
2 parents 678ac36 + 6daf8d8 commit 982fa05
Show file tree
Hide file tree
Showing 22 changed files with 852 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src-ui/changes.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
<main>
<div style="margin-bottom: 5px;"><b>Latest types</b> (<em><a href="/list.html" target="_parent">all types</a></em>)</div>
<ul>
<li><a href="/p?orbital" target="_parent">Orbital オービタル</a></li>
<li><a href="/p?tilecity" target="_parent">Tile City タイルシティー</a></li>
<li><a href="/p?turnrun" target="_parent">Turn and Run トツゲキループ</a></li>
<li><a href="/p?island" target="_parent">Inaba's Island アイランド</a></li>
<li><a href="/p?balloon" target="_parent">Balloon Box 風船箱</a></li>
<li><a href="/p?mintonette" target="_parent">Mintonette</a></li>
<li><a href="/p?nibunnogo" target="_parent">Nibun-nogo ニブンノゴ</a></li>
<li><a href="/p?timebomb" target="_parent">Time Bomb 時限爆弾</a></li>
<li><a href="/p?archipelago" target="_parent">Archipelago アーキペラゴ</a></li>
</ul>
</main>
</body>
Binary file added src-ui/img/orbital.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src-ui/img/tilecity.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 5 additions & 2 deletions src-ui/js/ui/KeyPopup.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ ui.keypopup = {
nibunnogo: [4, 0],
mintonette: [10, 0],
balloon: [10, 0],
tilecity: [10, 0],
orbital: [124, 0],
outofsight: [132, 0]
},

Expand Down Expand Up @@ -882,6 +884,7 @@ ui.keypopup = {
},

generate_trainstations: function(mode) {
var orbital = ui.puzzle.pid === "orbital";
this.generate_main(
[
"0",
Expand All @@ -895,8 +898,8 @@ ui.keypopup = {
"8",
"9",
" ",
["-", "?"],
["q", "╋"]
["-", orbital ? "●" : "?"],
["q", orbital ? "○" : "╋"]
],
4
);
Expand Down
3 changes: 3 additions & 0 deletions src-ui/js/ui/MenuConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@
case "balance":
case "turnaround":
case "turnrun":
case "icewalk":
case "waterwalk":
case "firewalk":
idname = "loop_full";
break;
}
Expand Down
2 changes: 2 additions & 0 deletions src-ui/js/ui/Misc.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ function toBGimage(pid) {
"nurimisaki",
"nuriuzu",
"oneroom",
"orbital",
"ovotovata",
"oyakodori",
"patchwork",
Expand Down Expand Up @@ -213,6 +214,7 @@ function toBGimage(pid) {
"teri",
"tetrochain",
"tetrominous",
"tilecity",
"timebomb",
"tontonbeya",
"trainstations",
Expand Down
2 changes: 2 additions & 0 deletions src-ui/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ <h2 id="title"><span lang="ja">パズルの種類のリスト</span><span lang="
<li data-pid="patchwork"></li>
<li data-pid="mannequin"></li>
<li data-pid="kuromenbun"></li>
<li data-pid="tilecity"></li>
</ul>
</div>
<div class="lists blocks">
Expand Down Expand Up @@ -183,6 +184,7 @@ <h2 id="title"><span lang="ja">パズルの種類のリスト</span><span lang="
<li data-pid="roundtrip"></li>
<li data-pid="trainstations"></li>
<li data-pid="turnrun"></li>
<li data-pid="orbital"></li>
</ul>
</div>
<div class="lists loops">
Expand Down
2 changes: 2 additions & 0 deletions src-ui/res/history.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,5 @@ nibunnogo: This genre first appeared in Puzzle Communication Nikoli vol. 164.
balloon: This genre first appeared in Puzzle Communication Nikoli vol. 189.
tilecity: This genre was invented by _AtomicNeoN_.
turnrun: This genre was invented as "Totsugeki Loop" by Subaru Saito in 2018. A similar ruleset named "Turn and Run" appeared in a Logic Masters Deutschland competition in 2021.
orbital: This genre first appeared in Puzzle Communication Nikoli vol. 174.
outofsight: This genre was invented by Palmer Mebane.
2 changes: 2 additions & 0 deletions src-ui/res/history.ja.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -196,3 +196,5 @@ timebomb: パズル通信ニコリ vol.163より
nibunnogo: パズル通信ニコリ vol.164より
balloon: パズル通信ニコリ vol.189より
tilecity: _AtomicNeoN_氏発案
orbital: パズル通信ニコリ vol.174より
outofsight: Palmer Mebane氏発案
2 changes: 2 additions & 0 deletions src-ui/res/rules.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -327,3 +327,5 @@ mintonette: "Draw lines between the circles to form pairs.\n1. Lines cannot cros
balloon: "Divide the shaded cells into rectangular balloons, and connect each balloon to a number with a string.\n1. Strings cannot branch, cross or overlap each other.\n2. Every balloon is connected to exactly one string.\n3. Each string stops at a number, which indicates the size of the balloon.\n4. A string cannot loop back on itself and visit a cell that's orthogonally adjacent to a cell it has visited before.\n5. All cells must be used by strings or balloons."
tilecity: "You're given a grid divided into tiles. Shade some tiles on the board.\n1. A tile is either completely shaded or unshaded.\n2. There can not be a 2x2 square of all shaded cells.\n3. Each group of orthogonally connected unshaded tiles must contain exactly one tile of each size from 1 to N, where N is the size of the largest tile in the group.\n4. Tiles containing numbers cannot be shaded, and the number represents the size of the largest tile in its group."
turnrun: "Draw lines through orthogonally adjacent cells to form a directional loop.\n1. The loop cannot branch off or overlap.\n2. All cells where the loop crosses itself are given. The loop cannot cross itself in other places.\n3. The loop must visit and make a turn in every cell with a number.\n4. When the loop exits a cell with a number, it must travel in a straight line for the indicated number of cells, and then turn."
orbital: "Draw lines through the center of some cells to make rectangular loops.\n1. Loops may cross each other, but may not overlap or share a corner.\n2. Each black circle must have exactly one loop around it. Lines cannot cross black circles.\n3. A loop can enclose no more than one black circle.\n4. All white circles must be visited by at least one loop.\n5. Numbers indicate how many white circles are visited by the loop that surrounds it."
outofsight: "Shade some cells on the board.\n1. Shaded cells cannot be horizontally or vertically adjacent.\n2. An unshaded arrow may not point to an unshaded cell with a symbol of the same color. Arrows can point past shaded cells.\n3. All unshaded cells on the board form an orthogonally connected area."
1 change: 1 addition & 0 deletions src-ui/res/rules.ja.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,4 @@ timebomb: "1. 丸つき数字(爆弾)をタテヨコに移動させて、すべ
nibunnogo: "1. 盤面のいくつかのマスを黒くぬりましょう。\n2. 盤面の数字は、その数字に接しているマスのうち、黒くぬるマスの数を表しています。\n3. 黒くぬるマスも白く残るマスも、タテヨコにつながってできるカタマリが6マス以上になってはいけません。"
balloon: "1. 盤面にいくつかの、風船と風船につながるヒモのセットを描きましょう。\n2. 各セットは「灰色マスの長方形(正方形も含む)のカタマリ(風船)」「風船につながる線(ヒモ)」の2つで1組になります。風船は点線をなぞってマスを囲み、ヒモはマスの中心をタテヨコに結ぶ線で表します。\n3. ヒモは数字のマスを始点とし、通ったマスどうしが直前と直後以外で辺を共有しないように風船のどこか1つのマスで終わるように引きますが、このときヒモにつながった風船のマス数はヒモの始点にある数字と同じになるようにします。\n4. セットに含まれないマスがあってはいけません。また、違うセットどうしが同じマスで重なってはいけません。"
tilecity: "1. 盤面のいくつかのマスを黒く塗って、太線で区切られたそれぞれの領域を、全て黒マスか全て白マスかにしましょう。\n2. 白い領域を市と呼び、タテヨコに繋がった市のカタマリを県と呼びます。\n3. 県は、1マスの市からその県に含まれる最大のマス数の市が1つずつ含まれるようにします。2つの県がタテヨコに隣り合ってはいけません。\n4. 黒マスが2×2のカタマリになってはいけません。\n5. 数字を含む領域は必ず白マスになります。数字はそのマスを含む県のうち、一番大きい市が何マスかを表しています。数字がない場合は分かりません。"
orbital: "1. 盤面の白マスに線を引いて、いくつかの長方形(正方形も含みます)の絵っかを作りましょう。\n2. 線は、マスの中央を通るようにタテヨコに引きます。線を枝分かれさせたり、行き止まりを作ったりしてはいけません。\n3. 線をマスの中央で交差させることもできます。そのとき、線は立体交差して、向かいの辺へ続くものとします。\n4. 盤面にある〇のマスには必ず線が通ります。\n5. 鲁のマスはいずれかの輪っかの内側に入るようにします。1つの輪っかの中に2つ以上の參を入れたり、同じ參を2つ以上の輪っかの中に入れたりしてはいけません。また、春のマスに線を引いてはいけません。\n6. 鲁の中の数字は、その參が入る輪っかが通る〇の数を表します。"
5 changes: 4 additions & 1 deletion src/puzzle/Config.js
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,10 @@
"ovotovata",
"balance",
"turnaround",
"turnrun"
"turnrun",
"icewalk",
"waterwalk",
"firewalk"
].indexOf(pid) >= 0;
break;
default:
Expand Down
2 changes: 2 additions & 0 deletions src/pzpr/variety.js
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@
ovotovata: [0, 0, "Ovotovata", "Ovotovata", "country"],
oneroom: [0, 0, "ワンルームワンドア", "One Room One Door", "heyawake"],
onsen: [0, 0, "温泉めぐり", "Onsen-meguri", "country"],
orbital: [0, 0, "オービタル", "Orbital", "nagenawa"],
outofsight: [0, 0, "Out Of Sight", "Out Of Sight", "yajikazu"],
oyakodori: [0, 0, "おやこどり", "Oyakodori", "kaero"],
paintarea: [1, 0, "ペイントエリア", "Paintarea"],
Expand Down Expand Up @@ -426,6 +427,7 @@
teri: [0, 0, "テリトリー", "Territory", "kurodoko"],
tetrochain: [0, 0, "テトロチェーン", "Tetrochain"],
tetrominous: [0, 0, "Tetrominous", "Tetrominous", "fillomino"],
tilecity: [0, 0, "タイルシティー", "Tile City"],
tilepaint: [1, 0, "タイルペイント", "Tilepaint"],
timebomb: [0, 0, "時限爆弾", "Time Bomb", "bonsan"],
toichika: [0, 0, "遠い誓い", "Toichika"],
Expand Down
10 changes: 9 additions & 1 deletion src/res/failcode.en.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
"bkLineNe.nothing": "A country isn't fully visited.",
"bkMajorBarGt.juosan": "The number of majority of vertical or horizontal bars is greater than the number of the area.",
"bkMajorBarLt.juosan": "The number of majority of vertical or horizontal bars is less than the number of the area.",
"bkMaxSizeNe.tilecity": "The number is not equal to the amount of connected tiles.",
"bkMirror.mirrorbk": "The two blocks divided by a mirror are not reflections of each other.",
"bkMissingNum": "A block doesn't contain every number.",
"bkMixed.sukoro": "A room includes both numbered and non-numbered cells.",
Expand Down Expand Up @@ -336,9 +337,11 @@
"bsEqShade.shimaguni": "The sizes of countries that are in adjacent marine areas are the same.",
"bsNoArrow.evolmino": "The block isn't placed on an arrow.",
"bsNoSequence.archipelago": "A chain does not contain one island of every size from 1 to N.",
"bsNoSequence.tilecity": "A country does not contain one tile of every size from 1 to N.",
"bsNotEvol.evolmino": "The block doesn't have the same shape as the previous block with one additional square.",
"bsSameNum.archipelago": "A chain contains two islands of identical size.",
"bsSameNum.fillomino": "Adjacent areas have the same number.",
"bsSameNum.tilecity": "A country contains two tiles of identical size.",
"bsSameShape.chainedb": "A chain contains two identical blocks.",
"bsSameShape.lits": "Some tetrominoes that have the same shape are adjacent.",
"bsSameShape": "Two blocks that have the same shape are adjacent.",
Expand Down Expand Up @@ -623,6 +626,7 @@
"lpNoNum.onsen": "A loop has no numbers.",
"lpNoNum.pipelink": "A loop has no numbers.",
"lpNumGt2.onsen": "A loop has more than one number.",
"lpNumGt2.orbital": "A loop encloses more than one black circle.",
"lpPlNum.pipelink": "A loop has multiple kinds of number.",
"lpSepNum.pipelink": "A kind of number is in different loops.",
"lrAcrossArrow.nagare": "The line doesn't go straight in the arrow's direction.",
Expand Down Expand Up @@ -732,6 +736,7 @@
"nmNoLine": "A number is not connected to another number.",
"nmNoMove.bonsan": "A circle doesn't start any line.",
"nmNoMove.rectslider": "A shaded cell doesn't start any line.",
"nmNoOrbit.orbital": "A black circle is not inside a loop.",
"nmNoSideShade.tasquare": "No shaded cells are adjacent to square marks.",
"nmNotConsecNeighbors.ripple": "A number is not the neighbor of its consecutive numbers.",
"nmNotConseq.kouchoku": "Equal letters are not connected directly.",
Expand All @@ -743,6 +748,7 @@
"nmNumberNe.sukoro": "The number of numbers placed in four adjacent cells is not equal to the number.",
"nmNumberNe.sukororoom": "The number of numbers placed in four adjacent cells is not equal to the number.",
"nmNumberNe.view": "The number of numbers placed in four adjacent cells is not equal to the number.",
"nmOrbitNe.orbital": "A number does not indicate the amount of white circles used by the loop.",
"nmOutOfBk.oyakodori": "A bird is outside a nest.",
"nmOutOfBk.yosenabe": "A filling isn't in a crock.",
"nmOutOfHole.herugolf": "A ball doesn't cup in.",
Expand All @@ -751,15 +757,16 @@
"nmOutsideTren.tren": "A number is not contained inside a 1x2 or 1x3 block.",
"nmPillowGt.shugaku": "The number of pillows around the number is wrong.",
"nmPillowLt.shugaku": "The number of pillows around the number is wrong.",
"nmPlOrbit.orbital": "A black circle is inside multiple loops.",
"nmProduct.factors": "A number of room is not equal to the product of these numbers.",
"nmRange.kakuru": "A number is larger than 9.",
"nmRange.sananko": "A number is larger than 3.",
"nmRange.trainstations": "A number is out of range.",
"nmSame2x2.kazunori": "There is a 2x2 block of the same number.",
"nmSame2x2.snakepit": "A snake loops back on itself.",
"nmShadeEq.smullyan": "The number of shaded cells in a shaded number's domain is equal to the number.",
"nmShade5Ne.lookair": "The number is not equal to the number of shaded cells in the cell and the four adjacent cells.",
"nmShadeDiagNe.context": "The number of shaded cells diagonally adjacent to a shaded number is not correct.",
"nmShadeEq.smullyan": "The number of shaded cells in a shaded number's domain is equal to the number.",
"nmShadeGt.interbd": "The number of shaded cells around a number is not correct.",
"nmShadeGt.kaidan": "The number of circles around a number is not correct.",
"nmShadeGt.kuromenbun": "The number of shaded cells around an area is not correct.",
Expand Down Expand Up @@ -812,6 +819,7 @@
"nqAroundSumNe.kakuru": "A sum of numbers around the pre-numbered cell is incorrect.",
"numNoLine": "A number has no line.",
"objShaded.nurimaze": "An object is shaded.",
"objShaded.tilecity": "A number is shaded.",
"pairedLetterNe.kinkonkan": "Beam from a light doesn't reach its pair.",
"pairedNumberNe.kinkonkan": "The number of reflections is wrong.",
"pcMultipleTips.pencils": "A pencil has more than one tip.",
Expand Down
6 changes: 6 additions & 0 deletions src/variety/icewalk.js
Original file line number Diff line number Diff line change
Expand Up @@ -587,14 +587,17 @@
decodePzpr: function() {
this.decodeIce();
this.decodeNumber16();
this.puzzle.setConfig("loop_full", this.checkpflag("f"));
},
encodePzpr: function() {
this.outpflag = this.puzzle.getConfig("loop_full") ? "f" : null;
this.encodeIce();
this.encodeNumber16();
}
},
FileIO: {
decodeData: function() {
this.decodeConfigFlag("f", "loop_full");
this.decodeCell(function(cell, ca) {
if (ca === "A") {
cell.ques = 6;
Expand All @@ -621,6 +624,7 @@
}
},
encodeData: function() {
this.encodeConfigFlag("f", "loop_full");
this.encodeCell(function(cell) {
if (cell.qans > 0) {
return String.fromCharCode(64 + cell.qans) + " ";
Expand Down Expand Up @@ -661,6 +665,8 @@
"checkOneLoop",
"checkDoubleTurnOutside@firewalk",
"checkNoLineOnNum",
"checkNoLineIfVariant",

"checkDeadendLine+"
],

Expand Down
Loading

0 comments on commit 982fa05

Please sign in to comment.