36 Commits

Author SHA1 Message Date
Raum0x2A
8945530dbf Updated 2021-05-08 09:39:28 -06:00
Raum0x2A
73fa913292 Merge branch 'master' into develop 2021-05-08 09:35:48 -06:00
Raum0x2A
47db5b0767 Fixed namespace/go mod tidy 2021-05-07 10:29:58 -06:00
Raum0x2A
4aef1e390a Merge branch 'develop' into 'master'
Updates and Fixes


**resource.go/assets.go**
*  renamed `resources.go` to `assets.go`
*  added dark glyphs - located in assets.go -> assets/glyphs/dark/
*  moved original glyphs - located in assets.go -> assets/glyph/light/

**glyphbanner.go**
* added option to make glyphs vertical and/or dark

**rpcg.go**
* Added a random portal code generator this function takes no args and returns a string

**README.md**
* Fixed some typos (probably more to be fixed)
* Added example of vertical portal banner
* Added list of options for banner creation
* Added example of ``nmslib.RndPortal()`` usage

**go.mod**
* updated go version to 1.16

See merge request Raum0x2A/nmslib!1
2021-05-07 16:03:08 +00:00
Raum0x2A
284313eacc Updates and Fixes
**resource.go/assets.go**
*  renamed `resources.go` to `assets.go`
*  added dark glyphs - located in assets.go -> assets/glyphs/dark/
*  moved original glyphs - located in assets.go -> assets/glyph/light/

**glyphbanner.go**
* added option to make glyphs vertical and/or dark

**rpcg.go**
* Added a random portal code generator this function takes no args and returns a string

**README.md**
* Fixed some typos (probably more to be fixed)
* Added example of vertical portal banner
* Added list of options for banner creation
* Added example of ``nmslib.RndPortal()`` usage

**go.mod**
* updated go version to 1.16
2021-05-07 16:03:08 +00:00
Raum0x2A
faf72d1f7a Deleted assets/glyphs/dark/PORTALSYMBOL.0.png, assets/glyphs/dark/PORTALSYMBOL.1.png, assets/glyphs/dark/PORTALSYMBOL.2.png, assets/glyphs/dark/PORTALSYMBOL.3.png, assets/glyphs/dark/PORTALSYMBOL.4.png, assets/glyphs/dark/PORTALSYMBOL.5.png, assets/glyphs/dark/PORTALSYMBOL.6.png, assets/glyphs/dark/PORTALSYMBOL.7.png, assets/glyphs/dark/PORTALSYMBOL.8.png, assets/glyphs/dark/PORTALSYMBOL.9.png, assets/glyphs/dark/PORTALSYMBOL.A.png, assets/glyphs/dark/PORTALSYMBOL.B.png, assets/glyphs/dark/PORTALSYMBOL.C.png, assets/glyphs/dark/PORTALSYMBOL.D.png, assets/glyphs/dark/PORTALSYMBOL.E.png, assets/glyphs/dark/PORTALSYMBOL.F.png, assets/glyphs/light/PORTALSYMBOL.0.png, assets/glyphs/light/PORTALSYMBOL.1.png, assets/glyphs/light/PORTALSYMBOL.2.png, assets/glyphs/light/PORTALSYMBOL.3.png, assets/glyphs/light/PORTALSYMBOL.4.png, assets/glyphs/light/PORTALSYMBOL.5.png, assets/glyphs/light/PORTALSYMBOL.6.png, assets/glyphs/light/PORTALSYMBOL.7.png, assets/glyphs/light/PORTALSYMBOL.8.png, assets/glyphs/light/PORTALSYMBOL.9.png, assets/glyphs/light/PORTALSYMBOL.A.png, assets/glyphs/light/PORTALSYMBOL.B.png, assets/glyphs/light/PORTALSYMBOL.C.png, assets/glyphs/light/PORTALSYMBOL.D.png, assets/glyphs/light/PORTALSYMBOL.E.png, assets/glyphs/light/PORTALSYMBOL.F.png, assets/lang/atlas-lang.csv, assets/lang/gek-lang.csv, assets/lang/korvax-lang.csv, assets/lang/vykeen-lang.csv files 2021-05-07 15:53:04 +00:00
Raum0x2A
7c5d4b5ce8 Updated 2021-05-06 22:47:55 -06:00
Raum0x2A
ad42c6bb04 Updated 2021-05-06 22:02:21 -06:00
Raum0x2A
5ca88596ff Added vertical example of portal banner 2021-05-06 21:49:17 -06:00
Raum0x2A
53d85d958b modified .gitignore 2021-05-06 20:26:45 -06:00
Raum0x2A
ea51873fe3 Upddated Go version 2021-05-06 19:58:19 -06:00
Raum0x2A
90d743286f Minor Changes 2021-05-06 16:51:09 -06:00
Raum0x2A
bc0c364dcc added .gitignore 2021-05-06 16:40:48 -06:00
Raum0x2A
43496932ef removed some debug output 2021-05-06 11:32:47 -06:00
Raum0x2A
d6bfa643a9 added assets.go 2021-05-06 11:21:35 -06:00
Raum0x2A
877517b923 exported t.Word in nmslib.Translate literal 2021-05-06 09:48:53 -06:00
Raum0x2A
ccbd68aee8 Added dark mode option to CreateBanner() func
- Fixed PORTALSYMBOL file names
- Now using image files from assets/glyphs
- CreateBanner() func options tweaked
2021-05-06 00:52:01 -06:00
Raum0x2A
5077876106 Minor changes 2021-05-06 00:51:00 -06:00
Raum0x2A
9682494ce1 Removed resources.go
`resources.go` is no more! All glyphs, and Lang files have been
extracted to the assets folder. A complete rework of
`glyphbanner.go` is begining.

 - resources.go -> DELETED
2021-05-05 22:12:14 -06:00
Raum0x2A
87bec565f1 Update .gitlab-ci.yml file 2021-05-06 02:20:08 +00:00
Raum0x2A
a7069dce7e Added section for Random Portal func 2021-05-05 19:44:49 -06:00
Raum0x2A
bc4e334ecd Minor Updates 2021-05-05 19:43:05 -06:00
Raum0x2A
9358727075 added RndPoral func to create Random Portal code 2021-05-05 18:42:00 -06:00
bradley.richins
3449ae3bf3 Updated 2020-10-28 11:40:13 -06:00
Bradley Richins
023eab03b2 Update .gitlab-ci.yml 2020-10-28 17:23:00 +00:00
Bradley Richins
5f4414df03 Update README.md 2020-10-28 16:38:05 +00:00
bradley.richins
57a1d729dd added .gitlab-ci.yml 2020-10-28 10:10:08 -06:00
bradley.richins
67db2e32ef Updated README.md 2020-10-24 10:38:28 -06:00
bradley.richins
2bb7ca6ccd Updated Recources
Improved/Fixed CSV formatting issues
2020-10-23 12:19:49 -06:00
bradley.richins
2610d98ae1 Updated Translation tests 2020-10-23 12:19:16 -06:00
bradley.richins
32d533ff61 Added supprot for Gek, Vykeen and Atlas
Eng2Atl & Atl2Eng - NEW
Eng2Gek & Gek2Eng - NEW
Eng2Vyk & Vyk2Eng - NEW
Eng2Kor & Kor2Eng
2020-10-23 12:15:34 -06:00
bradley.richins
ac68a20697 Updated recources
korvax-lang.csv
glyphs/GLYPH-0.png
glyphs/GLYPH-1.png
glyphs/GLYPH-2.png
glyphs/GLYPH-3.png
glyphs/GLYPH-4.png
glyphs/GLYPH-5.png
glyphs/GLYPH-6.png
glyphs/GLYPH-7.png
glyphs/GLYPH-8.png
glyphs/GLYPH-9.png
glyphs/GLYPH-A.png
glyphs/GLYPH-B.png
glyphs/GLYPH-C.png
glyphs/GLYPH-D.png
glyphs/GLYPH-E.png
glyphs/GLYPH-F.png

atlas-lang.csv  - NEW
gek-lang.csv    - NEW
vykeen-lang.csv - NEW
2020-10-23 09:48:14 -06:00
bradley.richins
0b90141dcd Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax

https://gitlab.com/bradley.richins/nmslib/-/tree/develop#usage
2020-10-22 13:43:26 -06:00
bradley.richins
5bc5711f09 Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax
2020-10-22 13:38:16 -06:00
bradley.richins
00411f015c Complete redesign of lang.go
Some code is now reusable

- openCSV()
- toKor()
- toEng()

the new translation syantax is

```golang
korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
// or
fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
```

output:

`Zelidovoso`
2020-10-22 13:11:03 -06:00
bradley.richins
ab9799b273 Rewrite on all lang translation tests 2020-10-22 13:10:59 -06:00
13 changed files with 1457 additions and 825 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
assets/

9
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,9 @@
stages:
- test
test:
stage: test
image: golang:1.16.3
script:
- go test

114
README.md
View File

@@ -1,9 +1,12 @@
# NMSlib # NMSlib
**master Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/master/pipeline.svg)
**develop Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/develop/pipeline.svg)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa. NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
NMSlib also translates known Korvax words to English and back. NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to english, and create portal banners.
- Gek, Vykeen, etc will be added in the future
## Installation ## Installation
@@ -11,7 +14,7 @@ To install this module use `go get`
```bash ```bash
go get -u gitlab.com/bradley.richins/nmslib go get -u gitlab.com/Raum0x2A/nmslib
``` ```
## Usage ## Usage
@@ -24,21 +27,23 @@ package main
import ( import (
"fmt" "fmt"
"gitlab.com/bradley.richins/nmslib" "gitlab.com/Raum0x2A/nmslib"
) )
func main() { func main() {
portalcode := "006afa556c30" portalcode := "21F2F8EDB94D"
tstvar, err := nmslib.P2gc(portalcode) tstvar, err := nmslib.P2gc(portalcode)
if err != nil { if err != nil {
panic(err) panic(err)
} }
fmt.Printf("Input:\t%s\nExpecting:\t042F:0079:0D55:006A\nHave:\t%s\n", portalcode, tstvar) fmt.Printf("Input:\t%s\nExpecting:\t014C:0077:06DA:01F2\nHave:\t%s\n", portalcode, tstvar)
nmslib.CreateBanner(portalcode, "NewLennon.png", 0) nmslib.CreateBanner(portalcode, "NewLennon.png", 0)
nmslib.CreateBanner(RndPortal(), "Random.png", 0)
fmt.Println(nmslib.Korvax2Eng("eapoluch")) fmt.Println(nmslib.Translate{"KIHTYOMOLES"}.Kor2Eng())
fmt.Println(nmslib.Eng2Korvax("emergency")) korvax := nmslib.Translate{"Contraband"}
fmt.Println(nmslib.korvax.Eng2Kor())
} }
``` ```
@@ -49,67 +54,95 @@ This function takes 3 parameters:
* portalcode: 12 char hex string of portal location * portalcode: 12 char hex string of portal location
* savename: Save location and name * savename: Save location and name
* Horizontal/Vertical layout: 0 is horizontal, 1 is vertical * layout:
* 00 or 0 is horizontal in light mode
* 01 or 1 is horizontal in dark mode
* 11 is vertical in dark mode
* 10 is vertical in light mode
**Example:** **Example:**
Horizontal Layout for Galactic Hub [HUB10-6A Icarus Sun](https://nomanssky.gamepedia.com/HUB10-6A_Icarus_Sun) Eniwa 68/L3 Horizontal Layout for Galactic Hub [HUB10-6A Icarus Sun](https://nomanssky.gamepedia.com/HUB10-6A_Icarus_Sun) Eniwa 68/L3
```golang ```golang
nmslib.CreateBanner("006afa556c30", "NewLennon.png", 0) nmslib.CreateBanner("006AFA556C30", "NewLennon.png", 0)
``` ```
![](NewLennon.png) ![](NewLennon.png)
Vertical layout for a random address
```golang
nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
```
![](ranportal_scaled.png)
_Note: Images shown in readme.md have been scaled down in gimp._
_Original Vertical: 256x3072px_
_Original: Horizontal: 3072x256px_
### Converting Portal code to Galactic address with P2gc() ### Converting Portal code to Galactic address with P2gc()
This function only takes 1 parameter and returns a string This function only takes 1 parameter and returns a string and error
* portalcode: 12 char hex string of portal glyphs * portalcode: 12 char hex string of portal glyphs
**Example:** **Example:**
```golang ```golang
ga, _ := nmslib.P3gc("006afa556c30") ga, _ := nmslib.P3gc("21F2F8EDB94D")
fmt.Println(ga) fmt.Println(ga)
``` ```
Output: Output:
``042F:0079:0D55:006A`` ``014C:0077:06DA:01F2``
### Converting Galactic coordinates to Portal codes with Gc2p() ### Converting Galactic coordinates to Portal codes with Gc2p()
This function only takes 1 parameter and returns a string This function only takes 1 parameter and returns a string and error
* galacticaddress: 16 char 4 block hex address * galacticaddress: 16 char 4 block hex address
**Example:** **Example:**
```golang ```golang
pc, _ := nmslib.P3gc("042F:0079:0D55:006A") pc, _ := nmslib.P3gc("014C:0077:06DA:01F2")
fmt.Println(pc) fmt.Println(pc)
``` ```
Output: Output:
``006AFA556C30`` ``21F2F8EDB94D``
### Translate Korvax to English with Korvax2Eng() ## Translate Words
Supported languages
- Korvax
- Gek
- Vy'keen
- Atlas
### Translate Atlas to English with Atl2Eng()
This function takes only 1 parameter and returns a string This function takes only 1 parameter and returns a string
* korvaxword: Any known Korvaxen word (ex. eapoluch) * Word: Any known Atlas word (ex. Paka)
**Example:** **Example:**
```golang ```golang
fmt.Println(Korvax2Eng("eapoluch")) fmt.Println(nmslib.Translate{"Paka"}.Atl2Eng())
``` ```
Output: Output:
``emergency`` ``Awake``
### Translate English to Korvax with Eng2Korvax() ### Translate English to Korvax with Eng2Korvax()
@@ -120,12 +153,49 @@ This function takes only 1 parameter and returns a string
**Example:** **Example:**
```golang ```golang
fmt.Println(Eng2Korvax("emergency")) korvax := nmslib.Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
``` ```
Output: Output:
``eapoluch`` ``Zelidovoso``
### Language commands
Gek:
- ``Translate{string}.Gek2Eng()``
- ``Translate{string}.Eng2Gek()``
Korvax:
- ``Translate{string}.Kor2Eng()``
- ``Translate{string}.Eng2Kor()``
Vy'keen:
- ``Translate{string}.Vyk2Eng()``
- ``Translate{string}.Eng2Vyk()``
Atlas:
- ``Translate{string}.Atl2Eng()``
- ``Translate{string}.Eng2Atl()``
## Random Portal address
### Create a random portal address
**Example:**
```golang
fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndPortal())
```
**Output:**
``10EFABDEA373``
``11EAB355FC8E``
## License ## License
[MIT](COPYING) [MIT](COPYING)

1050
assets.go Normal file

File diff suppressed because one or more lines are too long

View File

@@ -8,11 +8,8 @@ import (
) )
/* /*
The maths are all thanks to: Xainesworld Video: https://www.youtube.com/watch?v=xmZbkTahw4w
Xainesworld Fandom Wiki: https://nomanssky.fandom.com/wiki/Portal_address
- YT Channel - https://www.youtube.com/channel/UCzTB8EBVJWkzJi2sQjdBv9g
- Video: https://www.youtube.com/watch?v=xmZbkTahw4w
- Website: https://www.xainesworld.com/
*/ */
/* /*
@@ -63,7 +60,7 @@ func P2gc(p string) (gc string, err error) {
gc = fmt.Sprintf("%04X:%04X:%04X:%04X", coord[3], coord[1], coord[2], coord[0]) gc = fmt.Sprintf("%04X:%04X:%04X:%04X", coord[3], coord[1], coord[2], coord[0])
} else { // if len(p) != 12 return an error } else { // if len(p) != 12 return an error
return "", errors.New("A 12char HEX string is required. example: 006afa556c30") return "", errors.New("a 12char HEX string is required. example: 006afa556c30")
} }
return // return formated string return // return formated string
} }

View File

@@ -7,8 +7,6 @@ import (
"os" "os"
"strconv" "strconv"
"github.com/nfnt/resize"
gim "github.com/ozankasikci/go-image-merge" gim "github.com/ozankasikci/go-image-merge"
) )
@@ -18,14 +16,17 @@ var portalex string
Portal Glyph hex string Portal Glyph hex string
var savename string var savename string
Output name of PNG file Output name of PNG file
var vopt int var opt int
1 enables vertical banner 00 sets horizontal banner in light mode
0 enables horizontal banner 10 sets vertical banner in light mode
01 sets horizontal banner in dark mode
11 sets vertical banner in dark mode
*/ */
func CreateBanner(portalhex string, savename string, vopt int) { func CreateBanner(portalhex string, savename string, opt int) {
var err error var err error
var GlyphHex [12]int64 var GlyphHex [12]int64
var glyphImg [12]string var glyphImg [12]string
var mode string
var vert int var vert int
var horz int var horz int
@@ -34,7 +35,7 @@ func CreateBanner(portalhex string, savename string, vopt int) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer os.RemoveAll(tempdir) //defer os.RemoveAll(tempdir)
// verify len of portalhex // verify len of portalhex
if len(portalhex) == 12 { if len(portalhex) == 12 {
@@ -45,9 +46,25 @@ func CreateBanner(portalhex string, savename string, vopt int) {
panic(err) panic(err)
} }
} }
// set options
if opt == 00 { // set vertical rendering in light mode
vert, horz = 12, 1
mode = "light"
} else if opt == 01 { // set vertival in dark mode
vert, horz = 12, 1
mode = "dark"
} else if opt == 11 { // set horizontal rendering in dark mode
vert, horz = 1, 12
mode = "dark"
} else { // set horizontal rendering in light mode (classic/default)
vert, horz = 1, 12
mode = "light"
}
// assign image location of its glyph hex value to an array of strings // assign image location of its glyph hex value to an array of strings
for j := 0; j < len(glyphImg); j++ { for j := 0; j < len(glyphImg); j++ {
glyphImg[j] = fmt.Sprintf("glyphs/GLYPH-%X.png", GlyphHex[j]) glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[j])
} }
// pull images need from glyph.go and saved them to ./glyphs/ // pull images need from glyph.go and saved them to ./glyphs/
for k := 0; k < len(glyphImg); k++ { for k := 0; k < len(glyphImg); k++ {
@@ -55,17 +72,18 @@ func CreateBanner(portalhex string, savename string, vopt int) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
_, err2 := os.Stat(tempdir + "/glyphs/") _, err2 := os.Stat(tempdir + "/assets/glyphs/" + mode + "/")
if os.IsNotExist(err2) { if os.IsNotExist(err2) {
errDir := os.MkdirAll(tempdir+"/glyphs", 0755) errDir := os.MkdirAll(tempdir+"/assets/glyphs/"+mode, 0755)
if errDir != nil { if errDir != nil {
panic(errDir) panic(errDir)
} }
} }
// fmt.Println(tempdir + "/" + glyphImg[k]) // for debugging only
err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644) err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644)
} }
}
// load images for processing using github.com/ozankasikci/go-image-merge // load images for processing using github.com/ozankasikci/go-image-merge
grids := []*gim.Grid{ grids := []*gim.Grid{
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]}, {ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]},
@@ -76,26 +94,17 @@ func CreateBanner(portalhex string, savename string, vopt int) {
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]}, {ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
} }
if vopt == 1 { // set vertical rendering
vert, horz = 1, 12
} else { // set horizontal rendering (default)
vert, horz = 12, 1
}
// create new image from grids // create new image from grids
rgba, err := gim.New(grids, vert, horz).Merge() rgba, err := gim.New(grids, vert, horz).Merge()
if err != nil { if err != nil {
panic(err) panic(err)
} }
// Resize banner 768x64
nuimg := resize.Resize(768, 64, rgba, resize.Lanczos3)
// save the output to png // save the output to png
fmt.Printf("Saving %s to %s\n", portalhex, savename)
file, err := os.Create(savename) file, err := os.Create(savename)
err = png.Encode(file, nuimg) err = png.Encode(file, rgba)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
} }
}

7
go.mod
View File

@@ -1,8 +1,5 @@
module gitlab.com/bradley.richins/nmslib module gitlab.com/Raum0x2A/nmslib
go 1.15 go 1.15
require ( require github.com/ozankasikci/go-image-merge v0.2.2
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/ozankasikci/go-image-merge v0.2.2
)

2
go.sum
View File

@@ -1,4 +1,2 @@
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0= github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0=
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo= github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=

242
lang.go
View File

@@ -8,8 +8,15 @@ import (
"strings" "strings"
) )
// translate - set up structure of a word iteration /*
type translate struct { Translate words
*/
type Translate struct {
Word string
}
// trans - set up structure of a word iteration
type trans0 struct {
english string // english word english string // english word
word string // no caps word word string // no caps word
capword string // Capitalized word capword string // Capitalized word
@@ -17,9 +24,158 @@ type translate struct {
} }
/* /*
Korvax2Eng - Translate a Korvax word to English Kor2Eng translate korvax word to english word
*/ */
func Korvax2Eng(kvwrd string) string { func (t Translate) Kor2Eng() (returnstring string) {
csvlines := openCSV("korvax-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Kor translate english word to korvax word
*/
func (t Translate) Eng2Kor() (returnstring string) {
csvlines := openCSV("korvax-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Gek2Eng translate Gek word to english word
*/
func (t Translate) Gek2Eng() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Gek translate english word to Gek word
*/
func (t Translate) Eng2Gek() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Vyk2Eng translate vykeen word to english word
*/
func (t Translate) Vyk2Eng() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Vyk translate english word to vykeen word
*/
func (t Translate) Eng2Vyk() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Atl2Eng translate Atlas word to english word
*/
func (t Translate) Atl2Eng() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Atl translate english word to Atlas word
*/
func (t Translate) Eng2Atl() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
func toEng(t Translate, csvlines [][]string) string {
returnstring := "*\\Kzzzzzzt\\*" // word not found default
for _, line := range csvlines {
lang := trans0{
english: strings.ToLower(line[0]),
word: strings.ToLower(line[1]),
capword: strings.ToLower(line[2]),
acpword: strings.ToLower(line[3]),
}
// check translate struct for value
if strings.ToLower(t.Word) == lang.word {
returnstring = lang.english
} else if strings.ToLower(t.Word) == lang.capword {
returnstring = strings.Title(strings.ToLower(lang.english))
} else if strings.ToLower(t.Word) == lang.acpword {
returnstring = strings.ToUpper(lang.english)
}
}
return returnstring
}
func toNMS(t Translate, csvlines [][]string) string {
returnstring := "*\\Kzzzzzzt\\*" // word not found default
for _, line := range csvlines {
lang := trans0{
english: line[0],
word: line[1],
capword: line[2],
acpword: line[3],
}
if t.Word == lang.english {
if lang.word != "" {
returnstring = lang.word
}
}
if t.Word == strings.Title(strings.ToLower(lang.english)) {
if lang.capword != "" {
returnstring = strings.Title(strings.ToLower(lang.capword))
}
}
if t.Word == strings.ToUpper(lang.english) {
if lang.acpword != "" {
returnstring = strings.ToUpper(lang.acpword)
}
}
}
return returnstring
}
/*
func openCSV(lagcsv string) [][]string {
csvFile, err := os.Open("./assets/lang/" + lagcsv)
if err != nil {
fmt.Println(err)
}
defer csvFile.Close() // close language file when finished
// read csv file from memory
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
return csvlines
*/
func openCSV(lagcsv string) [][]string {
// create temp dir // create temp dir
tempdir, err := ioutil.TempDir("", "nmslib-") tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil { if err != nil {
@@ -28,88 +184,24 @@ func Korvax2Eng(kvwrd string) string {
defer os.RemoveAll(tempdir) // Clean up temp files defer os.RemoveAll(tempdir) // Clean up temp files
// extract language file from resources.go // extract language file from resources.go
data, err := Asset("korvax-lang.csv") data, err := Asset("assets/lang/" + lagcsv)
if err != nil { if err != nil {
panic(err) panic(err)
} }
// wirte extracted data to temp dir // wirte extracted data to temp dir
err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644) err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/korvax-lang.csv") csvFile, err := os.Open(tempdir + "/" + lagcsv)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
defer csvFile.Close() // close language file when finished defer csvFile.Close() // close language file when finished
// read csv file from memory
csvlines, err := csv.NewReader(csvFile).ReadAll() csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
// loop through language data and assign to translate strut return csvlines
for _, line := range csvlines {
lang := translate{
english: strings.ToLower(line[0]),
word: strings.ToLower(line[1]),
capword: strings.ToLower(line[2]),
acpword: strings.ToLower(line[3]),
}
// check translate struct for value
if strings.ToLower(kvwrd) == lang.word {
return lang.english
} else if strings.ToLower(kvwrd) == lang.capword {
return strings.Title(strings.ToLower(lang.english))
} else if strings.ToLower(kvwrd) == lang.acpword {
return strings.ToUpper(lang.english)
}
}
return "*\\Kzzzzzzt\\*" // word not found default
}
/*
Eng2Korvax - Convert (some) english words to Korvax
*/
func Eng2Korvax(enwrd string) string {
// setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib")
if err != nil {
panic(err)
}
defer os.RemoveAll(tempdir) // clean up temp files
data, err := Asset("korvax-lang.csv")
if err != nil {
panic(err)
}
err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/korvax-lang.csv")
if err != nil {
fmt.Println(err)
}
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range csvlines {
lang := translate{
english: line[0],
word: line[1],
capword: line[2],
acpword: line[3],
}
if enwrd == lang.english {
if lang.word != "" {
return lang.word
}
}
if enwrd == strings.Title(strings.ToLower(lang.english)) {
if lang.capword != "" {
return strings.Title(strings.ToLower(lang.capword))
}
}
if enwrd == strings.ToUpper(lang.english) {
if lang.acpword != "" {
return strings.ToUpper(lang.acpword)
}
}
}
csvFile.Close()
return "*\\Kzzzzzzt\\*" // word not found default
} }

View File

@@ -5,6 +5,17 @@ import (
"testing" "testing"
) )
func TestRndPortal(t *testing.T) {
fmt.Printf("\nRandom Portal Code: ")
fmt.Println(RndPortal())
}
func TestCreateBanner(t *testing.T) {
fmt.Printf("\nTesting CreateBanner: ")
CreateBanner(RndPortal(), "/tmp/Test.png", 11)
fmt.Printf("Random Portal address rendered as `/tmp/Test.png`\n\n")
}
func TestPortal2Galactic(t *testing.T) { func TestPortal2Galactic(t *testing.T) {
want, err := P2gc("006afa556c30") want, err := P2gc("006afa556c30")
if err != nil { if err != nil {
@@ -33,9 +44,9 @@ func TestGalactic2portal(t *testing.T) {
panic(err) panic(err)
} }
if want != "106AFA556C30" { if want != "106AFA556C30" {
t.Errorf("Testing Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30") t.Errorf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30")
} else { } else {
fmt.Printf("Testing Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30") fmt.Printf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30")
} }
want, err = Gc2p("042E:0078:0D53:01ED", 4) want, err = Gc2p("042E:0078:0D53:01ED", 4)
@@ -49,69 +60,31 @@ func TestGalactic2portal(t *testing.T) {
} }
} }
func TestCreateBanner(t *testing.T) { func TestTranslate(t *testing.T) {
fmt.Printf("Testing CreateBanner: ") want := Translate{"Paka"}
CreateBanner("006afa556c30", "/tmp/Test.png", 0) if want.Atl2Eng() != "Awake" {
} t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
func TestKorvax2Eng(t *testing.T) {
want := Korvax2Eng("rodiashikhv")
if want != "contraband" {
t.Errorf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband") fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
} }
want = Translate{"hofsos"}
want = Korvax2Eng("KIHTYOMOLES") if want.Gek2Eng() != "answer" {
if want != "CONTRABAND" { t.Errorf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
t.Errorf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND") fmt.Printf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
} }
want = Korvax2Eng("Zelidovoso") want = Translate{"Aqo"}
if want != "Contraband" { if want.Vyk2Eng() != "Foes" {
t.Errorf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband") t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband") fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} }
want = Translate{"Alinichel"}
want = Korvax2Eng("notaword") if want.Kor2Eng() != "Emergency" {
if want != "*\\Kzzzzzzt\\*" { t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
t.Errorf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*") fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
} }
} fmt.Printf("\nTesting complete.\nStatus: ")
func TestEng2Korvax(t *testing.T) {
want := Eng2Korvax("contraband")
if want != "rodiashikhv" {
t.Errorf("Testing Eng2Korvax(\"contraband\"): got %q, want: %q.\n", want, "rodiashikhv")
} else {
fmt.Printf("Testing Eng2Korvax(\"contraband\"): got %q, want: %q.\n", want, "rodiashikhv")
}
want = Eng2Korvax("CONTRABAND")
if want != "KIHTYOMOLES" {
t.Errorf("Testing Eng2Korvax(\"CONTRABAND\"): got %q, want: %q.\n", want, "KIHTYOMOLES")
} else {
fmt.Printf("Testing Eng2Korvax(\"CONTRABAND\"): got %q, want: %q.\n", want, "KIHTYOMOLES")
}
want = Eng2Korvax("Contraband")
if want != "Zelidovoso" {
t.Errorf("Testing Eng2Korvax(\"Contraband\"): got %q, want: %q.\n", want, "Zelidovoso")
} else {
fmt.Printf("Testing Eng2Korvax(\"Contraband\"): got %q, want: %q.\n", want, "Zelidovoso")
}
want = Eng2Korvax("notaword")
if want != "*\\Kzzzzzzt\\*" {
t.Errorf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else {
fmt.Printf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
}
fmt.Printf("Testing: ")
} }

BIN
ranportal_scaled.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

41
rpcg.go Normal file
View File

@@ -0,0 +1,41 @@
package nmslib
import (
"fmt"
"math/rand"
"time"
)
/*
[P][SSS][YY][ZZZ][XXX] (P = Planet Index / S = Star System Index / Y = Height / Z = Width / X = Length)
`Solar System Index
A Solar System Index is assigned to each star system in a region. It always begins at SolarSystemIndex=001
and counts up by one for every star system. The number of star systems in a region is variable so the
maximum value of the Solar System Index is also variable, though the two correspond directly. To date there
is no discovered value that is higher than SolarSystemIndex=243 (Mamundi-Kate in the Baadossm Anomaly of
Euclid galaxy), meaning that 579 is the maximum number of star systems yet discovered in a region. Based
on the evidence that every region has a SolarSystemIndex=079 and SolarSystemIndex=07A (with the former
always having a Black Hole and the latter always having an Atlas Station), it is known that every region has
at least 122 star systems. SolarSystemIndex=000 always leads to the region's first system, just like
PlanetIndex=0 always leads to the first portal of a system due to the error proximity mechanic.`
Source https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index
*/
func RndPortal() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
ssimax := 0x242 // set this low to lower chances of an invalid address
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
ssi := rand.Intn(ssimax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, ssi, y, z, x)
return
}